Android三方登录之新浪微博登录

来源:互联网 发布:程序员多少钱一个月 编辑:程序博客网 时间:2024/06/07 03:27

移动端需要尽可能的去减少用户的操作,拿登录来说,使用第三方登录一键登录自然在一定程度上优于传统的短信验证码。

那么集成新浪微博的一键登录需要哪些步骤呢?


1.在新浪后台注册应用,拿到关键ID。


2.集成代码

public class WBAuthActivity extends Activity {    private static final String TAG = "weibosdk";    /**     * 显示认证后的信息,如 AccessToken     */    private TextView mTokenText;    /**     * 封装了 "access_token","expires_in","refresh_token",并提供了他们的管理功能     */    private Oauth2AccessToken mAccessToken;    /**     * 注意:SsoHandler 仅当 SDK 支持 SSO 时有效     */    private SsoHandler mSsoHandler;    /**     * @see {@link Activity#onCreate}     */    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_auth);        // 获取 Token View,并让提示 View 的内容可滚动(小屏幕可能显示不全)        mTokenText = (TextView) findViewById(R.id.token_text_view);        TextView hintView = (TextView) findViewById(R.id.obtain_token_hint);        hintView.setMovementMethod(new ScrollingMovementMethod());        // 创建微博实例        mSsoHandler = new SsoHandler(WBAuthActivity.this);        // SSO 授权, 仅客户端        findViewById(R.id.obtain_token_via_sso).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mSsoHandler.authorizeClientSso(new SelfWbAuthListener());            }        });        // SSO 授权, 仅Web        findViewById(R.id.obtain_token_via_web).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mSsoHandler.authorizeWeb(new SelfWbAuthListener());            }        });        // SSO 授权, ALL IN ONE   如果手机安装了微博客户端则使用客户端授权,没有则进行网页授权        findViewById(R.id.obtain_token_via_signature).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                mSsoHandler.authorize(new SelfWbAuthListener());            }        });        // 用户登出        findViewById(R.id.logout).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View v) {                AccessTokenKeeper.clear(getApplicationContext());                mAccessToken = new Oauth2AccessToken();                updateTokenView(false);            }        });        //更新token        findViewById(R.id.refresh).setOnClickListener(new OnClickListener() {            @Override            public void onClick(View view) {                if (!TextUtils.isEmpty(mAccessToken.getRefreshToken())) {                    AccessTokenKeeper.refreshToken(Constants.APP_KEY, WBAuthActivity.this, new RequestListener() {                        @Override                        public void onComplete(String response) {                        }                        @Override                        public void onWeiboException(WeiboException e) {                        }                    });                }            }        });        // 从 SharedPreferences 中读取上次已保存好 AccessToken 等信息,        // 第一次启动本应用,AccessToken 不可用        mAccessToken = AccessTokenKeeper.readAccessToken(this);        if (mAccessToken.isSessionValid()) {            updateTokenView(true);        }    }    /**     * 当 SSO 授权 Activity 退出时,该函数被调用。     *     * @see {@link Activity#onActivityResult}     */    @Override    protected void onActivityResult(int requestCode, int resultCode, Intent data) {        super.onActivityResult(requestCode, resultCode, data);        // SSO 授权回调        // 重要:发起 SSO 登陆的 Activity 必须重写 onActivityResults        if (mSsoHandler != null) {            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);        }    }    private class SelfWbAuthListener implements com.sina.weibo.sdk.auth.WbAuthListener {        @Override        public void onSuccess(final Oauth2AccessToken token) {            WBAuthActivity.this.runOnUiThread(new Runnable() {                @Override                public void run() {                    mAccessToken = token;                    if (mAccessToken.isSessionValid()) {                        // 显示 Token                        updateTokenView(false);                        // 保存 Token 到 SharedPreferences                        AccessTokenKeeper.writeAccessToken(WBAuthActivity.this, mAccessToken);                        Toast.makeText(WBAuthActivity.this,                                R.string.weibosdk_demo_toast_auth_success, Toast.LENGTH_SHORT).show();                    }                }            });        }        @Override        public void cancel() {            Toast.makeText(WBAuthActivity.this,                    R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show();        }        @Override        public void onFailure(WbConnectErrorMessage errorMessage) {            Toast.makeText(WBAuthActivity.this, errorMessage.getErrorMessage(), Toast.LENGTH_LONG).show();        }    }    /**     * 显示当前 Token 信息。     *     * @param hasExisted 配置文件中是否已存在 token 信息并且合法     */    private void updateTokenView(boolean hasExisted) {        String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(                new java.util.Date(mAccessToken.getExpiresTime()));        String format = getString(R.string.weibosdk_demo_token_to_string_format_1);        mTokenText.setText(String.format(format, mAccessToken.getToken(), date));        String message = String.format(format, mAccessToken.getToken(), date);        if (hasExisted) {            message = getString(R.string.weibosdk_demo_token_has_existed) + "\n" + message;        }        mTokenText.setText(message);    }}
这里引用的官方demo,讲的很详细,不要忘记在清单文件里的配置及jniLibs的添加。


3.可能遇到的问题

在集成过程中,可能遇到一个问题便是没有返回,点击只闪一下的情况,这个情况是签名校验的问题,需要在官方下载一个MD5签名生成器,然后把签过名的app装载之后,打开签名生成器,获取到的值填到新浪后台,就可以解决这个问题了,在这里注意debug和release签名不同的情况,怕麻烦可以让debug和release使用同样的签名。

原创粉丝点击