赞
踩
目录
6.例示调用(这里继承了AppCompatButton作为例示)
- //Google登录引用包
- api 'com.google.android.gms:play-services-auth:19.0.0'
-
- //Client ID(values/strings.xml)
- <string name="server_client_id">客户端ID</string>
- 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 ); }
-
- @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<GoogleSignInAccount> 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 );
- }
- }
- 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);
- }
- 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();
- }
- 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() );
- }
- }
- 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 );
- }
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。