Flutter-Firebase phone Auth 总是在 iOS 上返回 Token mismatch

Posted

技术标签:

【中文标题】Flutter-Firebase phone Auth 总是在 iOS 上返回 Token mismatch【英文标题】:Flutter-Firebase phone Auth always returns Token mismatch on iOS 【发布时间】:2019-12-15 04:22:23 【问题描述】:

我正在尝试使用手机身份验证,它在 android 上按预期工作,但在 ios 上,我总是得到令牌不匹配并且没有收到代码。

其他 Firebase 服务(如云 Firestore 和电子邮件身份验证)在 iOS 上运行良好。

我确定了以下几点:

-在 Firebase 中添加 APN 密钥

-Google 服务文件已更新

-后台模式和推送通知功能已开启

错误信息来自 PhoneVerificationFailed

Future<void> _verifyPhoneNumber() async 

    setState(() 
      _message = '';
    );

    final PhoneVerificationCompleted verificationCompleted =
        (AuthCredential phoneAuthCredential) async 

      await _auth.signInWithCredential(phoneAuthCredential);

      setState(() 
        _message = 'Received phone auth credential: $phoneAuthCredential';

      );

    ;

    final PhoneVerificationFailed verificationFailed =
        (AuthException authException) 
      setState(() 
        _message = '********************\n\n'
            'Phone number verification failed. Code: $authException.code.'
            '\n Message: $authException.message'
            '\n\n********************';
      );
    ;

    final PhoneCodeSent codeSent =
        (String verificationId, [int forceResendingToken]) async 
      _verificationId = verificationId;

      setState(() 
        _message = 'waiting for code';
        //waitingCode = true;
      );
    ;

    final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
        (String verificationId) 
      _verificationId = verificationId;
    ;

    try 
      await _auth.verifyPhoneNumber(
          phoneNumber: number,
          timeout: const Duration(seconds: 30),
          verificationCompleted: verificationCompleted,
          verificationFailed: verificationFailed,
          codeSent: codeSent,
          codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
     catch (e) 
      print('Error is $e');
    
  

我从日志中收到这些消息

Userinfo 
    "com.google.firebase.auth" =     
        warning = "This fake notification should be forwarded to Firebase Auth.";
    ;

UserDate : 
    "com.google.firebase.auth" =     
        warning = "This fake notification should be forwarded to Firebase Auth.";
    ;

UserDate Json : 
  "com.google.firebase.auth" : 
    "warning" : "This fake notification should be forwarded to Firebase Auth."
  

flutter: 


TRUE
flutter: Call Back 
  "com.google.firebase.auth" : 
    "warning" : "This fake notification should be forwarded to Firebase Auth."
  

【问题讨论】:

你能把错误信息的文字贴出来吗? @ShadyBoshra 是的,verifyPhoneNumberError 和令牌不匹配 你还有这个问题吗? 【参考方案1】:

我知道现在回答这个问题为时已晚。但我最近也遇到了同样的错误。我在 iOS 上解决了这个问题。您的整个配置必须有效。您需要进行两项设置。

从 GoogleService-info.plist 中删除任何方法调配变量 即从 plist 中删除 FirebaseAppDelegateProxyEnabled 属性

在 AppDelegate.swift 中,重写此方法并设置以下内容

func 应用程序(应用程序:UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) Messaging.messaging().apnsToken = deviceToken

在https://firebase.google.com/docs/cloud-messaging/ios/client#token-swizzle-disabled提到过

我正在使用firebase_messaging: ^6.0.16 并且上述设置有效

【讨论】:

【参考方案2】:

将 Firebase 身份验证版本从 0.14.0 更改为

  firebase_auth:
    git:
      url: https://github.com/collinjackson/plugins.git
      ref: 441417c2fed0ff26bf84a49ab2c5ffd2aa5487de
      path: packages/firebase_auth

解决了我的问题。 详情请见https://github.com/flutter/flutter/issues/35267

【讨论】:

以上是关于Flutter-Firebase phone Auth 总是在 iOS 上返回 Token mismatch的主要内容,如果未能解决你的问题,请参考以下文章

Flutter-Firebase Messaging Snackbar未显示

React Native Phone Oauth:App ID 与请求的项目不匹配

在电子邮件密码身份验证中进行额外的自定义检查 (Flutter - Firebase)

将1D阵列添加到现有2D阵列

au-au记录

au-au记录