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 与请求的项目不匹配