您的位置:首页 > 移动开发 > Android开发

Android 关于新浪微博的OAuth2.0授权

2015-05-30 17:12 465 查看
最近在研究新浪微博的客户端,也下载了一些相关的视频,视频中关于新浪微博授权是用的OAuth1.0,程序在写到一半的时候进行不下去,然后去[新浪微博开放平台](http://open.weibo.com/)查看相关内容,发现OAuth1.0早就废止了,程序写了一半,丢掉很可惜,所以只能自己研究如何通过OAuth2.0进行微博认证。
如果不使用别的第三方OAuth认证的库或者自己开发认证方法的话,可以直接使用新浪提供的SDK,简单方便,而且说明详细。下载地址:https://github.com/sinaweibosdk/weibo_android_sdk    SDK的使用在里面的说明文档中有很详细的说明。(下面叙述的与帮助文档中可能类似):
**1. 使用下载的SDK之前要先申请应用程序的APP_KEY**
用户首先需要在微博开放平台上对应用进行注册,并获取APP_KEY,添加应用的授权回调页(Redirect URI),详细查看[移动客户端接入](http://open.weibo.com/wiki/%E7%A7%BB%E5%8A%A8%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%8E%A5%E5%85%A5) 。另外,如果想要添加某个用户为测试用户,应该在应用的“应用信息”的“测试账号”中加入该用户。

**2.一定要注册应用程序的包名和签名**
*注意:包名和签名未注册,或者签名注册不正确,都会导致无法授权。 *

应用程序包名:指AndroidManifest.xml文件中,package标签所代表的内容。
应用程序签名:该签名是通过官方提供的签名工具生成的MD5值。详情查看SDK帮助文档

**3.官方的提供SDK JAR包(weibosdkcore.jar)放到工程的libs目录下**

添加JAR包:工程→右键→properties→java build path→libraries→add external jar

**4.可以将WeiboSDK中几个文件夹拉到你自己的项目中,以及将WeiboSDKDemo中Constants类复制到自己项目中,并把APP_KEY改为自己申请的。**






**5.认证授权 (新浪微博可能发神经,sso不知为何不能使用,所以我用的是web授权)**

目前微博SDK为开发者提供三种授权方式: 
SSO授权:仅当手机安装新浪微博。客户端时使用 SSO 授权登陆
Web 授权:在没有客户端的情况下,可直接使用该授权
SSO+Web  授权: 如果手机端安装了新浪微博客户端的话会默认发起SSO授权,反之则进行Web授权

**6.调用API**
获取到Access Token后,开发者可以保存它的值,调用API的时候直接用就可以了,以及实现后期自动登陆等功能。Access Token有一定的有效期,过期后需要重新授权。

AuthrizeActivity.java


/*
* 授权窗口。授权完成之后,将信息存到数据库
*/
public class AuthorizeActivity extends Activity {

private static final String TAG = "AuthorizeActivity";
// auth认证对话框
private Dialog dialog;
// 认证信息
private AuthInfo authInfo;

/** 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能 */
private Oauth2AccessToken accessToken;

/** 注意:SsoHandler 仅当 SDK 支持 SSO 时有效 */
private SsoHandler ssoHandler;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO 自动生成的方法存根
super.onCreate(savedInstanceState);
this.setContentView(R.layout.authorize);

// 添加一个自定义的Dialog
View diaView = View.inflate(this, R.layout.authorize_dialog, null);
// 使用自定义的Dialog样式
dialog = new Dialog(this, R.style.auth_dialog);
dialog.setContentView(diaView);
dialog.show();
// 获取dialog中的button对象,注意是在diaView中,而不是this
Button btn_oauth_begin = (Button) diaView
.findViewById(R.id.btn_auth_begin);

btn_oauth_begin.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {
// 快速授权时,请不要传入 SCOPE,否则可能会授权不成功
authInfo = new AuthInfo(AuthorizeActivity.this,
AuthConstants.APP_KEY, AuthConstants.REDIRECT_URL,
AuthConstants.SCOPE);
ssoHandler = new SsoHandler(AuthorizeActivity.this, authInfo);

// SSO 授权, 仅Web
ssoHandler.authorizeWeb(new WeiboAuthListener() {

public void onWeiboException(WeiboException arg0) {
System.out.println("--->授权异常");
}

public void onComplete(Bundle arg0) {
// 从 Bundle 中解析 Token
accessToken = Oauth2AccessToken.parseAccessToken(arg0);
if (accessToken.isSessionValid()) {
// 显示 Token
System.out.println("--->" + accessToken);

Toast.makeText(AuthorizeActivity.this,
accessToken+"", Toast.LENGTH_SHORT)
.show();

} else {
// 以下几种情况,您会收到 Code:
// 1. 当您未在平台上注册的应用程序的包名与签名时;
// 2. 当您注册的应用程序包名与签名不正确时;
// 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
String code = arg0.getString("code");
String message = getStrin
4000
g(R.string.auth_failed);
if (!TextUtils.isEmpty(code)) {
message = message + "\nObtained the code: "
+ code;
}
Toast.makeText(AuthorizeActivity.this, message,
Toast.LENGTH_LONG).show();
}
}

public void onCancel() {
Toast.makeText(AuthorizeActivity.this,
R.string.auth_canceled, Toast.LENGTH_SHORT)
.show();
}
});

}
});
}
}


测试结果:



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android oauth 授权