日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

[Android/安卓]Google登录接口之Api接入

發(fā)布時間:2023/12/20 Android 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [Android/安卓]Google登录接口之Api接入 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

?

1.基礎(chǔ)配置

2.GoogleLogInImpl(登錄接口實現(xiàn)類)

3.GoogleLogIn(實現(xiàn)類接口)

4.GoogleCallback(登錄授權(quán)回調(diào)接口)

5.GoogleBuild(構(gòu)建請求)

6.例示調(diào)用(這里繼承了AppCompatButton作為例示)

7.Google登錄接口之控制臺配置


1.基礎(chǔ)配置

//Google登錄引用包 api 'com.google.android.gms:play-services-auth:19.0.0'//Client ID(values/strings.xml) <string name="server_client_id">客戶端ID</string>

2.GoogleLogInImpl(登錄接口實現(xiàn)類)

import android.app.Activity; import android.content.Context; import android.content.Intent; import android.util.Log; import android.view.View;import androidx.annotation.NonNull; import androidx.annotation.Nullable;import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInClient; import com.google.android.gms.common.api.ApiException; import com.google.android.gms.common.api.Scope; import com.google.android.gms.tasks.Task;import java.lang.ref.WeakReference;public class GoogleLogInImpl implements GoogleLogIn {private static final String TAG = "GoogleLogIn";private static final int RC_SIGN_IN = 800;private WeakReference<Activity> mWRActivity;private final GoogleBuild mBuild;private GoogleSignInClient mClient = null;private GoogleCallback mCallback;GoogleLogInImpl(Context context) { mBuild = GoogleBuild.create( context ); }@Overridepublic void registerCallback(@NonNull Activity activity, GoogleCallback call) {mWRActivity = new WeakReference<>( activity );mCallback = call;}@Overridepublic GoogleBuild requestIdToken() { return mBuild.requestIdToken(); }@Overridepublic GoogleBuild requestEmail() { return mBuild.requestEmail(); }@Overridepublic GoogleBuild requestGender() { return mBuild.requestGender(); }@Overridepublic GoogleBuild requestId() { return mBuild.requestId(); }@Overridepublic GoogleBuild requestProfile() { return mBuild.requestProfile(); }@Overridepublic GoogleBuild requestScopes(Scope scope, Scope... scopes) {return mBuild.requestScopes( scope, scopes );}@Overridepublic GoogleBuild requestServerAuthCode(String s) { return mBuild.requestServerAuthCode( s ); }@Overridepublic GoogleBuild requestServerAuthCode(String s, boolean b) {return mBuild.requestServerAuthCode( s, b );}@Overridepublic void onClick(View v) {if( mClient == null ) mClient = mBuild.getClient();if( mWRActivity != null ) {Activity activity = mWRActivity.get();if( activity == null ) {Log.e(TAG, "Activity is null!");return;}activity.startActivityForResult( mClient.getSignInIntent(), RC_SIGN_IN );}else {Log.e(TAG, "You need call registerCallback()");}}@Overridepublic void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {if( requestCode != RC_SIGN_IN || mCallback == null ) return;GoogleSignInAccount gsiAccount = null;Task<GoogleSignInAccount> task = null;try {//是否已經(jīng)授權(quán)過gsiAccount = GoogleSignIn.getLastSignedInAccount( mWRActivity.get() );if( gsiAccount != null ) {mCallback.onSuccess( gsiAccount, true );return;}task = GoogleSignIn.getSignedInAccountFromIntent( data );//獲取授權(quán)gsiAccount = task.getResult( ApiException.class );} catch (ApiException e) {e.printStackTrace();}if( task.isCanceled() ) {//取消授權(quán)mCallback.onCancel();return;}else if( gsiAccount == null ) {//授權(quán)出錯mCallback.onFailure();return;}//授權(quán)成功mCallback.onSuccess( gsiAccount, false );} }

3.GoogleLogIn(實現(xiàn)類接口)

import android.app.Activity; import android.content.Context; import android.content.Intent; import android.view.View;import androidx.annotation.NonNull; import androidx.annotation.Nullable;import com.google.android.gms.common.api.Scope;public interface GoogleLogIn {static GoogleLogIn create(Context context) { return new GoogleLogInImpl( context ); }void registerCallback(@NonNull Activity activity, GoogleCallback call);GoogleBuild requestIdToken();GoogleBuild requestEmail();GoogleBuild requestGender();GoogleBuild requestId();GoogleBuild requestProfile();GoogleBuild requestScopes(Scope scope, Scope... scopes);GoogleBuild requestServerAuthCode(String s);GoogleBuild requestServerAuthCode(String s, boolean b);void onClick(View v);void onActivityResult(int requestCode, int resultCode, @Nullable Intent data); }

4.GoogleCallback(登錄授權(quán)回調(diào)接口)

import com.google.android.gms.auth.api.signin.GoogleSignInAccount;/*** 登錄授權(quán)回調(diào)*/ public interface GoogleCallback {/*** 授權(quán)成功* @param account 授權(quán)信息* @param isFirst 之前是否授權(quán)過*/void onSuccess(GoogleSignInAccount account, boolean isFirst);/*** 取消授權(quán)*/void onCancel();/*** 授權(quán)失敗*/void onFailure(); }

5.GoogleBuild(構(gòu)建請求)

import android.content.Context;import com.google.android.gms.auth.api.signin.GoogleSignIn; import com.google.android.gms.auth.api.signin.GoogleSignInClient; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.common.api.Scope; import com.og.login.R;import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference;public class GoogleBuild {@Retention(RetentionPolicy.SOURCE)public @interface SignIn {GoogleSignInOptions DEFAULT_SIGN_IN = GoogleSignInOptions.DEFAULT_SIGN_IN;GoogleSignInOptions DEFAULT_GAMES_SIGN_IN = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;}private final GoogleSignInOptions.Builder mBuild;private final WeakReference<Context> mWRContext;private GoogleBuild(Context context, @SignIn GoogleSignInOptions signIn) {mWRContext = new WeakReference<>( context );mBuild = new GoogleSignInOptions.Builder( signIn );}/*** 以默認的方式登錄* @return Build*/public static GoogleBuild create(Context context) {return new GoogleBuild( context, SignIn.DEFAULT_SIGN_IN );}/*** 以游戲的方式登錄* @return Build*/public static GoogleBuild createGame(Context context) {return new GoogleBuild( context, SignIn.DEFAULT_GAMES_SIGN_IN );}public GoogleBuild requestIdToken() {mBuild.requestIdToken( mWRContext.get().getResources().getString( R.string.server_client_id ));return this;}public GoogleBuild requestEmail() {mBuild.requestEmail();return this;}public GoogleBuild requestGender() {mBuild.requestScopes( new Scope( "https://www.googleapis.com/auth/user.gender.read" ) );return this;}public GoogleBuild requestId() {mBuild.requestId();return this;}public GoogleBuild requestProfile() {mBuild.requestProfile();return this;}public GoogleBuild requestScopes(Scope scope, Scope... scopes) {mBuild.requestScopes( scope, scopes );return this;}public GoogleBuild requestServerAuthCode(String s) {mBuild.requestServerAuthCode( s );return this;}public GoogleBuild requestServerAuthCode(String s, boolean b) {mBuild.requestServerAuthCode( s, b );return this;}GoogleSignInClient getClient() {return GoogleSignIn.getClient( mWRContext.get(), mBuild.build() );} }

6.例示調(diào)用(這里繼承了AppCompatButton作為例示)

import android.app.Activity; import android.content.Context; import android.content.Intent; import android.util.AttributeSet; import android.view.View;import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.AppCompatButton;import com.google.android.gms.common.api.Scope; import com.og.login.google.GoogleBuild; import com.og.login.google.GoogleCallback; import com.og.login.google.GoogleLogIn;public class GoogleLoginButton extends AppCompatButton implements GoogleLogIn {private final GoogleLogIn mLogin;public GoogleLoginButton(Context context) {this(context, null);}public GoogleLoginButton(Context context, AttributeSet attrs) {this(context, attrs, 0);}public GoogleLoginButton(Context context, AttributeSet attrs, int defStyleAttr) {super(context, attrs, defStyleAttr);mLogin = GoogleLogIn.create( context );mLogin.requestEmail(); // mLogin.requestGender();}@Overridepublic void registerCallback(@NonNull Activity activity, GoogleCallback call) {mLogin.registerCallback( activity, call );}@Overridepublic GoogleBuild requestIdToken() { return mLogin.requestIdToken(); }@Overridepublic GoogleBuild requestEmail() { return mLogin.requestEmail(); }@Overridepublic GoogleBuild requestGender() { return mLogin.requestGender(); }@Overridepublic GoogleBuild requestId() { return mLogin.requestId(); }@Overridepublic GoogleBuild requestProfile() { return mLogin.requestProfile(); }@Overridepublic GoogleBuild requestServerAuthCode(String s) { return mLogin.requestServerAuthCode( s ); }@Overridepublic GoogleBuild requestServerAuthCode(String s, boolean b) {return mLogin.requestServerAuthCode( s, b );}@Overridepublic GoogleBuild requestScopes(Scope scope, Scope... scopes) {return mLogin.requestScopes( scope, scopes );}@Overridepublic void onClick(View v) {mLogin.onClick( v );}@Overridepublic void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {mLogin.onActivityResult( requestCode, resultCode, data );} }

7.Google登錄接口之控制臺配置

控制臺配置傳送門

總結(jié)

以上是生活随笔為你收集整理的[Android/安卓]Google登录接口之Api接入的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。