標籤:
Android第三方認證新浪微博,相對,也比較簡單,並且sina給了一個sdk和sdkdemo,這個demo封裝了許多,但是自己不準備記錄這個demo,而是直接使用sdk
同樣去sina官方下載sdk,自己去搜吧,地址不給了
1.初始化SsoHandler
1 AuthInfo mWeiboAuthInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);2 SsoHandler mSsoHandler = new SsoHandler(this, mWeiboAuthInfo);
其中幾個常量的解釋可以到官網查看
2.開始授權
1 mSsoHandler.authorize(new MyWeiboAuthListener(new LoginWeiboGetUserInfoListener())); 2 private static class MyWeiboAuthListener implements WeiboAuthListener { 3 4 private RequestListener mRequestUserInfoListener = null; 5 6 public MyWeiboAuthListener(RequestListener requestUserInfoListener){ 7 this.mRequestUserInfoListener = requestUserInfoListener; 8 } 9 10 @Override11 public void onCancel() {12 // TODO Auto-generated method stub13 Toast.makeText(mContext, "已取消微博登入", Toast.LENGTH_SHORT).show();14 }15 16 @Override17 public void onComplete(Bundle values) {18 // TODO Auto-generated method stub19 mAccessToken = Oauth2AccessToken.parseAccessToken(values);20 if (mAccessToken.isSessionValid()) {21 // 儲存 Token 到 SharedPreferences22 WeiboParameters weiboParameters = new WeiboParameters(23 Constants.APP_KEY);24 weiboParameters.put("access_token", mAccessToken.getToken());25 26 if( mWeiboRunner == null ){27 mWeiboRunner = new AsyncWeiboRunner(28 mContext);29 }30 31 if( mRequestUserInfoListener == null ){32 return;33 }34 mWeiboRunner.requestAsync(WEIBO_USERID_URL,35 weiboParameters, "POST",36 mRequestUserInfoListener);37 38 } else {39 // 當您註冊的應用程式簽名不正確時,就會收到 Code,請確保簽名正確40 String code = values.getString("code", "");41 Log.i(TAG, "應用簽名不正確 code = " + code);42 Toast.makeText(mContext, "微博認證失敗", Toast.LENGTH_SHORT).show();43 44 }45 }46 47 @Override48 public void onWeiboException(WeiboException arg0) {49 // TODO Auto-generated method stub50 51 }52 53 }54 55 56 /**57 * 擷取使用者資訊58 * @author ReCwert59 *60 */61 private static class LoginWeiboGetUserInfoListener implements RequestListener {62 63 @Override64 public void onComplete(String result) {65 // TODO Auto-generated method stub66 JSONObject userObject = JSON.parseObject(result);67 String weiboUid = userObject.getString("uid");68 if( TextUtils.isEmpty(weiboUid)){69 Log.e(TAG, "weibo uid = null ");70 return;71 }72 73 Log.i(TAG, "weibo uid = " + weiboUid );74 uid = weiboUid;75 WeiboParameters weiboParameters = new WeiboParameters(Constants.APP_KEY);76 weiboParameters.put("uid", weiboUid);77 weiboParameters.put("access_token", mAccessToken.getToken());78 if( mWeiboRunner == null ){79 mWeiboRunner = new AsyncWeiboRunner(80 mContext);81 }82 83 mWeiboRunner.requestAsync(WEIBO_USERINFO_URL, weiboParameters, "GET", new MyWeiboHandleUserInfoListener());84 }85 86 @Override87 public void onWeiboException(WeiboException exception) {88 // TODO Auto-generated method stub89 exception.printStackTrace();90 91 }92 93 }
1 /** 2 * 處理擷取的使用者資訊 3 * @author ReCwert 4 * 5 */ 6 private static class MyWeiboHandleUserInfoListener implements RequestListener{ 7 8 @Override 9 public void onComplete(String result) {10 // TODO Auto-generated method stub11 JSONObject userData = JSON.parseObject(result);12 nickName = userData.getString("name");13 headUrl = userData.getString("profile_image_url");14 sex = userData.getString("gender");15 Log.i(TAG, "uid = " + uid );16 Log.i(TAG, "nickName = " + nickName);17 Log.i(TAG, "headUrl = " + headUrl );18 Log.i(TAG, "sex = " + sex);19 }20 21 @Override22 public void onWeiboException(WeiboException exception) {23 // TODO Auto-generated method stub24 exception.printStackTrace();25 }26 27 }
可以看到,我們在第一個回調中只是獲得了access_token,我們需要根據這個access_token去擷取跟多的資訊,比如去請求userid 和userinfo
1 private static final String WEIBO_USERID_URL = "https://api.weibo.com/oauth2/get_token_info";2 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
Android第三方授權(新浪微博篇)