腾讯微博Oauth2.0认证以及登录
2013-05-31 16:24
344 查看
关于腾讯微博的开发,论坛里其实也有不少例子,但很多都是基于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认证页面代码:
boolean ret = mQqWeiboProxy.parseAccessTokenAndOpenId(responseData);
用于解析url得到各项值
然后将其存入数据库
在测试微博API界面调用如下:
测试下发微博,调用得到的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
然后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
相关文章推荐
- android腾讯微博Oauth2.0认证以及登录
- 【Android 腾讯微博】-- Oauth2.0认证以及登录
- android新浪微博Oauth2.0认证以及登录
- android新浪微博Oauth2.0认证以及登录
- android新浪微博Oauth2.0认证以及登录
- SSH 原理和基本使用:ssh 安全配置 以及ssh key 认证登录
- oauth2.0认证和授权原理以及视频教程
- oauth2.0认证和授权原理以及视频教程
- Spring Cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
- iOS学习系列 - 在iOS客户端实现google oauth2登录以及在asp.net服务端上form认证
- shiro实现APP保持登录状态,以及web统一登录认证和权限管理,会话保持在web和APP之间。
- java基于OAUTH2.0的新浪微博授权认证,新浪微博登录,数据抓取,查看,发微博等
- (十一) 整合spring cloud云架构 - SSO单点登录之OAuth2.0登录认证(1)
- C#搭建Oauth2.0认证流程以及代码示例
- macOS微信客户端插件,支持免认证登录、多账号登录以及防撤回
- shiro登录认证以及未知错误:Authentication failed for token submission
- 第三方授权认证(一)实现第三方授权登录、分享以及获取用户资料
- 结合WAS简析J2EE规范中的登录认证和非规范中的注销以及通过filter增加自定义处理过程
- Android腾讯微博客户端开发六:给用户加VIP认证以及美化微博显示内容