我正在尝试构建一个使用 Google 登录的应用程序,但我遇到了
GoogleIdTokenCredential
、GoogleIdTokenParsingException
和 GetGoogleIdOption
的未解决的引用错误
在这段代码中:
coroutineScope.launch {
try {
// Call to get credentials
val result = credentialManager.getCredential(context, request)
val credential = result.credential
val googleIdTokenCredential = GoogleIdTokenCredential.createFrom(credential.data)
val googleIdToken = googleIdTokenCredential.idToken
// Pass the token to the ViewModel
loginViewModel.registerUserWithGoogleId(username, password, googleIdToken)
} catch (e: GetCredentialException) {
Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
} catch (e: GoogleIdTokenParsingException) {
Toast.makeText(context, e.message, Toast.LENGTH_SHORT).show()
}
}
还有这个代码
@Provides
@Singleton // Ensure a single instance is used throughout the app
fun provideGoogleIdOption(): GetGoogleIdOption {
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) }
return GetGoogleIdOption.Builder()
.setFilterByAuthorizedAccounts(false)
.setServerClientId("MY_CODE")
.setNonce(hashedNonce)
.build()
}
Android 为我提供了添加依赖项和导入的选项,如我添加的图片所示。
但是如果我坚持这个建议,什么也不会发生。如果我尝试手动添加从 Android 开发人员页面复制粘贴的依赖项(https://developer.android.com/identity/sign-in/credential-manager-siwg),我会收到此错误当我构建我的项目时
Caused by: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':app:debugRuntimeClasspath'.
这些是我在代码中复制的依赖项
implementation("androidx.credentials:credentials:1.3.0")
implementation("androidx.credentials:credentials-play-services-auth:1.3.0")
implementation("com.google.android.libraries.identity.googleid:googleid:1.3.0")
我已使缓存无效并重新启动并清理了项目,但我仍然遇到相同的错误。 那么我必须做什么才能使文档中的依赖项起作用才能允许我的用户使用 Google 登录?
使用正确的 googleid 库版本,即 1.1.1
implementation("com.google.android.libraries.identity.googleid:googleid:1.1.0")