腾讯微博Oauth2.0认证以及登录

关于腾讯微博的开发,论坛里其实也有不少例子,但很多都是基于OAUTH1.0的认证
然后SDK包会有很多显得异常臃肿,有些童鞋并不是做的腾讯微博客户端之类的软件
而只是需要用到其分享到腾讯微博的小功能而已,那么导入如此之多的jar包实在是没有必要
而且官方出了2.0的认证,对SDK也作了很多精简,我们自然也要与时俱进了
下面就来谈谈如何使用官方SDK来进行简单的认证以及发微博功能  
这里对于如何开发腾讯微博的基础知识就不作普及了,大家看官方文档就OK了
http://wiki.open.t.qq.com/index.php/%E7%A7%BB%E5%8A%A8%E5%BA%94%E7%94%A8%E6%8E%A5%E5%85%A5/Android_SDK_V1.2

下面上几张效果图:

下面上几张效果图:




其实不同微博它们的认证过程都是大同小异
我们在认证页面认证通过后需要获得三个值:
access_token  授权码
openid              用户统一标识 ,可以唯一标识一个用户       
openkey          与openid对应的用户key,是验证openid身份的验证密钥

得到这三个值后将其保存到数据库,下次再进入应用的时候,将其设入OAuthV2即可(本例采用2.0认证,故接口调用均涉及到此类)
先看看webview认证页面代码:
public class OAuthV2WebViewActivity extends Activity {

private final CommonLog log = LogFactory.createLog();

private View progressBar;


private Context mContext;
private WebView mWebView;
private WebViewClient mWebViewClient;
private QQWeiboProxy mQqWeiboProxy;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.webview_layout);
mContext = this;

initView();

initData();


}


private void initView()
{
mWebView = (WebView) findViewById(R.id.webview);
mWebView.setVerticalScrollBarEnabled(false);
mWebView.setHorizontalScrollBarEnabled(false);
mWebView.requestFocus();

WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setBuiltInZoomControls(true);
webSettings.setSupportZoom(true);
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);

progressBar = findViewById(R.id.show_request_progress_bar);
}

private void initData()
{
mWebViewClient = new WeiboWebViewClient();
mWebView.setWebViewClient(mWebViewClient);

CookieSyncManager.createInstance(this);

mQqWeiboProxy = QQWeiboProxy.getInstance();
String urlStr = mQqWeiboProxy.getAuthoUrl();

mWebView.requestFocus();
mWebView.loadUrl(urlStr);
}

private void showProgress()
{
runOnUiThread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
progressBar.setVisibility(View.VISIBLE);
}
});

}

private void hideProgress()
{
runOnUiThread(new Runnable() {

@Override
public void run() {
// TODO Auto-generated method stub
progressBar.setVisibility(View.INVISIBLE);
}
});


}


private class WeiboWebViewClient extends WebViewClient
{
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
showProgress();
log.e("onPageStarted URL = " + url);
if (url.indexOf("access_token=") != -1) {
int start=url.indexOf("access_token=");
String responseData=url.substring(start);

boolean ret = mQqWeiboProxy.parseAccessTokenAndOpenId(responseData);
if (ret)
{
String access_token = mQqWeiboProxy.getAccessToken();
String expires_in = mQqWeiboProxy.getExpireIn();
String openID = mQqWeiboProxy.getOpenID();
String openKey = mQqWeiboProxy.getOpenKey();

log.e("access_token = " + access_token + "\nexpires_in = " + expires_in +
"\nopenID = " + openID + "\nopenKey = " + openKey);

AuthoSharePreference.putToken(mContext, access_token);
AuthoSharePreference.putExpires(mContext, expires_in);
AuthoSharePreference.putOpenID(mContext, openID);
AuthoSharePreference.putOpenKey(mContext, openKey);

setResult(RESULT_OK);
finish();
}else{
Toast.makeText(OAuthV2WebViewActivity.this, "Autho Fail...", Toast.LENGTH_SHORT).show();
}

view.destroyDrawingCache();
view.destroy();

}
super.onPageStarted(view, url, favicon);
}



@Override
public void onPageFinished(WebView view, String url) {
// TODO Auto-generated method stub
hideProgress();
super.onPageFinished(view, url);
}


/*
* TODO Android2.2及以上版本才能使用该方法
* 目前https://open.t.qq.com中存在http资源会引起sslerror,待网站修正后可去掉该方法
*/
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
if ((null != view.getUrl()) && (view.getUrl().startsWith("https://open.t.qq.com"))) {
handler.proceed();// 接受证书
} else {
handler.cancel(); // 默认的处理方式,WebView变成空白页
}
// handleMessage(Message msg); 其他处理
}
}
}



boolean ret = mQqWeiboProxy.parseAccessTokenAndOpenId(responseData);
用于解析url得到各项值
public boolean parseAccessTokenAndOpenId(String data)
{
if (data != null)
{
return OAuthV2Client.parseAccessTokenAndOpenId(data, mAuthV2);
}

return false;
}




然后将其存入数据库
String access_token = mQqWeiboProxy.getAccessToken();
String expires_in = mQqWeiboProxy.getExpireIn();
String openID = mQqWeiboProxy.getOpenID();
String openKey = mQqWeiboProxy.getOpenKey();

log.e("access_token = " + access_token + "\nexpires_in = " + expires_in +
"\nopenID = " + openID + "\nopenKey = " + openKey);

AuthoSharePreference.putToken(mContext, access_token);
AuthoSharePreference.putExpires(mContext, expires_in);
AuthoSharePreference.putOpenID(mContext, openID);
AuthoSharePreference.putOpenKey(mContext, openKey);



在测试微博API界面调用如下:
public class TestAPIActivity extends Activity implements OnClickListener{

private final CommonLog log = LogFactory.createLog();


private Button mBtnGetUserinfo;
private Button mBtnSendWeibo;
private TextView mTvInfo;

private QQWeiboProxy mQqWeiboProxy;

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.test_layout);

initView();

initData();
}



public void initView()
{
mBtnGetUserinfo = (Button) findViewById(R.id.btn_getuser);
mBtnGetUserinfo.setOnClickListener(this);

mBtnSendWeibo = (Button) findViewById(R.id.btn_sendweibo);
mBtnSendWeibo.setOnClickListener(this);

mTvInfo = (TextView) findViewById(R.id.tv_info);
}

public void initData()
{
mQqWeiboProxy = QQWeiboProxy.getInstance();

}

private void showInfo(String str)
{
if (str != null)
{
mTvInfo.setText(str);
}else{
mTvInfo.setText("null");
}
}

@Override
public void onClick(View view) {
// TODO Auto-generated method stub
switch(view.getId())
{
case R.id.btn_getuser:
getUser();
break;
case R.id.btn_sendweibo:
sendWeibo();
break;
}
}

private void getUser()
{
String jString = mQqWeiboProxy.getUserInfo();
showInfo(jString);
}

private void sendWeibo()
{
String jString = mQqWeiboProxy.sendWeibo("geniuseoe2012");
showInfo(jString);
}

}


测试下发微博,调用得到的json串显示在屏幕上,登陆微博查看发送成功!

下面简单介绍下工程代码:


com.mobile.tencent.weibo.sdk包是官方SDK源码拷贝过来的(作了部分裁剪)
com.mobile.tencent.weibo.sdk.proxy里除了QQWeiboProxy其它的也是SDK的源码,那些API后缀类已经封装了很多接口了
唯一额外需要导入的就一个httpmime-4.1.3jar包

这样童鞋们就可以很方便滴将代码COPY走而应用到自己的项目,当然也可以选择将那些代码重新打一个jar包导入工程
差不多就这样啦,附上工程链接:
本帖隐藏的内容
  TencenWeiboClient.zip (888.53 KB, 下载次数: 289)


最后大家记得要更换自己的应用KEY值

更多精彩请关注窝的CSDN博客:http://blog.csdn.net/geniuseoe2012
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了python应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值