Android三方登入之新浪微博登入
阿新 • • 發佈:2019-02-20
移動端需要儘可能的去減少使用者的操作,拿登入來說,使用第三方登入一鍵登入自然在一定程度上優於傳統的簡訊驗證碼。
那麼整合新浪微博的一鍵登入需要哪些步驟呢?
1.在新浪後臺註冊應用,拿到關鍵ID。
2.整合程式碼
這裡引用的官方demo,講的很詳細,不要忘記在清單檔案裡的配置及jniLibs的新增。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); } }
3.可能遇到的問題
在整合過程中,可能遇到一個問題便是沒有返回,點選只閃一下的情況,這個情況是簽名校驗的問題,需要在官方下載一個MD5簽名生成器,然後把簽過名的app裝載之後,開啟簽名生成器,獲取到的值填到新浪後臺,就可以解決這個問題了,在這裡注意debug和release簽名不同的情況,怕麻煩可以讓debug和release使用同樣的簽名。