首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Google getSignedInAccountFromIntent与代码10崩溃

Google getSignedInAccountFromIntent与代码10崩溃
EN

Stack Overflow用户
提问于 2019-09-25 02:27:34
回答 1查看 788关注 0票数 0

我们正在我们的移动应用程序中实现Google登录和后端服务器的身份验证。

Developer A有以下代码

代码语言:javascript
复制
val GOOGLE_OAUTH2_CLIENT_ID = "1234567890123-abcdef....apps.googleusercontent.com"

val gSignOptions = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
    .requestIdToken(GOOGLE_OAUTH2_CLIENT_ID)
    .requestEmail()
    .build()

val clientGoogleSignIn = GoogleSignIn.getClient(this, gSignOptions)

findViewById<Button>(R.id.welcome_get_started_button).setOnClickListener {
    startActivityForResult(clientGoogleSignIn.signInIntent, RC_GOOGLE_SIGN_IN)
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?)
{
    super.onActivityResult(requestCode, resultCode, data)
    try
    {
        if (requestCode == RC_GOOGLE_SIGN_IN)
        {
            val googleAccount = GoogleSignIn.getSignedInAccountFromIntent(data) // FAILING LINE
               .getResult(ApiException::class.java)
            googleAccount?.let {
                log("D", "Google sign-in completed with ${it.email} and token ${it.idToken}")
                processGSignInAndStartNextActivity(it)
            }
        }
    }
    catch (e: Throwable)
    {
        log("E", "onActivityResult failed", e)
    }
}

在Google > API >凭据页面中,我们有两个客户机ID:

  • 网络应用程序(代码中的应用程序)
  • Android(用SHA1和包名签名)

由Android自己制作的SHA1 : Gradle > signingReport

每件事都是根据Google文档完成的,一切都正常。

现在开发人员B进来了.

他提取相同的代码并使用相同的调试配置。同样的Android版本,相同的Kotlin版本,同样的Google服务版本。他运行代码,并且它始终失败于

代码语言:javascript
复制
 com.google.android.gms.common.api.ApiException: 10: 
        at com.google.android.gms.common.internal.ApiExceptionUtil.fromStatus(Unknown Source:4)
        at com.google.android.gms.auth.api.signin.GoogleSignIn.getSignedInAccountFromIntent(Unknown Source:8)

我们花了几个小时尝试了所有的东西--更改代码,卸载,不同的AVDs,不同的JVM版本,没有任何帮助。最后,我们决定他应该创建自己的Android令牌,因为它没有任何意义,所以为什么不呢?原来他的SHA1是由安卓工作室生成的.一旦他从那个SHA1创建了另一个客户机ID,代码就对他起作用了。现在我们有3个客户ID: Web,Android,Android。

是每个Android开发人员都应该用唯一的SHA1和客户端ID?对应用程序进行签名的预期行为。

我无法想象这对于大型团队是如何运作的。我相信我们在这里遗漏了一些东西,所以如果一个更有经验的人能启发我们,我会很感激的。谢谢你,祝你今天愉快。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-25 02:49:55

您可以从您的团队中复制调试密钥,并将其提供给所有团队成员。

调试Keystore应该位于~/.android/debug.keystore

或者您可以创建另一个Keystore,并在开发人员之间共享它,并在gradle中手动设置它。

代码语言:javascript
复制
android {

    // ...

    signingConfigs {
        debug {
            storeFile file('../debug.keystore')
        }

        /*
        for release:
        release {
            storeFile file('release.keystore')
            storePassword "password"
            keyAlias "alias"
            keyPassword "alias_password"
        }
        */
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58090367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档