![](/img/trans.png)
[英]Android application works fine in emulator but not in real device?
[英]Flutter Phone authentication works fine on emulator but not working on real device (Android)
下面是我的电话验证码。 在真实设备上,当我在将电话号码发送到Auth.verifyPhoneNumber()
function 后运行我的应用程序时,它会在 2 秒内崩溃。 但它在模拟器上运行良好。 我不知道代码中会发生什么,请帮助我。 抱歉英语不好,我不是母语人士。
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutterphoneauth/datamodel/datamodel.dart';
import 'package:toast/toast.dart';
class AuthService {
String _phoneNumber;
String _verificationId;
String _smsCode;
String _message;
final FirebaseAuth _auth = FirebaseAuth.instance;
String get phoneNumber1 => _phoneNumber;
String get verificationId => _verificationId;
String get smsCode => _smsCode;
String get message => _message;
Future<void> verifyPhoneNumber(
String phoneNumber, BuildContext context) async {
Toast.show("Run", context);
try {
PhoneVerificationCompleted verificationCompleted =
(PhoneAuthCredential phoneAuthCredential) async {
Toast.show("verification done", context);
// UserCredential _userCredential =
// await _auth.signInWithCredential(phoneAuthCredential);
};
PhoneVerificationFailed verificationFailed =
(FirebaseAuthException authException) async {
print('Auth Exception Occured');
// throw Exception(authException.message);
// _message =
// 'Phone number verification failed. Code: ${authException.code}. Message: ${authException.message}';
};
PhoneCodeSent codeSent =
(String verificationId, [int forceResendingToken]) async {
print('SMS Sent');
_verificationId = verificationId;
};
PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
(String verificationId) async {
print('SMS Auto Retrieval Timeout');
_verificationId = verificationId;
};
await _auth.verifyPhoneNumber(
phoneNumber: "+92$phoneNumber",
timeout: const Duration(seconds: 5),
verificationCompleted: verificationCompleted,
verificationFailed: verificationFailed,
codeSent: codeSent,
codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
} catch (e) {
database.msgError = e.toString();
}
}
// Example code of how to sign in with the phone.
Future signInWithPhoneNumber(String smsCode) async {
final AuthCredential credential = PhoneAuthProvider.credential(
verificationId: _verificationId,
smsCode: smsCode,
);
return (await _auth.signInWithCredential(credential)).user;
}
}
我找到了一个解决方案,你可以说原因实际上我尝试在同一个号码上一次又一次地发送代码,这是 firebase 一次又一次地不在我的真实设备上发送代码的原因。 您可以在官方文档中查看更多关于安全规则的信息
https://firebase.google.com/docs/auth/android/phone-auth#security-concerns
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.