Android第三方登录之微博登录

1. 去新浪微博开放平台创建应用

新浪微博开放平台地址:
http://open.weibo.com/?sudaref=www.baidu.com&retcode=6102

2. 集成微博sdk

demo地址:
https://github.com/sinaweibosdk/weibo_android_sdk

集成文档地址:
https://github.com/sinaweibosdk/weibo_android_sdk/blob/master/%E6%96%B0%E6%96%87%E6%A1%A3/%E5%BE%AE%E5%8D%9ASDK%204.0%E6%96%87%E6%A1%A3.pdf

3. 获取授权

 /**
     * 新浪微博登录
     */
    private void sinaLogin() {
//        // 从 SharedPreferences 中读取上次已保存好 AccessToken 等信息,
//        // 第一次启动本应用,AccessToken 不可用
//        mAccessToken = AccessTokenKeeper.readAccessToken(this);
//        if (mAccessToken.isSessionValid()) {
//            updateTokenView(true);
//        }
        // 快速授权时,请不要传入 SCOPE,否则可能会授权不成功
        mAuthInfo = new AuthInfo(this, ContentUtils.SINA_APP_ID, ContentUtils.REDIRECT_URL, ContentUtils.SCOPE);
        mSsoHandler = new SsoHandler(this, mAuthInfo);
        // SSO 授权, ALL IN ONE   如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权
        mSsoHandler.authorize(new AuthListener());
    }

  • 在清单文件中配置activity

 
        


4. 实现授权回调接口

 /**
     * 微博认证授权回调类。
     * 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,
     * 该回调才会被执行。
     * 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。
     * 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {

        @Override
        public void onComplete(final Bundle values) {
            // 从 Bundle 中解析 Token
            LoginActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    mAccessToken = Oauth2AccessToken.parseAccessToken(values);
                    //从这里获取用户输入的 电话号码信息
                    String phoneNum = mAccessToken.getPhoneNum();
                    if (mAccessToken.isSessionValid()) {
                        // 显示 Token
//                        updateTokenView(false);
                        getUserInfo();
                        // 保存 Token 到 SharedPreferences
//                        AccessTokenKeeper.writeAccessToken(LoginActivity.this, mAccessToken);
                    } else {
                        // 以下几种情况,您会收到 Code:
                        // 1. 当您未在平台上注册的应用程序的包名与签名时;
                        // 2. 当您注册的应用程序包名与签名不正确时;
                        // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                        String code = values.getString("code");
                        String message = "null";
                        if (!TextUtils.isEmpty(code)) {
                            message = message + "\nObtained the code: " + code;
                        }
                        Toast.makeText(LoginActivity.this, message, Toast.LENGTH_LONG).show();
                    }
                }
            });

        }

        @Override
        public void onCancel() {

        }

        @Override
        public void onWeiboException(WeiboException e) {
            KKKKK.print("Auth exception : " + e.getMessage());
        }
    }


5. 获取用户信息

 /**
     * 获取微博用户个人信息
     */
    private void getUserInfo() {
        //获取用户信息接口
        mUsersAPI = new UsersAPI(LoginActivity.this, ContentUtils.SINA_APP_ID, mAccessToken);
        //调用接口
        long uid = Long.parseLong(mAccessToken.getUid());
        mUsersAPI.show(uid, new RequestListener() {
            @Override
            public void onComplete(String s) {
                if (!TextUtils.isEmpty(s)) {
                    //调用User#parse将JSON串解析成User对象
                    User user = User.parse(s);
                    otherLogin(ContentUtils.SINA_LOGIN, user.id, user.screen_name, user.location, user.avatar_hd, user.gender == "m" ? "1" : "0");
                }
            }

            @Override
            public void onWeiboException(WeiboException e) {
            }
        });
    }

大神博客:
http://blog.csdn.net/speverriver/article/details/53707632

你可能感兴趣的:(Android第三方登录之微博登录)