Диспетчер учетных данных не может подписать пользователя с Google 2 раза при запуска приложений в первый разAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Диспетчер учетных данных не может подписать пользователя с Google 2 раза при запуска приложений в первый раз

Сообщение Anonymous »

Когда я пытаюсь петь пользователя с Google, я запускаю 2 потока, один, если у пользователя уже есть учетная запись в моем приложении, а второй, если они этого не делают. Проблема в том, что при первой загрузке приложения из Play Store они пытаются войти в Google, оно не работает как для войти, так и для регистрации потоков - выброшен NocredentialSexception. Он работает только после того, как пользователь перезапускает приложение (процесс убийства + запускается снова, но не всегда) или изменяет ориентацию на устройство. < /P>
Ниже моя текущая реализация. Еще не пробовал его по производству, но ранее у меня была версия, когда менеджер был создан с использованием контекста деятельности, теперь его контекст приложения, вводимый через Койн, так как я думал, что это может помочь, если у CredentialManager есть контекст приложения вместо пользовательского интерфейса. Вот аналогичная проблема, но, очевидно, это не фиксированное https://issuetracker.google.com/issues/4173397944
@edit 12.08.2025
Calling с контекстом приложения не сработала. Переключение от getgoogleidoption на GetsigninWithgoogleoption также не сработала. Это странно, так как иногда его даже достаточно, если я нажимаю на что-то на экране адаптации, и он начинает работать (или, как упоминалось ранее, rorte device, перейти на главный экран и обратно в приложение-но не всегда) < /p>
actual class GoogleAuthClient(
private val activityProvider: ActivityProvider,
private val manager: CredentialManager
) {
actual suspend fun getIdToken(clientId: String): String? {
val activity = activityProvider.currentActivity() ?: return null
val signIn = GetGoogleIdOption.Builder()
.setServerClientId(clientId)
.setFilterByAuthorizedAccounts(true)
.setAutoSelectEnabled(true)
.build()

val signUp = GetGoogleIdOption.Builder()
.setServerClientId(clientId)
.setFilterByAuthorizedAccounts(false)
.setAutoSelectEnabled(false)
.build()

val trySignIn = GetCredentialRequest.Builder().addCredentialOption(signIn).build()
val trySignUp = GetCredentialRequest.Builder().addCredentialOption(signUp).build()

val response = try {
manager.getCredential(activity, trySignIn)
} catch (e: NoCredentialException) {
CrashReporter.recordException(e)
try {
manager.getCredential(activity, trySignUp)
} catch (e: NoCredentialException) {
CrashReporter.log("No credentials found for the second time")
CrashReporter.recordException(e)
return null
}
} catch (e: CancellationException) {
throw e
} catch (e: Exception) {
CrashReporter.recordException(e)
return null
}

return handleSignIn(response.credential)
}

private fun handleSignIn(credential: Credential): String? {
if (credential is CustomCredential &&
credential.type == GoogleIdTokenCredential.TYPE_GOOGLE_ID_TOKEN_CREDENTIAL
) {
return try {
GoogleIdTokenCredential.createFrom(credential.data).idToken
} catch (e: GoogleIdTokenParsingException) {
CrashReporter.recordException(e); null
}
}
return null
}

actual suspend fun signOut() {
try {
manager.clearCredentialState(ClearCredentialStateRequest())
} catch (e: CancellationException) {
throw e
} catch (e: Exception) {
CrashReporter.recordException(e)
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/797 ... ng-app-for
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»