(出海必备)Android三方登录之Google登录

背景:之前一直做国内的项目,最近公司要做一款国外上架的app,因为海外和国内的文档,账号注册,demo测试等流程和国内大有不同,中间遇到了不少坑,在这里总结一下,有用到的小伙伴,可以借鉴下;

1.先撸官方文档

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

2.Google的Demo;

GitHub - googlesamples/google-services: A collection of quickstart samples demonstrating the Google APIs for Android and iOS

3.(1):注册Firebase账号 (https://console.firebase.google.com/)

(2):添加新应用

 

 在这里插入图片描述

 这里的json文件注意下载保存;在这里插入图片描述

 因为用到登录功能,SHA1还是需要的,

C:\Users\Alan>keytool -list -v -keystore <jks存放的路径>

 SHA1填写的位置有那么几个,如果只是为了测试google登录,在刚才添加应用的那加上就可以了。如图这样:

但是在后面又遇到了坑, 由于需要google play上架,所以先提交了测试版,加入了测试账号,可以在商店下载,下载后发现google登录不了。于是,各种撸代码找坑。。。最终的原因是,Google Play当应用上传后,一是应用本身的SHA1(应用签名),二是Google Play会为应用重新生成一个SHA1(商店的签名); 所以最终的解决方案如下:

 

然后,打开Google应用凭据官网 (https://console.developers.google.com/apis/credentials),将两个签名分别添加进去,测试,商店下载的app可以正常三方登录了。

然后撸代码:

1. init初始化:

//google login setting
GoogleSignInOptions googleSignInOptions = new GoogleSignInOptions
        .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestId()
        .requestProfile()
        .requestIdToken(getString(R.string.default_web_client_id))
        .requestEmail() //可以获取到邮箱信息【这一步还挺有必要,不光可以获取到邮箱信息,还会影响到下面获取性别信息】
        .build();
mGoogleSignInClient = GoogleSignIn.getClient(this, googleSignInOptions);

R.String.default_web_client_id   客户端ID   (很多朋友遇到  code返回10的问题,是因为下面的Web Client没有创建或者代码中google_client_id  使用的不是WebClient,代码一定要用WebClient 对应的客户端ID

在这里插入图片描述

 2.点击登录

Intent intent = mGoogleSignInClient.getSignInIntent();
startActivityForResult(intent, CODE_SIGN_IN);
3.注册回调
 @Override
    protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == CODE_SIGN_IN && resultCode != 0) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        } else if(requestCode == CODE_SIGN_IN) {
//            ToastUtils.showShort(getResources().getString(R.string.net_error));
            assert data != null;
            ToastUtils.showShort( data.toString() );
        }
}

4.登录成功数据回调

/**
     * Google登录成功返回数据
     * @param completedTask
     */
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            // Signed in successfully, show authenticated UI.
            GgOrFbUserInfo ggOrFbUserInfo = new GgOrFbUserInfo();
            ggOrFbUserInfo.setAvatar(account.getPhotoUrl() == null ? "": account.getPhotoUrl().toString());
            ggOrFbUserInfo.setLtype(1);
            ggOrFbUserInfo.setUserId(account.getId());
            ggOrFbUserInfo.setEmail(account.getEmail());
            ggOrFbUserInfo.setEmailVerified(1);
            ggOrFbUserInfo.setName(account.getDisplayName());
            ggOrFbUserInfo.setLanguage(CommonPramsUtil.getSystemLanguage());
            ggOrFbUserInfo.setFamilyName(account.getFamilyName() == null ? "" : account.getFamilyName());
            ggOrFbUserInfo.setGivenName(account.getGivenName());
            ggOrFbUserInfo.setRegion("zn");
            login(ggOrFbUserInfo); //在这走自己后台接口
            if (account.getPhotoUrl() != null) {
//                Glide.with(LoginActivity.this).load(account.getPhotoUrl()).into(imgHead);
            }

            Log.e(TAG, "account--------------->>>" + new Gson().toJson(account));
        } catch (ApiException e) {
            // The ApiException status code indicates the detailed failure reason.
            // Please refer to the GoogleSignInStatusCodes class reference for more information.
//            failedCode.setText("获取登录信息失败" + e.getMessage());
            Log.e(TAG, "signInResult:failed code=" + e.getStatusCode());
            ToastUtils.showShort(e.getMessage());
        }
    }

5.退出登录

mGoogleSignInClient.signOut()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        Log.d(TAG, "signOut: -----------------------------");
                        // ...登出的逻辑
                    }
                });

------------------以上就是Google登录和登出的所有步骤了-----------------------

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值