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

您所在的位置:网站首页 谷歌登录接入不了网络 [Android/安卓]Google登录接口之Api接入

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

2023-10-16 20:51| 来源: 网络整理| 查看: 265

目录

 

1.基础配置

2.GoogleLogInImpl(登录接口实现类)

3.GoogleLogIn(实现类接口)

4.GoogleCallback(登录授权回调接口)

5.GoogleBuild(构建请求)

6.例示调用(这里继承了AppCompatButton作为例示)

7.Google登录接口之控制台配置

1.基础配置 //Google登录引用包 api 'com.google.android.gms:play-services-auth:19.0.0' //Client ID(values/strings.xml) 客户端ID 2.GoogleLogInImpl(登录接口实现类) 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 mWRActivity; private final GoogleBuild mBuild; private GoogleSignInClient mClient = null; private GoogleCallback mCallback; GoogleLogInImpl(Context context) { mBuild = GoogleBuild.create( context ); } @Override public void registerCallback(@NonNull Activity activity, GoogleCallback call) { mWRActivity = new WeakReference( activity ); mCallback = call; } @Override public GoogleBuild requestIdToken() { return mBuild.requestIdToken(); } @Override public GoogleBuild requestEmail() { return mBuild.requestEmail(); } @Override public GoogleBuild requestGender() { return mBuild.requestGender(); } @Override public GoogleBuild requestId() { return mBuild.requestId(); } @Override public GoogleBuild requestProfile() { return mBuild.requestProfile(); } @Override public GoogleBuild requestScopes(Scope scope, Scope... scopes) { return mBuild.requestScopes( scope, scopes ); } @Override public GoogleBuild requestServerAuthCode(String s) { return mBuild.requestServerAuthCode( s ); } @Override public GoogleBuild requestServerAuthCode(String s, boolean b) { return mBuild.requestServerAuthCode( s, b ); } @Override public 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()"); } } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { if( requestCode != RC_SIGN_IN || mCallback == null ) return; GoogleSignInAccount gsiAccount = null; Task task = null; try { //是否已经授权过 gsiAccount = GoogleSignIn.getLastSignedInAccount( mWRActivity.get() ); if( gsiAccount != null ) { mCallback.onSuccess( gsiAccount, true ); return; } task = GoogleSignIn.getSignedInAccountFromIntent( data ); //获取授权 gsiAccount = task.getResult( ApiException.class ); } catch (ApiException e) { e.printStackTrace(); } if( task.isCanceled() ) { //取消授权 mCallback.onCancel(); return; }else if( gsiAccount == null ) { //授权出错 mCallback.onFailure(); return; } //授权成功 mCallback.onSuccess( gsiAccount, false ); } } 3.GoogleLogIn(实现类接口) 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(登录授权回调接口) import com.google.android.gms.auth.api.signin.GoogleSignInAccount; /** * 登录授权回调 */ public interface GoogleCallback { /** * 授权成功 * @param account 授权信息 * @param isFirst 之前是否授权过 */ void onSuccess(GoogleSignInAccount account, boolean isFirst); /** * 取消授权 */ void onCancel(); /** * 授权失败 */ void onFailure(); } 5.GoogleBuild(构建请求) 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 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.例示调用(这里继承了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(); } @Override public void registerCallback(@NonNull Activity activity, GoogleCallback call) { mLogin.registerCallback( activity, call ); } @Override public GoogleBuild requestIdToken() { return mLogin.requestIdToken(); } @Override public GoogleBuild requestEmail() { return mLogin.requestEmail(); } @Override public GoogleBuild requestGender() { return mLogin.requestGender(); } @Override public GoogleBuild requestId() { return mLogin.requestId(); } @Override public GoogleBuild requestProfile() { return mLogin.requestProfile(); } @Override public GoogleBuild requestServerAuthCode(String s) { return mLogin.requestServerAuthCode( s ); } @Override public GoogleBuild requestServerAuthCode(String s, boolean b) { return mLogin.requestServerAuthCode( s, b ); } @Override public GoogleBuild requestScopes(Scope scope, Scope... scopes) { return mLogin.requestScopes( scope, scopes ); } @Override public void onClick(View v) { mLogin.onClick( v ); } @Override public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { mLogin.onActivityResult( requestCode, resultCode, data ); } } 7.Google登录接口之控制台配置

控制台配置传送门



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3