Google 登录,一气呵成

本文介绍如何在Android应用中集成Google登录功能,包括添加依赖、编写代码及错误排查等内容。

呵呵!!!

听起来有点标题党,‘一气呵成’ 是有前提和准备的!

‘十年寒窗无人问 一举成名天下知’

你可知道他们背后的付出
这一起‘一气呵成’的前提是:Google 后台已配置好程序,包括签名、包名等!!!

Google 登录接入

开发者手册:https://developers.google.com/android?hl=zh-cn

  • Google 登录 2020年11月7日21:17:47

    1、添加依赖,集成 SDK

    小技巧:当你为找不到依赖而烦恼的时候,你只需要先填充第 2 步的代码到 Android studio 中,只有按照提示添加依赖,再 import 即可。

    implementation 'com.google.android.gms:play-services-auth:18.1.0'
    

    2、根据文档编写代码

    https://developers.google.com/identity/sign-in/android
    

    本人编写的代码:仅供参考 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FzvsynKZ-1604756291745)(file:///C:\Users\lifeng\AppData\Local\Temp\SGPicFaceTpBq\8484\07096C2F.png)]

    /***
     * Created by : 村长只会去森林打野
     * Created on : <com.q1.overseas_library.manager.impl>
     * Created on : 2020 11 14:45
     *
     * My motto   : 我在皮皮虾凑数的日子
     */
    public class GlLoginManagerImpl implements LoginManager {
    
        private static final int RC_SIGN_IN = 8888;
    
        private GoogleSignInOptions mGoogleSignInOptions;
    
        private GoogleSignInClient mGoogleSignInClient;
    
        private LoginCallback mLoginCallback;
    
        private boolean isReady;
    
        public GlLoginManagerImpl() {
            Activity activity = MultiOverseasSDK.getInstance().getActivity();
            if (activity == null) {
                isReady = false;
                return;
            }
    
            mGoogleSignInOptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                    .requestEmail()
                    .build();
            mGoogleSignInClient = GoogleSignIn.getClient(activity, mGoogleSignInOptions);
            isReady = true;
        }
    
        @Override
        public void login(LoginCallback loginCallback) {
            if (isReady) {
                mLoginCallback = loginCallback;
    
                Intent signInIntent = mGoogleSignInClient.getSignInIntent();
                Activity activity = MultiOverseasSDK.getInstance().getActivity();
                activity.startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        }
    
        @Override
        public void logout() {
            mGoogleSignInClient.signOut();
            if (mLoginCallback != null) {
                mLoginCallback.onLogout();
            }
        }
    
        @Override
        public void onActivityResult(int requestCode, int resultCode, Intent data) {
            if (requestCode == RC_SIGN_IN) {
                Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
                handleSignInResult(task);
            }
        }
    
        private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
            GoogleSignInAccount account = null;
            try {
                account = completedTask.getResult(ApiException.class);
                if (mLoginCallback != null && account != null) {
                    LoginCallbackResult result = new LoginCallbackResult.Builder()
                            .token(account.getIdToken())
                            .email(account.getEmail())
                            .displayName(account.getDisplayName())
                            .build();
                    mLoginCallback.onSuccess(result);
                }
            } catch (ApiException e) {
                if (mLoginCallback != null && account != null) {
                    mLoginCallback.onFailed("Google 登录错误码:" + account.getServerAuthCode());
                }
                LogUtils.e("Google 登录错误,返回 account 为空");
            }
        }
    }
    
    

    3、错误排查

    1. 返回错误码 10 :
    排查方向:
    1、调试程序使用的包名和上传到 Google 后台 apk 的包名是否一致。
    2、调试程序使用的签名和 Google 后台 apk 的签名是否一致。< keystory 或者 jks 签名>
    
    1. Google 登录没有任何响应:
    排查方向:
    1、留意 onActivityResult 这个方法有没有被调用。【例如第三方 activity 返回的数据需要调用 onActivityResult 接受数据】
    
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值