【问题标题】:Flutter phone Number authenticationFlutter 电话号码认证
【发布时间】:2018-08-31 00:35:42
【问题描述】:

我正在尝试使用以下链接中 Here 中的 Jayesh Chawla 的电话号码对用户进行身份验证 它怎么对我不起作用。 这是我处理电话身份验证的功能

     signUpUserPN()async{
      final PhoneVerificationCompleted verificationCompleted = (FirebaseUser user){
        setState(() {
                      message = Future<String>.value("auto sign in succedded $user");
                      print("Sign up succedded");
                      _pref.setString("phonkey",user.phoneNumber.toString());
                      //MyNavigator.goToDetail(context);
//called when the otp is variefied automatically
                    });
      };
  final PhoneVerificationFailed verificationFailed = (AuthException authException){
    setState(() {
                  message = Future<String>.value("verification failed code: ${authException.code}. Message: ${authException.message}");
                });
  };

  final PhoneCodeSent codeSent =(String dverificationId,[int forceResendingToken]) async {
    my1verificationId= dverificationId;
 };

  final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout = (String dverificationId){
    my1verificationId = dverificationId;
  };

  await _auth.verifyPhoneNumber(
    phoneNumber: '+233557340556',
    timeout: Duration(seconds: 60),
    verificationCompleted: verificationCompleted,
    verificationFailed: verificationFailed,
    codeSent: codeSent,
    codeAutoRetrievalTimeout: codeAutoRetrievalTimeout
    );
print("$message");
print("$my1verificationId");
}

【问题讨论】:

  • 运行此代码时什么不起作用?编译的时候有错误吗?它不发送通知吗?如果是这样,您是否在调试器中单步执行?

标签: firebase dart firebase-authentication flutter


【解决方案1】:

我创建了一个实用程序类来验证具有电话号码的用户。在使用它之前,请确保您已在 Android 和 Ios 中将 Firebase 设置为 firebase 声明 here 并且您已从 Firebase 项目面板启用电话号码身份验证。查看下面的 util 类:

import 'dart:async';

import 'package:firebase_auth/firebase_auth.dart';
import 'package:flutter/services.dart';
import 'package:flutter_firebase/network/networ_util.dart';

class FirebasePhoneUtil {
  static final FirebasePhoneUtil _instance = new FirebasePhoneUtil.internal();

  FirebasePhoneUtil.internal();

  factory FirebasePhoneUtil() {
    return _instance;
  }

  FirebaseAuthListener _view;

  final FirebaseAuth _auth = FirebaseAuth.instance;
  var api = new NetworkUtil();

  String verificationId;

  setScreenListener(FirebaseAuthListener view) {
    _view = view;
  }

//  FirebasePhoneUtil(this._view);

  Future<void> verifyPhoneNumber(String phoneNumber, String code) async {
    final PhoneVerificationCompleted verificationCompleted =
        (FirebaseUser user) {};

    final PhoneVerificationFailed verificationFailed =
        (AuthException authException) {};

    final PhoneCodeSent codeSent =
        (String verificationId, [int forceResendingToken]) async {
      this.verificationId = verificationId;
      _view.verificationCodeSent(forceResendingToken);
    };

    final PhoneCodeAutoRetrievalTimeout codeAutoRetrievalTimeout =
        (String verificationId) {};

    await _auth.verifyPhoneNumber(
        phoneNumber: code + phoneNumber,
        timeout: const Duration(seconds: 5),
        verificationCompleted: verificationCompleted,
        verificationFailed: verificationFailed,
        codeSent: codeSent,
        codeAutoRetrievalTimeout: codeAutoRetrievalTimeout);
  }

  verifyOtp(String smsCode) async {
    final FirebaseUser user = await _auth
        .signInWithPhoneNumber(
          verificationId: verificationId,
          smsCode: smsCode,
        )
        .then((FirebaseUser res) {
      identical("", "");
    })
        .catchError(
            (PlatformException error) => onTokenError(error.toString()));
  }
}

onTokenError(String string) {
  print("ssss");
}

abstract class FirebaseAuthListener {
  verificationCodeSent(int forceResendingToken);
}

【讨论】:

  • 当我尝试上面的代码时,我在控制台W/BiChannelGoogleApi(20225): [FirebaseAuth: ] getGoogleApiForMethod() returned Gms: com.google.firebase.auth.api.internal.zzal@5669c1e E/flutter (20225): [ERROR:topaz/lib/tonic/logging/dart_error.cc(16)] Unhandled exception: E/flutter (20225): NoSuchMethodError: The method 'verificationCodeSent' was called on null. E/flutter (20225): Receiver: null E/flutter (20225): Tried calling: verificationCodeSent(153923936) 收到了这个错误
猜你喜欢
  • 2020-11-22
  • 2018-06-30
  • 2017-11-06
  • 2019-08-29
  • 2018-10-17
  • 2023-04-07
  • 2020-09-17
  • 2021-06-11
  • 1970-01-01
相关资源
最近更新 更多