[Android/安卓]Google登录接口之Api接入
生活随笔
收集整理的這篇文章主要介紹了
[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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 应用软件保护方法
- 下一篇: android sina oauth2.