现在的位置: 首页 > 综合 > 正文

android oauth认证登录新浪微博

2013年11月11日 ⁄ 综合 ⁄ 共 2556字 ⁄ 字号 评论关闭

首先是新浪微博的开发工具SDK

http://code.google.com/p/weibo4j/downloads/detail?name=weibo4android-1.2.1.zip

完全开源的 里面还有examples 非常人性化~

新浪提供的授权方式大致有3种 一种是官方推荐的oauth,还有xauth(需要单独申请权限),剩下的就是最古老的Basic Authentication(现在已经不再支持 因为会涉及到用户名和密码的明文 而在http传递时会有被窃听的危险 所以弃用)

新浪的sdk中提供了很多方法但都需要在经过认证的情况下才能使用

采用oauth时 用户不会在我们的程序中输入用户名密码 而是在指定的地方进行登录并且最终得到一组Access TokenAccess Secret  作为代替用户名密码的凭证可以一直使用下去

步骤如下:1 首先需要申请一个新浪app  ->   http://open.weibo.com/development  登录后选择第二个客户端 之后可以得到一组App KeyApp Secret

之后需要得到Request TokenRequest Secret

新建一个activity  可以在onclick中添加如下

Weibo weibo = new Weibo();
RequestToken requestToken;
try {
	requestToken =weibo.getOAuthRequestToken("weibo4android://HomeActivity");
	OAuthConstant.getInstance().setRequestToken(requestToken);
	Uri uri = Uri.parse(requestToken.getAuthenticationURL()+ "&display=mobile");
	startActivity(new Intent(Intent.ACTION_VIEW, uri));
} catch (WeiboException e) {
	e.printStackTrace();
}

其中weibo4android://HomeActivity是一个backUrl 当用户在新浪认证页面输入用户名密码验证完成后会跳转到这个backUrl 因为是android程序 所以我们希望完成认证后跳转到我们核心的activity中 所以在AndroidManifest.xml中加入配置 

<activity android:name=".HomeActivity">
	<intent-filter>
		<action android:name="android.intent.action.VIEW" />
		<category android:name="android.intent.category.DEFAULT" />
		<category android:name="android.intent.category.BROWSABLE" />
		<data android:scheme="weibo4android" android:host="HomeActivity" />
	</intent-filter>
</activity>

并且用Intent.ACTION_VIEW 来打开指定的认证页面 这样用户输入的用户名密码并不是在我们的程序中进行 保证了信息的安全
下面是跳转的activity ->HomeActivity 在oncreate()中

Uri uri=this.getIntent().getData();
try {
	RequestToken requestToken= OAuthConstant.getInstance().getRequestToken();
	AccessToken accessToken=requestToken.getAccessToken(uri.getQueryParameter("oauth_verifier") );
	OAuthConstant.getInstance().setAccessToken(accessToken);
	String token= accessToken.getToken();
	String  secret  = accessToken.getTokenSecret();
} catch (WeiboException e) {
	e.printStackTrace();
}	

先得到RequestToken 之后 需要得到最关键的 AccessToken 

AccessToken accessToken=requestToken.getAccessToken(uri.getQueryParameter("oauth_verifier") );

其中  requestToken.getAccessToken() 的参数需要的是一个pin 也就是用户命密码通过验证的凭证

我们需要这个pin来得到AccessToken  其中的Pin我们可以打开log 找到  

[Thu Sep 08 21:02:50 格林尼治标准时间+0800 2011]Post Params:
oauth_verifier=280656
&source=1561158573

红色的部分就是pin 这样就可以得到了AccessToken  -> token = accessToken.getToken();secret = accessToken.getTokenSecret();

有了token和secret后我们就可以使用sdk中提供的各种服务了 这个token和secret可以保存起来到sqlite中或者SharedPreferences中 以便未来继续使用

只要用户没有取消授权并且新浪也没有的话 这组token和secret是可以一直使用的 免去用户每次都要登录的繁琐 而且即便开发者拥有这组token也无法关联到用户名密码的信息 保证了安全

有了token和secret之后 可以

weibo.setToken(accessToken);
weibo.updateStatus("i am from android...."); 

就可以发送一条微博了

j2se部分的新浪微博sdk也基本上差不多 都是 从appKey->requestToken->pin->accessToken

a a a
  

 

 

 

抱歉!评论已关闭.