Сбой Google getSignedInAccountFromIntent с кодом 10 - PullRequest
0 голосов
/ 25 сентября 2019

Мы внедряем Google Sign-In и выполняем аутентификацию с помощью внутреннего сервера, а также в нашем мобильном приложении.

Разработчик A имеет следующий код :

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 project> API> Credentials у нас есть два идентификатора клиента:

  • веб-приложение (которое есть в коде)
  • Android (подписано с помощью SHA1 и имени пакета)

SHA1, созданный самой Android Studio: Gradle> signatureReport

Все сделано в соответствии с документацией Google, все работает.

СейчасПриходит разработчик B.

Он извлекает тот же код и использует тот же отладочный конфиг.Та же версия Android Studio, та же версия Kotlin, та же версия Google Play Services.Он запускает код, и он постоянно терпит неудачу с

 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)

Мы потратили часы и попробовали все: изменение кода, деинсталляции, разные AVD, разные версии JVM, ничего не помогло.В конце концов мы решили, что он должен создать свой собственный токен Android, потому что в этом нет никакого смысла, так почему бы и нет.Оказывается, его SHA1, сгенерированный Android Studio, был другим ... Как только он создал другой идентификатор клиента из этого SHA1, код работал для него.Теперь у нас есть 3 идентификатора клиента: веб-приложение, Android-DevA, Android-DevB.

Ожидается ли такое поведение, которое каждый разработчик Android предполагает для подписания приложения с уникальным SHA1 и идентификатором клиента?

Не представляю, как это работает для больших команд.Я полагаю, что нам здесь чего-то не хватает, поэтому, если кто-то более опытный сможет просветить нас, я был бы признателен.Спасибо и хорошего дня.

1 Ответ

1 голос
/ 25 сентября 2019

Вы можете скопировать ключ отладки из одной из вашей команды и предоставить его всем членам команды.

Отладка Keystore должна находиться в ~/.android/debug.keystore.

ИлиВы можете сделать еще один Keystore и поделиться им между разработчиками и установить его вручную в gradle.

android {

    // ...

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

        /*
        for release:
        release {
            storeFile file('release.keystore')
            storePassword "password"
            keyAlias "alias"
            keyPassword "alias_password"
        }
        */
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...