Мы внедряем 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 и идентификатором клиента?
Не представляю, как это работает для больших команд.Я полагаю, что нам здесь чего-то не хватает, поэтому, если кто-то более опытный сможет просветить нас, я был бы признателен.Спасибо и хорошего дня.