未处理的异常:[firebase_auth/unknown] null:使用颤振/firebase 进行电话身份验证时出错

Posted

技术标签:

【中文标题】未处理的异常:[firebase_auth/unknown] null:使用颤振/firebase 进行电话身份验证时出错【英文标题】:Unhandled Exception: [firebase_auth/unknown] null: Error in Phone Authentication using flutter/firebase 【发布时间】:2021-08-23 07:00:29 【问题描述】:

我已将此链接用作教程:https://firebase.flutter.dev/docs/auth/phone/ 但不知何故,当我按下按钮时,我得到了这个错误:

[ERROR:flutter/lib/ui/ui_dart_state.cc(186)] Unhandled Exception: [firebase_auth/unknown] null
E/flutter ( 6765): #0      MethodChannelFirebaseAuth.verifyPhoneNumber (package:firebase_auth_platform_interface/src/method_channel/method_channel_firebase_auth.dart:583:7)
E/flutter ( 6765): <asynchronous suspension>
E/flutter ( 6765): #1      _OTPScreenState._verifyMyPhoneNumber (package:food_delivery_app/UIForAllCategory/PhoneAuth/OTPScreen.dart:41:5)
E/flutter ( 6765): <asynchronous suspension>
E/flutter ( 6765): 
D/ViewRootImpl[Toast]( 6765): hardware acceleration = true , fakeHwAccelerated = false, sRendererDisabled = false, forceHwAccelerated = false, sSystemRendererDisabled = false

我已在 Firebase 中启用电话身份验证,并重新下载了 GoogleServices 文件,但始终遇到此错误。 这是按下按钮时运行的第一个函数:

  _verifyMyPhoneNumber() async 
    //This handler will only be called on android devices which support automatic SMS code resolution.
    await FirebaseAuth.instance.verifyPhoneNumber(
        phoneNumber: '+92$this.widget.phoneNumber',
        verificationCompleted: (PhoneAuthCredential credential) async 
          await FirebaseAuth.instance
              .signInWithCredential(credential)
              .then((value) async 
            if (value.user != null) 
              //Change state and move to next Screen
              setState(() 
                this.widget.inProgress=false;
              );
              String myNumber=this.widget.phoneNumber;
              debugPrint("My number= $myNumber");
              prefs.setString("phone", "0$myNumber");

              //Getting values from preferences
              String number= prefs.getString("phone");
              String email=  prefs.getString("email");
              String username=  prefs.getString("username");
              String uid= prefs.getString("Gid");
              debugPrint("Details: $number, $email, $username,$uid");
              Navigator.push(
                context,
                MaterialPageRoute(
                    builder: (context) => EnteryPoint()),
              );
            
          );
        ,


        //In case, if Some error occured at Firebase then
        verificationFailed: (FirebaseAuthException e) 

          //Change state and Go back with a prompt
          setState(() 
            this.widget.inProgress=false;
          );
          Fluttertoast.showToast(
              msg: "Error: $e",
              toastLength: Toast.LENGTH_SHORT,
              gravity: ToastGravity.CENTER,
              timeInSecForiosWeb: 2,
              backgroundColor: Colors.black87,
              textColor: Colors.white,
              fontSize: 12.0);
          Navigator.of(context).pop(); //Go back to previious screen
        ,


        codeSent: (String verficationID, int resendToken) 
          debugPrint("Code is sent from Server, Soon you will recieve it");
          //Change state and Let user to enter the code when received
          setState(() 
            this.widget.inProgress=false;
          );
          Fluttertoast.showToast(
              msg: "Please wait, You will soon receive the code!",
              toastLength: Toast.LENGTH_SHORT,
              gravity: ToastGravity.CENTER,
              timeInSecForIosWeb: 2,
              backgroundColor: Colors.black87,
              textColor: Colors.white,
              fontSize: 12.0);
          setState(() 
            _verificationCode = verficationID;
          );
        ,
        codeAutoRetrievalTimeout: (String verificationID) 
          debugPrint("This device has not automatically resolved an SMS message within a certain Timeframe");
          setState(() 
            _verificationCode = verificationID;
          );
        ,
        timeout: Duration(seconds: 60));
  

请帮忙!

【问题讨论】:

【参考方案1】:

检查您是否在程序开始时有一个 firebaseapp 实例(主函数)。 使用 await Firebase.initializeApp() 创建实例;

您的例外是“firebase_auth 的实例为空”,并且 Firebase 身份验证在没有 firebaseapp 的情况下无法工作。 未处理的异常:[firebase_auth/unknown] null

【讨论】:

我已经使用了 initFirebase() 函数,它会在启动画面的 initState 函数中自动运行。我认为情况并非如此,因为在获取 firebase 身份验证之前,我也尝试将 await Firebase.initializeApp() 放入 _verifyPhoneNumber 函数中。 你确定 Firebase 对象已经初始化了吗,我知道 await 会让 firebase.initialiseapp 同步。我有一个类似的问题,原来是因为应用程序在初始化之前启动并使用了 firebase 核心,所以尝试在你的 main 中初始化 firebaseapp。 我很确定。但是,我没有做的是从我的物理设备上关闭并卸载该应用程序,然后重新下载 google-services 文件并将其替换为我以前的文件。然后我运行了flutter clean并重建了项目。一切正常。不过感谢您的合作。【参考方案2】:
FirebaseAuth auth=FirebaseAuth.instance;
auth.userChanges();
auth.instance.verifyPhoneNumber(
//code`enter code here`
);

如果您尝试从一台设备进行多次登录

【讨论】:

【参考方案3】:

Firebase 有身份验证尝试限制。一天后再试。

【讨论】:

以上是关于未处理的异常:[firebase_auth/unknown] null:使用颤振/firebase 进行电话身份验证时出错的主要内容,如果未能解决你的问题,请参考以下文章

SQL 异常未处理 - System.Data.dll 中出现“System.Data.SqlClient.SqlException”类型的未处理异常

如何生成未处理的 MFC 异常?

Elasticsearch未分配分片异常处理

在 mvc 中处理请求时发生未处理的异常

捕获未处理的异常

如何在未处理的任务异常上崩溃?