Как получить код аутентификации сервера из потока входа GetGoogleIdOption?

Я не понимаю, как получить 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
                        }
                    }
Нина
Вопрос задан8 августа 2024 г.

1 Ответ

Ваш ответ

Загрузить файл.