Android Studio接谷歌原生登录,谷歌登录不了


前言

准备

近日,公司要求上线海外市场,需要接入海外SDK,首先上架的是GooglePlay,需要先接入GooglePlay登录,这里我们选择的接安卓原生,需要手机安装谷歌三件套,如果没有安装好的就去下载一个Go谷歌安装器,里面有一键安装。注:“手机必须搭梯子(这里不让说,否则审核不通过)”。

开始

刚开始肯定要先查阅文档,我为此翻阅了不少博文,但是好多文章都说的一知半解的,搞半天也没头绪(每个公司都有自己的项目,我们在原项目上开发,注定要多走些路子)。首先,你先确定你是接Google原生登录,还有一种是集成FireBase的(不知道说法对不对),这里只说前者,后者我也没做,等后面再说吧。
这里非常感谢一名在稀土掘金的叫Silence潇湘夜雨的大佬两句话就把我的活说明白啦。在这里我结合他的博文来做一下我工作的详细记录。

AndroidStudio

我们开发的项目先导出安卓,因为我们项目接过好几个渠道,所以比较乱一点,搞得我也很头痛,项目里也有分渠道打包,我看到不是很懂,只有以后再重新弄一下。
首先我们要先导入Google登录所要用到的库,在app下的build.gradle里面的的dependencies里配置一下Google服务

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

然后在最上面点击Sync Now (有问题可以降一个版本,比如开发文档说要用17.0.0我的项目就适配不了用的是16.0.0)

然后我们就可以在MainActivity里面开始写我们的代码了。
先声明一个 private GoogleSignInClient mGoogleSignInClient;
在onCreate()方法里写上

 //TODO Google登录
 //配置登录以请求用户的ID,电子邮件地址和基本配置文件.ID和基本配置文件包含在DEFAULT_SIGN_IN中.
  GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
           .requestEmail()
           .requestIdToken(Constants.GoogleAppID)
           .build();
 //使用gso指定的选项构建一个GoogleSignInClient.
 mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

Constants.GoogleAppID里面配置的是server_client_id,(server_client_id怎么获取下面会说明)
Google登录肯定有按钮,用按钮事件调用googleLogin()方法

 public void googleLogin() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, 1000);
    }

上面两行的代码是调起Google账号登录的界面

授权成功后肯定要回调,在onActivityResult()方法接收回调,这里面我写了两种方式,用哪一种都可以。这里handleSignInResult方法重载了一下,用一个就好。

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		 if (requestCode == 1000) {
            //方式一
//            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
//            handleSignInResult(result);
            //方式二
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
}
 private void handleSignInResult(GoogleSignInResult result){
        Constants.Log("handleSignInResult方法调用----" + result.isSuccess());

        if (result.isSuccess()) {
            GoogleSignInAccount account = result.getSignInAccount();
            //account里可以直接获取到ID,name,和头像
            Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
            String idToken = account.getIdToken();
            
           Constants.Log("Token-----"+idToken+"-----");
        }
    }
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            //account里可以直接获取到ID,name,和头像
             Constants.Log( "id--------" + account.getId() + "----name----" + account.getDisplayName() + "---photo--" + account.getPhotoUrl());
            String idToken = account.getIdToken();

            Constants.Log("Token-----"+idToken+"-----");
            
        } catch (ApiException e) {
            Log.w(TAG, "signInResult:failed code=" + e.getStatusCode());
            Constants.Log("错误信息为"+e.toString());
        }
    }

这里面的Token值验证账号的时候会用的到。至于还要用到什么数据你就和后台沟通一下,直接传过去就好。

可见,接入谷歌登录还是很简单的,明白了流程,一会就弄好,个人感觉主要是不知道怎么弄API后台的设置

server_client_id


先弄一下OAuth同意屏幕的描述,按照你项目填写

再创建一下OAuth客户端id,其中

这个就是server_client_id,传入项目就可以啦。

如果有什么问题的话下方给我留言,我看到的话就会尽快回复的哦
现在没写完的,后面待写…

文章最后发布于: 2019-10-23 21:23:14

相关内容

    暂无相关文章