我正在尝试在 Kotlin Jetpack 中使用 Firebase 身份验证设置 Google 登录。不知何故,我无法获取 googleIdToken。
我尝试了很多方法,仍然无法解决。我尝试过其他方法,但它们都被弃用了。
Row(
horizontalArrangement = Arrangement.Center
) {
val context = LocalContext.current
// Initialize Credential Manager
val credentialManager = CredentialManager.create(context)
// Configure Credential Request
val request = GetCredentialRequest.Builder()
.addCredentialOption(
GetGoogleIdOption.Builder()
.setServerClientId(context.getString(R.string.default_web_client_id))
.build()
)
.build()
// Google Sign-In Icon
Icon(
painter = painterResource(id = R.drawable.google_search_logo),
contentDescription = "Google Icon",
modifier = Modifier
.size(LocalConfiguration.current.screenWidthDp.dp * 0.075f)
.clickable {
CoroutineScope(Dispatchers.IO).launch {
try {
val response = credentialManager.getCredential(context, request)
val googleIdToken = response.googleIdToken // Adjusted to retrieve the token
if (googleIdToken != null) {
val firebaseCredential = GoogleAuthProvider.getCredential(googleIdToken, null)
FirebaseAuth.getInstance().signInWithCredential(firebaseCredential)
.addOnCompleteListener { task ->
if (task.isSuccessful) {
Log.d("SignIn", "Sign-in successful!")
// Perform navigation or update UI
} else {
Log.e("SignIn", "Sign-in failed: ${task.exception}")
}
}
} else {
Log.e("SignIn", "Google ID token is null")
}
} catch (e: Exception) {
Log.e("SignIn", "Credential Manager failed", e)
}
}
},
tint = Color.Unspecified
)
}
当您使用以下代码行时:
请注意,“response”对象属于GetCredentialResponse类型。因此,正如您在该类内部看到的,不存在“googleIdToken”属性。但是,存在一个credential属性。因此,您可以读取此属性:
按照文档中提到的执行必要的检查 ,然后立即获取GoogleIdTokenCredential对象,该对象包含一个getIdToken () 函数,该函数返回
idToken
您感兴趣的内容。最后,您可以登录 Firebase: