Android 第三方登入之新浪微博授權登入
Android第三方登入的優點有很多,這裡先簡單略過,後續再補充。先寫微博,其他的慢慢補充
新浪微博授權登入
主要流程如下:
這裡只是寫了一下程式的邏輯,前期的註冊申請工作可以參考官網,或者直接點這裡:新手指南
/** * 微博賬號登入授權流程 * 1. 整合SDK,修改主目錄和主模組下面的build.gradle檔案,新增微博sdk的依賴 * 2. 建立Constants介面,定義新浪微博授權時所需要的引數(APP_KEY,REDIRECT_URL,SCOPE許可權) * 3. 建立微博API介面類物件 初始化WbSdk物件(在應用的Application或者呼叫SDK功能程式碼前) * 4. 實現WbAuthListener介面 * 5. 呼叫方法,認證授權 * 6. 新增SSOhandler的回撥,需要在 {@link #onActivityResult} 中呼叫 {@link SsoHandler#authorizeCallBack} */
下面上程式碼,先是介面
/**
* 該介面定義了新浪微博授權時所需要的引數
*/
public interface Constants {
/**當前該 APP 使用的 APP_KEY ,其他應用使用需要替換*/
public static final String APP_KEY = "396518504";
/**
* 當前應用的回撥頁
*
* <p>
* 注:關於授權回撥頁對移動客戶端應用來說對使用者是不可見的,所以定義為何種形式都將不影響,
* 但是沒有定義將無法使用 SDK 認證登入。
* 建議使用預設回撥頁:https://api.weibo.com/oauth2/default.html
* </p>
*/
public static final String REDIRECT_URL = "https://api.weibo.com/oauth2/default.html";
/**
* Scope 是 OAuth2.0 授權機制中 authorize 介面的一個引數。通過 Scope,平臺將開放更多的微博
* 核心功能給開發者,同時也加強使用者隱私保護,提升了使用者體驗,使用者在新 OAuth2.0 授權頁中有權利
* 選擇賦予應用的功能。
*
* 我們通過新浪微博開放平臺-->管理中心-->我的應用-->介面管理處,能看到我們目前已有哪些介面的
* 使用許可權,高階許可權需要進行申請。
*
* 目前 Scope 支援傳入多個 Scope 許可權,用逗號分隔。
*
* 有關哪些 OpenAPI 需要許可權申請,請檢視:http://open.weibo.com/wiki/%E5%BE%AE%E5%8D%9AAPI
* 關於 Scope 概念及注意事項,請檢視:http://open.weibo.com/wiki/Scope
*/
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 static final String SCOPE = null; //為null時會出現沒有點選確定就自動授權成功的情況
}
然後是Activity
public class WBAuthActivity extends Activity {
private SsoHandler ssoHandler;
private Oauth2AccessToken mAccessToken; // 封裝了 "uid", "access_token","expires_in","refresh_token",並提供了他們的管理功能
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
AuthInfo authInfo = new AuthInfo(this, Constants.APP_KEY, Constants.REDIRECT_URL, Constants.SCOPE);
WbSdk.install(this, authInfo);
ssoHandler = new SsoHandler(WBAuthActivity.this); //建立微博例項,認證授權
// SSO認證授權 僅客戶端
// ssoHandler.authorizeClientSso(new SelfWbAuthListener());
// Web授權 沒有客戶端,網頁授權
// ssoHandler.authorizeWeb(new SelfWbAuthListener());
// SSO 授權+Web 授權 混合授權
ssoHandler.authorize(new SelfWbAuthListener());
// 從 SharedPreferences 中讀取上次已儲存好 AccessToken 等資訊,第一次啟動本,AccessToken 不可用
mAccessToken = AccessTokenKeeper.readAccessToken(WBAuthActivity.this);
if (mAccessToken.isSessionValid()){
updateTokenView(true);
}
}
/** 微博認證授權回撥類 */
public class SelfWbAuthListener implements WbAuthListener{
@Override
public void onSuccess(final Oauth2AccessToken oauth2AccessToken) {
WBAuthActivity.this.runOnUiThread(new Runnable() {
@Override
public void run() {
mAccessToken = oauth2AccessToken;
if (mAccessToken.isSessionValid()){
//顯示 mAccessToken
updateTokenView(false);
//儲存 mAccessToken 到 SharedPreferences
AccessTokenKeeper.writeAccessToken(WBAuthActivity.this, mAccessToken);
Toast.makeText(WBAuthActivity.this, "授權成功", Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
public void cancel() {
Toast.makeText(WBAuthActivity.this, "取消授權", Toast.LENGTH_SHORT).show();
}
@Override
public void onFailure(WbConnectErrorMessage wbConnectErrorMessage) {
Toast.makeText(WBAuthActivity.this, "授權失敗:" + wbConnectErrorMessage.getErrorMessage(), Toast.LENGTH_SHORT).show();
}
}
/**
* 顯示當前 Token 資訊
* @param hasExisted 配置檔案中是否存在 Token 資訊並且合法
*/
public void updateTokenView(boolean hasExisted){
String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(new Date(mAccessToken.getExpiresTime()));
String format = "Token:%1$s \n有效期:%2$s \nUid:%3$s";
String message = String.format(format, mAccessToken.getToken(), date, mAccessToken.getUid());
if (hasExisted){
message = "Token 仍在有效期內,無需再次登入。" + "\n" + message;
}
Log.e("WBAuthActivity", message);
}
//使用者登出
public void loginOut(){
AccessTokenKeeper.clear(getApplicationContext());
mAccessToken = new Oauth2AccessToken();
updateTokenView(false);
}
//更新Token
public void refreshToken(){
if (!TextUtils.isEmpty(mAccessToken.getRefreshToken())){
AccessTokenKeeper.refreshToken(Constants.APP_KEY, WBAuthActivity.this, new RequestListener() {
@Override
public void onComplete(String s) {
}
@Override
public void onWeiboException(WeiboException e) {
}
});
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (ssoHandler != null){
ssoHandler.authorizeCallBack(requestCode, resultCode, data);
}
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e("WBAuthActivity", "======WBAuthActivity onDestroy=====");
}
}
最後,貼上第三方登入之支付寶登入,需要的朋友可以參考
相關文章
- 「新手上路」Go 微博授權登入Go
- 微信授權登入
- Laravel 第三方登入之微博Laravel
- 【網頁登入】QQ 登入、微信登入、微博登入、GitHub 登入網頁Github
- java 微信授權登入配置Java
- 新浪微博動態 RSA 分析圖文+登入
- 微信小程式的授權登入微信小程式
- Java微信授權登入小程式介面Java
- 第三方微信登入 | 靜默授權與網頁授權的實現網頁
- JAVA接入支付寶授權第三方登入Java
- ajax 實現微信網頁授權登入網頁
- 微信小程式授權登入最佳實踐微信小程式
- 微信網頁授權登入(c# Webform)網頁C#WebORM
- uni-app 微信小程式授權登入APP微信小程式
- 關於QQ授權登入
- laravel使用EasyWeChat 授權登入Laravel
- 小程式登入、微信網頁授權(Java版)網頁Java
- C#微信網頁授權登入(NET MVC)C#網頁MVC
- .NET Core企業微信網頁授權登入網頁
- PHP基於laravel框架獲取微博資料之一 模擬新浪微博登入PHPLaravel框架
- 微信開發之小程式獲取手機號授權登入
- .netcore第三方登入授權:10分鐘急速接入NetCore
- Vue微信專案按需授權登入策略實踐Vue
- 封裝QQ、微信、微博的第三方登入和分享封裝
- Laravel5.6 實現第三方登入 微信登入Laravel
- 原生微信網頁授權登入(藉助natapp穿牆)網頁APP
- 第三方登陸:微信掃碼登入
- <span>小程式授權登入彈框</span>
- 基於Taro框架的微信小程式JWT授權登入方案框架微信小程式JWT
- 微信小程式授權登入獲取使用者資訊微信小程式
- 認證授權:IdentityServer4 - 單點登入IDEServer
- golang 基於 jwt 實現的登入授權GolangJWT
- 為爬蟲獲取登入cookies: 使用Charles和requests模擬微博登入爬蟲Cookie
- 微信小程式版部落格——授權登入的修改(wx.getUserInfo)微信小程式
- Java QQ授權第三方登陸Java
- Laravel Passport 之api登入鑑權LaravelPassportAPI
- 微信授權註冊或微信登陸 微信授權登陸 基於若依vue 實現Vue
- Blazor OIDC 單點登入授權例項7 - Blazor hybird app 端授權BlazorAPP