Я реализовал телефонную аутентификацию Firebase в своем приложении Flutter. Но каждый раз, когда я отправляю вызов метода initAuth
, я получаю code sent
на моей консоли, а затем через 60 секунд timed out
. Я понимаю, что это просто исходит из моего кода, но я ожидал SMS или автоматического входа в систему. Кажется, я никогда не вызываю метод verificationCompleted
.
Ниже мой код:
import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/material.dart';
class PhoneVerification{
initAuth({BuildContext context, String phoneNumber}) async{
print(phoneNumber);
var firebaseAuth = FirebaseAuth.instance;
await firebaseAuth.verifyPhoneNumber(
phoneNumber: phoneNumber,
timeout: Duration(seconds: 60),
codeSent:(String verificationId, [int forceResendingToken]){
print("Code Sent");
},
codeAutoRetrievalTimeout: (String verificationId){
print("Timed out");
},
verificationCompleted: (AuthCredential auth) async {
print("This User is authenticated by google play services");
firebaseAuth.signInWithCredential(auth)
.then((AuthResult result) =>{
if(result != null && result.user != null){
print("Authentication is Successful")
}else{
print("Authentication failed!")
}
})
.catchError((error){
print(error);
});
},
verificationFailed: (AuthException authException){
print('Error message: ' + authException.message);
},
);
}
}
Это метод, который я написал для вызова метода initAuth
:
Future<void> sendSMS({context}) async{
User user = Provider.of<UserProvider>(context, listen: false).user;
PhoneVerification phoneVerification = PhoneVerification();
await phoneVerification.initAuth(context: context, phoneNumber: user.phone);
}
Затем, наконец, я выполняю фактический вызов onPress кнопки в компоненте. Ниже показано, как я вызвал метод sendSMS
.
EnterPhone(onPress: ()=> sendSMS(context: context)),