[英]FirebaseAuth.signInWithCredential is causing my Flutter app to crash when I call it
我是 Flutter 和 Firebase 的新手。 我正在嘗試使用 Firebase 設置電話身份驗證。 我在 Firebase 上創建了一個項目,並且我的 Flutter 應用程序已注冊。
當我運行 FirebaseAuth.instance.signInWithCredential(credential) 時,我的應用程序不斷崩潰。
// Successfully ran this and got a verificationID back.
await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: '+18005558989',
timeout: const Duration(seconds: 0),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
// This works
final AuthCredential credential = PhoneAuthProvider.getCredential(
verificationId: argVerificationID,
smsCode: smsCode,
);
// This is where the app crashes.
AuthResult authResult = await FirebaseAuth.instance
.signInWithCredential(credential)
.catchError((onError) {
// Handle Errors here.
var errorCode = onError.code;
var errorMessage = onError.message;
// The firebase.auth.AuthCredential type that was used.
var credential = errorCode.credential;
print("ERROR CODE:$errorCode");
print("ERROR MESSAGE:$errorMessage");
print("ERROR CREDENTIAL:$credential");
});
這是錯誤 Output:
W/BiChannelGoogleApi(23681): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzak@30ab46a E/JavaBinder(23681): *** Uncaught remote exception. (跨進程尚不支持異常:) E/JavaBinder(23681)。 java.lang:NoClassDefFoundError: 解析失敗; Landroid/support/v4/util/ArrayMap:E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzam:zzc(未知來源:22)E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzam:zzde(未知來源:17)E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzam:zzdd(未知來源:8)E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzan:zzdf(未知來源:1)E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzm:isAnonymous(未知來源:47)E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzat:zzi(未知來源:57)E/JavaBinder(23681)。 在 com.google.firebase.auth.internal.zzat:zzg(未知來源:10)E/JavaBinder(23681)。 在 com.google.firebase.auth.FirebaseAuth:zza(未知來源:62)E/JavaBinder(23681)。 在 com.google.firebase.auth.FirebaseAuth$zzb:zza(未知來源:5)E/JavaBinder(23681)。 在 com.google.firebase.auth.api.internal.zzcv:zzdx(未知來源:14)E/JavaBinder(3. 在 com.google.firebase.auth.api.internal.zzen:zzen(未知來源:15)E/Java88Binder(236)。 在 com.google.firebase.auth.api.internal.zzen:zza(未知來源:411)E/JavaBinder(2368)。 在 com.google.firebase.auth.api.internal.zzep:zza(未知來源:9)E/JavaBinder(23681)。 在 com.google.firebase.auth.api.internal.zzdx:dispatchTransaction(Unknown Source:9) E/JavaBinder(. 在 com.google.android.gms.internal.firebase_auth.zza:onTransact(未知來源:13)E/JavaBinder(23681)。 在 android.os.Binder.execTransactInternal(Binder:java:1021) E/JavaBinder(23681)。 在 android.os.Binder.execTransact(Binder:java:994) E/JavaBinder(23681):由。 java.lang:ClassNotFoundException。 在路徑上找不到 class "android.support.v4.util:ArrayMap"。 DexPathList[[壓縮文件...
我期待 FirebaseUser 返回並成功通過身份驗證。 看起來 Firebase 更新了他們的身份驗證,因為教程中使用的許多方法不再存在。
萬一其他人遇到這個問題,這是因為在開發 Flutter 應用程序時,Android Studio 提示新版本的 Flutter 可用,我點擊升級。 但是需要在終端中執行手動 flutter 升級並將 Kotlin 升級到最新版本。
我為解決此問題而采取的步驟:
更新了以下文件:
項目文件夾/android/gradle/gradle-wrapper.properties 。 將distributionUrl設置為最新的gradle,“distributionUrl=https://services.gradle.org/distributions/gradle-5.4.1-all.zip”。 Android Studio 通知使用最新的 gradle 並說明在哪里進行更改。
將這兩行添加到 project_folder/android/gradle.properties:
android.useAndroidX=true android.enableJetifier=true
然后 go 到 Refactor > Migrate to AndroidX。 等待完成,然后在終端中運行底部命令。
在終端 (Mac OS) 中運行的命令:
那是為我做的。 現在當我跑
await FirebaseAuth.instance
.signInWithCredential(credential).then((authResult){
print(authResult.user);})
我得到一個 AuthResult object 返回,其中包含 FireBaseUser object。 這是 output:
FirebaseUser({uid: yZXXXXXXXXXXXX, isAnonymous: false, phoneNumber: +18005558989, ...})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.