Я не понимаю, как получить code аутентификации сервера из потока регистрации/входа GetGoogleIdOption. Я понимаю, что GetGoogleIdOption используется для аутентификации, а code аутентификации сервера, возможно, поступает из потока авторизации.
Я прочитал это руководство, и здесь есть некоторые подробности, но я не знаю, как их применить на практике.
Насколько я понимаю, авторизация используется для того, чтобы предоставить пользователю доступ к сервису Google, например Google Drive, что необязательно для простой регистрации/входа Google.
Вот что у меня есть сейчас
Для бэкэнда, с которым я работаю, требуются имя, адрес электронной почты, serverAuthCode, googleTokenId и userId. Затем в ответ он отправляет обратно accessToken и токен авторизации.
Буду признателен за любые подробности, которые помогут мне встать на правильный путь!
val credentialManager = CredentialManager.create(context)
val rawNonce = UUID.randomUUID().toString()
val bytes = rawNonce.toByteArray()
val md = MessageDigest.getInstance("SHA-256")
val digest = md.digest(bytes)
val hashedNonce = digest.fold("") { str, it -> str + "%02x".format(it) }
val googleIdOption: GetGoogleIdOption = GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId(context.getString(R.string.web_client_id))
.setAutoSelectEnabled(false)
.setNonce(hashedNonce)
.build()
val request: GetCredentialRequest = GetCredentialRequest.Builder()
.addCredentialOption(googleIdOption)
.build()
scope.launch {
try {
val result = credentialManager.getCredential(
request = request,
context = context
)
val credential = result.credential
val googleIdTokenCredential =
GoogleIdTokenCredential.createFrom(credential.data)
val name = googleIdTokenCredential.displayName ?: "unavailable"
val email = googleIdTokenCredential.id
val googleIdToken = googleIdTokenCredential.idToken
val serverAuthCode = ""
val userId = ""
onEvent(SignUpEvents.OnLogInWithGoogle(
name = name,
email = email,
serverAuthCode = serverAuthCode,
googleTokenId = googleIdToken,
userId = userId
))
// Use the googleIdToken for further processing
} catch (e: GetCredentialCancellationException) {
// Handle the case where the user cancelled the operation
Log.e("GoogleSignIn", "User cancelled the sign-in process.")
} catch (e: GetCredentialException) {
// Handle other credential exceptions
Log.e("GoogleSignIn", "Credential error: ${e.message}")
Toast.makeText(context, "An error occurred", Toast.LENGTH_SHORT).show()
} catch (e: Exception) {
// Handle any other exceptions
Log.e("GoogleSignIn", "Unexpected error: ${e.message}")
Toast.makeText(context, "An error occurred", Toast.LENGTH_SHORT).show()
} finally {
signInWithGoogleLoading = false
}
}