当前位置:   article > 正文

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

google 登录 api

目录

 

1.基础配置

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

3.GoogleLogIn(实现类接口)

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

5.GoogleBuild(构建请求)

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

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


1.基础配置

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

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

  1. import android.app.Activity;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.util.Log;
  5. import android.view.View;
  6. import androidx.annotation.NonNull;
  7. import androidx.annotation.Nullable;
  8. import com.google.android.gms.auth.api.signin.GoogleSignIn;
  9. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  10. import com.google.android.gms.auth.api.signin.GoogleSignInClient;
  11. import com.google.android.gms.common.api.ApiException;
  12. import com.google.android.gms.common.api.Scope;
  13. import com.google.android.gms.tasks.Task;
  14. import java.lang.ref.WeakReference;
  15. public class GoogleLogInImpl implements GoogleLogIn {
  16. private static final String TAG = "GoogleLogIn";
  17. private static final int RC_SIGN_IN = 800;
  18. private WeakReference<Activity> mWRActivity;
  19. private final GoogleBuild mBuild;
  20. private GoogleSignInClient mClient = null;
  21. private GoogleCallback mCallback;
  22. GoogleLogInImpl(Context context) { mBuild = GoogleBuild.create( context ); }
  23. @Override
  24. public void registerCallback(@NonNull Activity activity, GoogleCallback call) {
  25. mWRActivity = new WeakReference<>( activity );
  26. mCallback = call;
  27. }
  28. @Override
  29. public GoogleBuild requestIdToken() { return mBuild.requestIdToken(); }
  30. @Override
  31. public GoogleBuild requestEmail() { return mBuild.requestEmail(); }
  32. @Override
  33. public GoogleBuild requestGender() { return mBuild.requestGender(); }
  34. @Override
  35. public GoogleBuild requestId() { return mBuild.requestId(); }
  36. @Override
  37. public GoogleBuild requestProfile() { return mBuild.requestProfile(); }
  38. @Override
  39. public GoogleBuild requestScopes(Scope scope, Scope... scopes) {
  40. return mBuild.requestScopes( scope, scopes );
  41. }
  42. @Override
  43. public GoogleBuild requestServerAuthCode(String s) { return mBuild.requestServerAuthCode( s ); }
  44. @Override
  45. public GoogleBuild requestServerAuthCode(String s, boolean b) {
  46. return mBuild.requestServerAuthCode( s, b );
  47. }
  48. @Override
  49. public void onClick(View v) {
  50. if( mClient == null ) mClient = mBuild.getClient();
  51. if( mWRActivity != null ) {
  52. Activity activity = mWRActivity.get();
  53. if( activity == null ) {
  54. Log.e(TAG, "Activity is null!");
  55. return;
  56. }
  57. activity.startActivityForResult( mClient.getSignInIntent(), RC_SIGN_IN );
  58. }else {
  59. Log.e(TAG, "You need call registerCallback()");
  60. }
  61. }
  62. @Override
  63. public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  64. if( requestCode != RC_SIGN_IN || mCallback == null ) return;
  65. GoogleSignInAccount gsiAccount = null;
  66. Task<GoogleSignInAccount> task = null;
  67. try {
  68. //是否已经授权过
  69. gsiAccount = GoogleSignIn.getLastSignedInAccount( mWRActivity.get() );
  70. if( gsiAccount != null ) {
  71. mCallback.onSuccess( gsiAccount, true );
  72. return;
  73. }
  74. task = GoogleSignIn.getSignedInAccountFromIntent( data );
  75. //获取授权
  76. gsiAccount = task.getResult( ApiException.class );
  77. } catch (ApiException e) {
  78. e.printStackTrace();
  79. }
  80. if( task.isCanceled() ) {
  81. //取消授权
  82. mCallback.onCancel();
  83. return;
  84. }else if( gsiAccount == null ) {
  85. //授权出错
  86. mCallback.onFailure();
  87. return;
  88. }
  89. //授权成功
  90. mCallback.onSuccess( gsiAccount, false );
  91. }
  92. }

3.GoogleLogIn(实现类接口)

  1. import android.app.Activity;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.view.View;
  5. import androidx.annotation.NonNull;
  6. import androidx.annotation.Nullable;
  7. import com.google.android.gms.common.api.Scope;
  8. public interface GoogleLogIn {
  9. static GoogleLogIn create(Context context) { return new GoogleLogInImpl( context ); }
  10. void registerCallback(@NonNull Activity activity, GoogleCallback call);
  11. GoogleBuild requestIdToken();
  12. GoogleBuild requestEmail();
  13. GoogleBuild requestGender();
  14. GoogleBuild requestId();
  15. GoogleBuild requestProfile();
  16. GoogleBuild requestScopes(Scope scope, Scope... scopes);
  17. GoogleBuild requestServerAuthCode(String s);
  18. GoogleBuild requestServerAuthCode(String s, boolean b);
  19. void onClick(View v);
  20. void onActivityResult(int requestCode, int resultCode, @Nullable Intent data);
  21. }

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

  1. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  2. /**
  3. * 登录授权回调
  4. */
  5. public interface GoogleCallback {
  6. /**
  7. * 授权成功
  8. * @param account 授权信息
  9. * @param isFirst 之前是否授权过
  10. */
  11. void onSuccess(GoogleSignInAccount account, boolean isFirst);
  12. /**
  13. * 取消授权
  14. */
  15. void onCancel();
  16. /**
  17. * 授权失败
  18. */
  19. void onFailure();
  20. }

5.GoogleBuild(构建请求)

  1. import android.content.Context;
  2. import com.google.android.gms.auth.api.signin.GoogleSignIn;
  3. import com.google.android.gms.auth.api.signin.GoogleSignInClient;
  4. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  5. import com.google.android.gms.common.api.Scope;
  6. import com.og.login.R;
  7. import java.lang.annotation.Retention;
  8. import java.lang.annotation.RetentionPolicy;
  9. import java.lang.ref.WeakReference;
  10. public class GoogleBuild {
  11. @Retention(RetentionPolicy.SOURCE)
  12. public @interface SignIn {
  13. GoogleSignInOptions DEFAULT_SIGN_IN = GoogleSignInOptions.DEFAULT_SIGN_IN;
  14. GoogleSignInOptions DEFAULT_GAMES_SIGN_IN = GoogleSignInOptions.DEFAULT_GAMES_SIGN_IN;
  15. }
  16. private final GoogleSignInOptions.Builder mBuild;
  17. private final WeakReference<Context> mWRContext;
  18. private GoogleBuild(Context context, @SignIn GoogleSignInOptions signIn) {
  19. mWRContext = new WeakReference<>( context );
  20. mBuild = new GoogleSignInOptions.Builder( signIn );
  21. }
  22. /**
  23. * 以默认的方式登录
  24. * @return Build
  25. */
  26. public static GoogleBuild create(Context context) {
  27. return new GoogleBuild( context, SignIn.DEFAULT_SIGN_IN );
  28. }
  29. /**
  30. * 以游戏的方式登录
  31. * @return Build
  32. */
  33. public static GoogleBuild createGame(Context context) {
  34. return new GoogleBuild( context, SignIn.DEFAULT_GAMES_SIGN_IN );
  35. }
  36. public GoogleBuild requestIdToken() {
  37. mBuild.requestIdToken( mWRContext.get()
  38. .getResources()
  39. .getString( R.string.server_client_id )
  40. );
  41. return this;
  42. }
  43. public GoogleBuild requestEmail() {
  44. mBuild.requestEmail();
  45. return this;
  46. }
  47. public GoogleBuild requestGender() {
  48. mBuild.requestScopes( new Scope( "https://www.googleapis.com/auth/user.gender.read" ) );
  49. return this;
  50. }
  51. public GoogleBuild requestId() {
  52. mBuild.requestId();
  53. return this;
  54. }
  55. public GoogleBuild requestProfile() {
  56. mBuild.requestProfile();
  57. return this;
  58. }
  59. public GoogleBuild requestScopes(Scope scope, Scope... scopes) {
  60. mBuild.requestScopes( scope, scopes );
  61. return this;
  62. }
  63. public GoogleBuild requestServerAuthCode(String s) {
  64. mBuild.requestServerAuthCode( s );
  65. return this;
  66. }
  67. public GoogleBuild requestServerAuthCode(String s, boolean b) {
  68. mBuild.requestServerAuthCode( s, b );
  69. return this;
  70. }
  71. GoogleSignInClient getClient() {
  72. return GoogleSignIn.getClient( mWRContext.get(), mBuild.build() );
  73. }
  74. }

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

  1. import android.app.Activity;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.util.AttributeSet;
  5. import android.view.View;
  6. import androidx.annotation.NonNull;
  7. import androidx.annotation.Nullable;
  8. import androidx.appcompat.widget.AppCompatButton;
  9. import com.google.android.gms.common.api.Scope;
  10. import com.og.login.google.GoogleBuild;
  11. import com.og.login.google.GoogleCallback;
  12. import com.og.login.google.GoogleLogIn;
  13. public class GoogleLoginButton extends AppCompatButton implements GoogleLogIn {
  14. private final GoogleLogIn mLogin;
  15. public GoogleLoginButton(Context context) {
  16. this(context, null);
  17. }
  18. public GoogleLoginButton(Context context, AttributeSet attrs) {
  19. this(context, attrs, 0);
  20. }
  21. public GoogleLoginButton(Context context, AttributeSet attrs, int defStyleAttr) {
  22. super(context, attrs, defStyleAttr);
  23. mLogin = GoogleLogIn.create( context );
  24. mLogin.requestEmail();
  25. // mLogin.requestGender();
  26. }
  27. @Override
  28. public void registerCallback(@NonNull Activity activity, GoogleCallback call) {
  29. mLogin.registerCallback( activity, call );
  30. }
  31. @Override
  32. public GoogleBuild requestIdToken() { return mLogin.requestIdToken(); }
  33. @Override
  34. public GoogleBuild requestEmail() { return mLogin.requestEmail(); }
  35. @Override
  36. public GoogleBuild requestGender() { return mLogin.requestGender(); }
  37. @Override
  38. public GoogleBuild requestId() { return mLogin.requestId(); }
  39. @Override
  40. public GoogleBuild requestProfile() { return mLogin.requestProfile(); }
  41. @Override
  42. public GoogleBuild requestServerAuthCode(String s) { return mLogin.requestServerAuthCode( s ); }
  43. @Override
  44. public GoogleBuild requestServerAuthCode(String s, boolean b) {
  45. return mLogin.requestServerAuthCode( s, b );
  46. }
  47. @Override
  48. public GoogleBuild requestScopes(Scope scope, Scope... scopes) {
  49. return mLogin.requestScopes( scope, scopes );
  50. }
  51. @Override
  52. public void onClick(View v) {
  53. mLogin.onClick( v );
  54. }
  55. @Override
  56. public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  57. mLogin.onActivityResult( requestCode, resultCode, data );
  58. }
  59. }

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

控制台配置传送门

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/706899
推荐阅读
相关标签
  

闽ICP备14008679号