前言:微博作为新兴的一项网络工具,在某种意义上讲实现了把世界变小的作用。足不出户,也变成了现实。作为程序员我们更加关注的是为我所用。幸好的是微博运行商为我们提供了丰富的接口,我们可以善用这些接口。首先我们正式进入微博,第一部就是获取认证。
OAUTH协议为用户资源的授权提供了一个安全的、开放而又简易的标准。与以往的授权方式不同之处是OAUTH的授权不会使第三方触及到用户的帐号信息(如用户名与密码),即第三方无需使用用户的用户名与密码就可以申请获得该用户资源的授权,因此OAUTH是安全的。
下面废话不多说,直接进入今天的主题:如何实现新浪微博的Oauth2.0认证以及自动登录
1.首先下载新浪最新SDK文档,下载地址如下:
http://code.google.com/p/android-weibo-sdk/downloads/list
下贼个东东weibo_sdk_source_code_20120322.zip
里面有2个项目 com_weibo_android (引用项目 is Library)和com_weibo_android_example(例子项目,要引用 com_weibo_android)
(右键 例子项目) 选择properties---android---点击下面的Add 选择引用项目即可。
2.在新浪微博开发平台,创建一个应用,获得App Key和App Secret替换到 例子项目的App Key和App Secret,
重要一点 ,要在 开发平台---我的应用中---应用信息---高级信息里面 填写应用回调页 (这个可以任意写)
3.在AuthorizeActivity 中替换掉App Key和App Secret
然后 填写应用回调页 要和上面的一致,必须填写
// Oauth2.0
// 隐式授权认证方式
weibo.setRedirectUrl("http://www.cetetek.com");// 此处回调页内容应该替换为与appkey对应的应用回调页
// 对应的应用回调页可在开发者登陆新浪微博开发平台之后,
// 进入我的应用--应用详情--应用信息--高级信息--授权设置--应用回调页进行设置和查看,
// 应用回调页不可为空
4.这样就可以进行授权登录了,登录成功还可以进行 分享微博,这是sdk中自带的方法。
OK,完成上面几步,其实example就可以跑起来了,不过这个DEMO始终都需要先进行认证,然后再进行后续一些发微博等API操作,而我们希望在第一次认证通过之后,以后直接就登录不用再进行认证操作,那该如何实现?
看example的这段代码
class AuthDialogListener implements WeiboDialogListener { @Override public void onComplete(Bundle values) { String token = values.getString("access_token"); String expires_in = values.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(intent); }
在认证成功后,关键在于保存access_token字段的值,然后构造AccessToken对象,最后调用Weibo.setAccessToken方法后,后续即可进行相关API调用操作。很自然而然的我们想到这么做:认证成功后,用数据库或是SharePreference保存access_token值,每次进入应用的时候判定是否保存该值,如果是的话直接取出access_token值,构造AccessToken对象并Weibo.setAccessToken。
于是就有了以下登录代码段的臆想:
String token = AuthoSharePreference.getToken(this); AccessToken accessToken = new AccessToken(token, WeiboConstParam.CONSUMER_SECRET); Weibo.getInstance().setAccessToken(accessToken);
不过光这么做可不够,后续调API操作还是会失败,上网搜了搜找到答案
加上Utility.setAuthorization(new Oauth2AccessTokenHeader());就可以了,这是用来设置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://blog.csdn.net/geniuseoe2012/article/details/7768892
最后贴上DEMO效果图:
这是未经过认证时的界面:
然后进入认证界面
认证通过后进入发微博界面
退出程序后再次进入,这时直接登录即可
最后附上工程链接:http://download.csdn.net/detail/geniuseoe2012/4417782(该链接不知为何给和谐掉了,坑爹的CSDN也不给个说法,大家直接看这篇博文http://blog.csdn.net/geniuseoe2012/article/details/7768892去下里面的demo吧)
里面有两个工程·文件com_weibo_android和TestWeiboDemo
前面那个是作为链接库,后面是demo
大家使用demo的时候注意修改WeiboConstParam.java文件
public interface WeiboConstParam { String CONSUMER_KEY = "-----"; // appkey String CONSUMER_SECRET = "------"; // secret String REDIRECT_URL = "-----------"; // url回调地址 }
相应值改成自个儿的就可以了
最后再说个问题,Oauth认证得到的Access_token 值有过期时间,未审核的应用为一天,已审核的为一周
本例没有作过期判断,童鞋们可自行添加判断过期后执行再次认证的过程
好了,时间不早了,今天先这样吧。。。
以后再给大伙儿补上微博其它课程。。。