繁体   English   中英

Flutter 电话身份验证在模拟器上工作正常,但在真实设备上不工作(Android)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM