前言:作为一种新兴的网络工具,微博在某种意义上让世界变得更小。呆在家里已经成为现实。作为程序员,我们更关心的是为自己谋取利益。幸运的是,微博运营商为我们提供了丰富接口,我们可以很好地利用这些接口。首先,我们正式进入微博,第一步就是获得认证。
OAUTH协议为用户资源授权提供了安全、开放且简单的标准。与以往的授权方式不同的是,OAUTH的授权不会让第三方访问用户的账户信息(如用户名、密码),即第三方不需要使用用户的用户名和密码。请求对此用户的资源进行授权,因此 OAUTH 是安全的。
废话不多说,直接进入今天的正题:如何实现新浪微博的Oauth2.0认证与自动登录
1.首先下载新浪最新的SDK文档。下载地址如下:
http://www.sychzs.cn/p/android-weibo-sdk/downloads/list
下一个贼weibo_sdk_source_code_www.sychzs.cn
com_weibo_android 内有2个项目(引用的项目是库)和com_weibo_android_example(示例项目,请注明com_weibo_android )
(右键单击示例项目)选择属性---android---单击在下方添加并选择参考项目。
OK,完成以上步骤后,其实example就可以开始运行了,但是这个DEMO总是需要先进行身份验证,然后再做一些后续推文等待API操作,我们希望通过第一次认证后,可以直接登录,无需进一步的认证操作。如何实现这一目标?
查看示例中的代码
类 AuthDialogListener 实现 WeiboDialogListener {@Overridepublic void onComplete(Bundle value) {String token = values.getString("access_token");String expires_in = value.getString("expires_in");mToken.setText("access_token : " + token + "expires_in: "+expires_in);AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET);//accessToken.setExpiresIn(expires_in);Weibo.getInstance().setAccessToken(accessToken);Intent Intent = new Intent();intent .setClass(AuthorizeActivity.this, TestActivity.class);startActivity(意图);}
认证成功后,关键是保存access_token字段的值,,然后构造AccessToken对象,最后调用微博。setAccessToken该方法之后,后面就可以进行相关的API调用操作了。自然,我们想到这样做:认证成功后,使用数据库或者SharePreference来保存access_token值。 决定每次进入应用程序时是否保存该值。如果是的话,直接取出access_token值,构造AccessToken对象和微博。setAccessToken。
所以我想出了以下登录代码片段:
String token = AuthoSharePreference.getToken(this);AccessToken accessToken = new AccessToken(token, WeiboConstParam.CONSUMER_SECRET); Weibo.getInstance().setAccessToken(accessToken);
但仅仅这样做还不够。后续调整API仍然会失败。我上网查了一下,找到了答案
添加Utility.setAuthorization(newOauth2AccessTokenHeader());,用于设置Oauth2 类型 是的,具体原因不得而知,但总之就是这样。
完整代码如下:
public void login(){Utility.setAuthorization(new Oauth2AccessTokenHeader());String token = AuthoSharePreference.getToken(this);AccessToken accessToken = new AccessToken(token, WeiboConstParam.CONSUMER_SECRET); Weibo.getInstance().setAccessToken( accessToken);goPlayActivity();}
这是关于新浪微博的Oauth2.0身份验证和登录问题已经解决了,不过话说回来,写新浪的这家伙SDK真是作弊,写SDK把所有接口的东西都放进去,然后认证部分使用SDK中的资源,所以我们的项目要依赖SDK项目,不能直接使用导入jar包方法即可使用。
如果我们把SDK中的认证码删除,自己实现认证流程,复制修剪后的SDK,我们的项目就不用再依赖SDK项目了
详情请参考这篇博文:http://www.sychzs.cn/geniuseoe2012/article/details/7768892
最后粘贴DEMO效果图:
这是未认证时的界面:
然后进入认证界面
认证通过后,进入微博发帖界面
退出程序重新进入,然后直接登录
最后附上项目链接:http://www.sychzs.cn/detail/geniuseoe2012/4417782 (该链接因故被 Harmony 丢失,作弊的 CSDN 也没有给出解释,请阅读本文直接文章博文http://www.sychzs.cn/geniuseoe2012/article/details/7768892去里面的demo)
有两个工程文件com_weibo_android和TestWeiboDemo
前面的是作为链接库的,后面的是demo
使用demo时请注意修改www.sychzs.cn文件
公共接口WeiboConstParam {String CONSUMER_KEY = "-----"; // appkeyString CONSUMER_SECRET = "-----"; // SecretString REDIRECT_URL = "----------" ; // url回调地址}
将对应的值改为你自己的即可
最后一个问题,Oauth认证获取的Access_token值是有有效期的,未审核的应用为1天,审核后的应用为1周
本例不做过期判断。孩子可以添加自己的判断,过期后进行重新认证流程
好了,时间不早了,今天就先这样吧。 。 。
以后我会为大家提供其他微博课程。 。 。