Android第三方授权(新浪微博篇)

时间:2023-03-08 22:08:38
Android第三方授权(新浪微博篇)

Android第三方认证新浪微博,相对微信,也比较简单,并且sina给了一个sdk和sdkdemo,这个demo封装了许多,但是自己不准备记录这个demo,而是直接使用sdk

同样去sina官方下载sdk,自己去搜吧,地址不给了

1.初始化SsoHandler

 AuthInfo mWeiboAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
SsoHandler mSsoHandler = new SsoHandler(this, mWeiboAuthInfo);

其中几个常量的解释可以到官网查看

2.开始授权

 mSsoHandler.authorize(new MyWeiboAuthListener(new LoginWeiboGetUserInfoListener()));
private static class MyWeiboAuthListener implements WeiboAuthListener { private RequestListener mRequestUserInfoListener = null; public MyWeiboAuthListener(RequestListener requestUserInfoListener){
this.mRequestUserInfoListener = requestUserInfoListener;
} @Override
public void onCancel() {
// TODO Auto-generated method stub
Toast.makeText(mContext, "已取消微博登录", Toast.LENGTH_SHORT).show();
} @Override
public void onComplete(Bundle values) {
// TODO Auto-generated method stub
mAccessToken = Oauth2AccessToken.parseAccessToken(values);
if (mAccessToken.isSessionValid()) {
// 保存 Token 到 SharedPreferences
WeiboParameters weiboParameters = new WeiboParameters(
Constants.APP_KEY);
weiboParameters.put("access_token", mAccessToken.getToken()); if( mWeiboRunner == null ){
mWeiboRunner = new AsyncWeiboRunner(
mContext);
} if( mRequestUserInfoListener == null ){
return;
}
mWeiboRunner.requestAsync(WEIBO_USERID_URL,
weiboParameters, "POST",
mRequestUserInfoListener); } else {
// 当您注册的应用程序签名不正确时,就会收到 Code,请确保签名正确
String code = values.getString("code", "");
Log.i(TAG, "应用签名不正确 code = " + code);
Toast.makeText(mContext, "微博认证失败", Toast.LENGTH_SHORT).show(); }
} @Override
public void onWeiboException(WeiboException arg0) {
// TODO Auto-generated method stub } } /**
* 获取用户信息
* @author ReCwert
*
*/
private static class LoginWeiboGetUserInfoListener implements RequestListener { @Override
public void onComplete(String result) {
// TODO Auto-generated method stub
JSONObject userObject = JSON.parseObject(result);
String weiboUid = userObject.getString("uid");
if( TextUtils.isEmpty(weiboUid)){
Log.e(TAG, "weibo uid = null ");
return;
} Log.i(TAG, "weibo uid = " + weiboUid );
uid = weiboUid;
WeiboParameters weiboParameters = new WeiboParameters(Constants.APP_KEY);
weiboParameters.put("uid", weiboUid);
weiboParameters.put("access_token", mAccessToken.getToken());
if( mWeiboRunner == null ){
mWeiboRunner = new AsyncWeiboRunner(
mContext);
} mWeiboRunner.requestAsync(WEIBO_USERINFO_URL, weiboParameters, "GET", new MyWeiboHandleUserInfoListener());
} @Override
public void onWeiboException(WeiboException exception) {
// TODO Auto-generated method stub
exception.printStackTrace(); } }
 /**
* 处理获取的用户信息
* @author ReCwert
*
*/
private static class MyWeiboHandleUserInfoListener implements RequestListener{ @Override
public void onComplete(String result) {
// TODO Auto-generated method stub
JSONObject userData = JSON.parseObject(result);
nickName = userData.getString("name");
headUrl = userData.getString("profile_image_url");
sex = userData.getString("gender");
Log.i(TAG, "uid = " + uid );
Log.i(TAG, "nickName = " + nickName);
Log.i(TAG, "headUrl = " + headUrl );
Log.i(TAG, "sex = " + sex);
} @Override
public void onWeiboException(WeiboException exception) {
// TODO Auto-generated method stub
exception.printStackTrace();
} }

可以看到,我们在第一个回调中只是获得了access_token,我们需要根据这个access_token去获取跟多的信息,比如去请求userid 和userinfo

 private static final String WEIBO_USERID_URL = "https://api.weibo.com/oauth2/get_token_info";
private static final String WEIBO_USERINFO_URL = "https://api.weibo.com/2/users/show.json";

当然,更多的信息获取的url在sina官方能够查看到
http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI#OAuth2