【发布时间】:2019-08-23 05:42:17
【问题描述】:
我正在尝试使用 Firebase 为我的 Android 应用设置电话号码身份验证。我在 Firebase 控制台的“身份验证”选项卡上启用了电话身份验证,并添加了我的号码进行测试。我尝试了多个号码,但尽管控制台告诉我 PhoneCodeSent 函数已触发并显示成功消息,但我没有收到任何短信。我已经尝试修复它一段时间,但似乎无法找到可靠的答案。我的代码有什么问题?
我的代码如下
...
...
...
String verificationId;
int resendingToken;
Future<void> _sendConfirmationCode() async {
if (formKey.currentState.validate()) {
formKey.currentState.save();
final PhoneVerificationCompleted verificationCompleted = (FirebaseUser user) {
setState(() {
print('verification has been completed');
});
};
final PhoneVerificationFailed verificationFailed = (AuthException authException) {
setState(() {
print(countrySelected);
print(this.phone + "\n");
print('verification failed error: ' + authException.message);}
);
};
final PhoneCodeSent codeSent = (String verificationId, [int forceResendingToken]) async {
this.verificationId = await verificationId;
this.resendingToken = await forceResendingToken;
print("code sent: "+ verificationId);
};
final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
(String verificationId) {
this.verificationId = verificationId;
print("time out");
};
if (this.phone.isNotEmpty) {
await FirebaseAuth.instance.verifyPhoneNumber(
phoneNumber: "<PHONE NUMBER HARDCODED HERE>", //I've tried hardcoding my number too but it didn't work
timeout: const Duration(seconds: 5),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
forceResendingToken: resendingToken,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
}
}
}
以下内容被打印到控制台:
I/flutter (32425): code sent: AM5PThC4JnFK7czWDoAdqSFjBdDk5oq9VwufNvWxgcOg4fEgbHE8CoYGuWMCjzTnfPbOlpcdfefouwL86dsD5fQs73CcR3NgvI2SRqHEHgM0n34yqqJma75ZCvPGMeTmwy6XDCA9-P0p
I/flutter (32425): time out
我也尝试过等待几个小时,以防达到 Firebase 的 SMS 限制,但这似乎不是问题。有什么想法吗?
【问题讨论】:
-
你的号码格式有效吗?
-
您是否在号码前添加了国家代码
-
@MuhaiminurRahman 是的,我已经添加了国家代码,我已经检查了所有内容的三倍,我已经尝试对电话号码进行硬编码,并且正在触发 PhoneCodeSent 回调。我什至尝试对格式错误的数字进行硬编码,以查看它是否仍会触发回调,但出现错误,因此这不是格式问题。我还尝试了这个演示fir-ui-demo-84a6c.firebaseapp.com,看看我的电话运营商是否有问题,但它工作得很好。我仍然坚持这一点。
-
你试过增加
timeout吗?类似const Duration(seconds: 60) -
您可以检查从 Firebase 删除用户like this
标签: android firebase dart flutter firebase-authentication