Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 9 / 14 Autentifikacija II: Google ~45 min

Sukurk GoogleSignInHelper.kt — Google ID raktas

Kodo stulpelyje — GoogleSignInHelper.kt. Viena suspend funkcija: CredentialManager parodo Google paskyrų pasirinkimą, ir jei vartotojas pasirenka — grąžina ID token (pasirašytą JWT). Atkreipk dėmesį į setServerClientId(...google_web_client_id) — čia paduodam Web kliento ID, ne Android.

Pridėk priklausomybes ir strings.xml:

implementation(libs.androidx.credentials)
implementation(libs.androidx.credentials.play.services.auth)
implementation(libs.googleid)                 // GetGoogleIdOption
<!-- res/values/strings.xml -->
<string name="google_web_client_id">1001517404205-...apps.googleusercontent.com</string>

Toliau — tas pats kontraktas kaip 8a. PicaApi gauna endpoint'ą:

@POST("auth/google")
suspend fun googleAuth(@Body request: GoogleAuthRequest): AuthResponse   // ← ta pati AuthResponse!

@Serializable data class GoogleAuthRequest(@SerialName("id_token") val idToken: String)

AuthRepository — nauja funkcija, saugojanti raktą į tą pačią saugyklą:

suspend fun googleSignIn(idToken: String) {
    val response = api.googleAuth(GoogleAuthRequest(idToken))
    tokenStorage.saveToken(response.token)   // ta pati saugykla kaip el. paštas
}

AuthViewModelgoogleSignIn(idToken) atkartoja authenticate() logiką (isLoading, isLoggedIn, error). O LoginScreen — mygtukas po „arba" skirtuku:

OutlinedButton(
    onClick = {
        scope.launch {
            try {
                val idToken = getGoogleIdToken(context)
                if (idToken != null) viewModel.googleSignIn(idToken)
            } catch (e: Exception) {
                // vartotojas uždarė pasirinkimą arba nėra paskyrų — ignoruojam
            }
        }
    },
    enabled = !state.isLoading,
    modifier = Modifier.fillMaxWidth()
) { Text("Sign in with Google") }

Patarimas. setFilterByAuthorizedAccounts(false) — parodo visas telefono Google paskyras (ne tik anksčiau naudotas su šia programa). true naudinga „grįžtantiems" vartotojams (tylesnis srautas), bet pirmam prisijungimui reikia false.