代码之家  ›  专栏  ›  技术社区  ›  fida1989

Firebase Phone Auth(flutt)在某些iOS设备中不起作用

  •  0
  • fida1989  · 技术社区  · 5 年前

    我使用firebase phone auth在flutter应用程序中实现了电话号码身份验证。它在安卓系统中运行良好。但它在iOS中无法正常工作,因为许多用户在提交短信验证代码后面临错误,尽管许多其他用户使用该应用程序非常好。出现这种情况的可能原因是什么?我已经提交了下面的代码。

    数字提交

    void _verifyPhoneNumber() async {
    
    final PhoneVerificationCompleted verificationCompleted =
        (AuthCredential phoneAuthCredential) async {
    
      final FirebaseUser user =
          await _auth.signInWithCredential(phoneAuthCredential);
    
      if (user != null) {
        phone = user.phoneNumber;
        fid = user.uid;
        saveLogin(context);
      } else {
        _showErrorDialog("User Verification Error!");
      }
    };
    
    final PhoneVerificationFailed verificationFailed =
        (AuthException authException) {
      _showErrorDialog("Phone Verification Failed");
    };
    
    final PhoneCodeSent codeSent =
        (String verificationId, [int forceResendingToken]) async {
      _verificationId = verificationId;
      setState(() {
        _title = "Verify SMS Code";
        phoneInput = false;
        phoneSubmit = false;
        codeInput = true;
        codeSubmit = true;
      });
    };
    
    final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
        (String verificationId) async {
      _verificationId = verificationId;
      setState(() {
        _title = "Verify SMS Code";
        phoneInput = false;
        phoneSubmit = false;
        codeInput = true;
        codeSubmit = true;
      });
    };
    
    await _auth.verifyPhoneNumber(
        phoneNumber: "+880" + _mobileNumber,
        timeout: const Duration(seconds: 5),
        verificationCompleted: verificationCompleted,
        verificationFailed: verificationFailed,
        codeSent: codeSent,
        codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
      }
    

    代码提交

    void _signInWithPhoneNumber(String _code) async {
    
    final AuthCredential credential = PhoneAuthProvider.getCredential(
      verificationId: _verificationId,
      smsCode: _code,
    );
    final FirebaseUser user = await _auth.signInWithCredential(credential);
    if (user != null) {
      phone = user.phoneNumber;
      fid = user.uid;
      saveLogin(context);
    } else {
      _showErrorDialog("User Verification Error!");
    }
      }
    

    使用的插件

    谷歌登录:^4.0.1+3

    firebase认证:^0.11.0

    0 回复  |  直到 5 年前
        1
  •  0
  •   KhemUM    5 年前

    尝试将REVERSE_CLIENT_ID自定义URL方案添加到Xcode项目中。

    根据firebase文档:

    iOS安装注意:应用验证可能使用APN,如果使用模拟器(APN不工作)或APN未在您使用的设备上安装,则必须从GoogleServices-Info.plist文件中将URL方案设置为反向客户机ID。

    如何将自定义URL方案添加到Xcode项目中:

    1. 打开项目配置:在左树状图中双击项目名称。从“目标”部分选择应用程序,然后选择“信息”选项卡,然后展开“URL类型”部分。
    2. 单击+按钮,并为反向客户端ID添加URL方案。若要查找此值,请打开GoogleService-Info.plist配置文件,并查找反向的客户端ID密钥。复制该键的值,并将其粘贴到“配置”页上的“URL方案”框中。其他字段留空。

    此处引用:

    https://pub.dev/packages/firebase_auth

    https://firebase.google.com/docs/auth/ios/phone-auth