android 第三方登錄---新浪微博

jopen 8年前發布 | 50K 次閱讀 Android開發 移動開發

官方demo是依賴的方式

我是把包都弄到自己項目里了,這里不多說了

當然別忘了設置你的應用,不設置的話后邊會出問題

1,AndroidManiFest.xml設置,這里我只是簡單的用授權,獲取基本信息,所以只用了這一個

<!--微博-->
<!-- 必須注冊在微博授權,分享微博時候用到 -->
<activity
    android:name= "com.sina.weibo.sdk.component.WeiboSdkBrowser"
    android:configChanges= "keyboardHidden|orientation"
    android:exported= "false"
    android:windowSoftInputMode="adjustResize" >
</activity >

2,java調用

public static final String SCOPE = "email,direct_messages_read,direct_messages_write,"
        + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
        + "follow_app_official_microblog," + "invitation_write";
        public void weibo(){
            // 獲取當前已保存過的 Token
             Oauth2AccessToken mAccessToken = AccessTokenKeeper.readAccessToken(this);
            // 快速授權時,請不要傳入 SCOPE,否則可能會授權不成功
            //11111111換成你自己的app key,第二個就是之前設置那個回調頁
            AuthInfo mAuthInfo = new AuthInfo(this,"11111111","https://api.weibo.com/oauth2/default.html", SCOPE);
            mSsoHandler = new SsoHandler(LoginActivity.this, mAuthInfo);
            //Web---網頁輸入賬號密碼
            //mSsoHandler.authorizeWeb(new AuthListener());
            //sso---客戶端
            mSsoHandler. authorizeClientSso(new AuthListener());
            //all In one先調用客戶端,如果沒有客戶端就調用web
            mSsoHandler. authorize(new AuthListener());
         }

監聽--從demo里摳出來的

/**
     * 微博認證授權回調類。
     * 1. SSO 授權時,需要在 {@link #onActivityResult} 中調用 {@link SsoHandler#authorizeCallBack} 后
     *    該回調才會被執行。
     * 2. 非 SSO 授權時,當授權結束后,該回調就會被執行。
     * 當授權成功后,請保存該 access_token、expires_in、uid 等信息到 SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {
        @Override
        public void onComplete(Bundle values) {
            // 從 Bundle 中解析 Token
            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
            //從這里獲取用戶輸入的 電話號碼信息
            String  phoneNum =  mAccessToken.getPhoneNum();
            if (mAccessToken.isSessionValid()) {
                // 顯示 Token
                // updateTokenView(false);
                // 保存 Token 到 SharedPreferences
                AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);
                Toast.makeText(LoginActivity.this,"授權成功", Toast.LENGTH_SHORT).show();
                //打印信息
                String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(
                        new java.util.Date(mAccessToken.getExpiresTime()));
                String format = "Token:%1$s \\n有效期:%2$s";
                Log.i("授權成功","信息111:"+String.format(format, mAccessToken.getToken(), date));
                String message = String.format(format, mAccessToken.getToken(), date);
                Log.i("授權成功","信息222:"+message);
                if (true) {
                    message = "Token 仍在有效期內,無需再次登錄。"+ "\n" + message;
                }
                Log.i("授權成功","信息333:"+message);
            } else {
                // 以下幾種情況,您會收到 Code:
                // 1. 當您未在平臺上注冊的應用程序的包名與簽名時;
                // 2. 當您注冊的應用程序包名與簽名不正確時;
                // 3. 當您在平臺上注冊的包名和簽名與您當前測試的應用的包名和簽名不匹配時。
                String code = values.getString("code");
                String message = "授權失敗";
                if (!TextUtils.isEmpty(code)) {
                    message = message + "\nObtained the code: " + code;
                }
                Toast.makeText(LoginActivity.this, message, Toast.LENGTH_LONG).show();
            }
        }
        @Override
        public void onCancel() {
            Toast.makeText(LoginActivity.this,"取消", Toast.LENGTH_LONG).show();
        }
        public void onWeiboException(WeiboException e) {
            Toast.makeText(LoginActivity.this,
                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
}

回調---和之前QQ的一樣,不能少的

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == Constants.ACTIVITY_OK){
        // SSO 授權回調
        // 重要:發起 SSO 登陸的 Activity 必須重寫 onActivityResults
        if (mSsoHandler != null) {
            Log.i("新浪微博登陸返回","返回");
            //不能少
            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
        }
    }
    super.onActivityResult(requestCode, resultCode, data);
}

這樣授權就有了,下邊就是獲取授權用戶的信息了

3,利用Oauth2AccessToken獲取信息

// 獲取用戶信息接口
      //mAccessToken可以是你之前授權獲取的那個,也可以
      // 獲取當前已保存過的 Token
      //Oauth2AccessToken mAccessToken = AccessTokenKeeper.readAccessToken(this);
      UsersAPI mUsersAPI = new UsersAPI(LoginActivity.this, "你的APP_KEY", mAccessToken);
      long uid = Long.parseLong(mAccessToken.getUid());
      mUsersAPI.show(uid, mListener);

監聽

/**
     * 微博 OpenAPI 回調接口。
     */
    private RequestListener mListener = new RequestListener() {
        @Override
        public void onComplete(String response) {
            if (!TextUtils.isEmpty(response)) {
                //LogUtil.i(TAG, response);
                // 調用 User#parse 將JSON串解析成User對象
                User user = User.parse(response);
                if (user != null) {
                    Toast.makeText(LoginActivity.this,
                            "獲取User信息成功,用戶昵稱:" + user.screen_name,
                            Toast.LENGTH_LONG).show();
                } else {
                    Toast.makeText(LoginActivity.this, response, Toast.LENGTH_LONG).show();
                }
            }
        }

        @Override
        public void onWeiboException(WeiboException e) {
            //LogUtil.e(TAG, e.getMessage());
            ErrorInfo info = ErrorInfo.parse(e.getMessage());
            Toast.makeText(LoginActivity.this, info.toString(), Toast.LENGTH_LONG).show();
        }
    };

好了,這樣就有了。基本上都是從demo里直接拿出來的

微博官方的demo地址:https://github.com/sinaweibosdk/weibo_android_sdk

這些是從demo直接拿出來的

WeiboSDK

WeiboSDKDemo


來自: http://my.oschina.net/Jieth/blog/595275

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!