簡體   English   中英

FirebaseAuth.signInWithCredential 導致我的 Flutter 應用程序在我調用它時崩潰

[英]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 升級到最新版本。

我為解決此問題而采取的步驟:

更新了以下文件:

  1. 項目文件夾/android/build.gradle 將“ext.kotlin_version = '1.2.71'”更改為“ext.kotlin_version='1.3.50'”
  2. 項目文件夾/android/gradle/gradle-wrapper.properties 將distributionUrl設置為最新的gradle,“distributionUrl=https://services.gradle.org/distributions/gradle-5.4.1-all.zip”。 Android Studio 通知使用最新的 gradle 並說明在哪里進行更改。

  3. 將這兩行添加到 project_folder/android/gradle.properties:

     android.useAndroidX=true android.enableJetifier=true

然后 go 到 Refactor > Migrate to AndroidX。 等待完成,然后在終端中運行底部命令。

在終端 (Mac OS) 中運行的命令:

  1. $ flutter升級
  2. $ flutter 酒館升級
  3. $ flutter 清潔

那是為我做的。 現在當我跑

    await FirebaseAuth.instance
    .signInWithCredential(credential).then((authResult){
      print(authResult.user);})

我得到一個 AuthResult object 返回,其中包含 FireBaseUser object。 這是 output:

FirebaseUser({uid: yZXXXXXXXXXXXX, isAnonymous: false, phoneNumber: +18005558989, ...})
  • 在 Flutter 項目上打開 Android Studio
  • 然后,更新所有 gradle 和 kotlin 並遷移 kotlin
  • 然后,遷移到 Android X
  • 然后,打開Flutter項目
  • Flutter升級
  • Flutter pub升級
  • Flutter 清潔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM