适用于Xamarin Forms的Xamarin Firebase PhoneAuth

问题描述 投票:0回答:1

我需要创建一个具有Firebase Phone Auth的Xamarin Forms应用程序。有一个Xamarin Firebase身份验证包,带有电话验证,但没有Xamarin Forms的文档。

到目前为止,对于Android,我有:

public class FirebaseAuthenticator : IFirebaseAuthenticator
    {
        public async Task<string> RegisterWithPhoneNumber(string number)
        {
            PhoneAuthCallbacks phoneAuthCallbacks = new PhoneAuthCallbacks();
            var user = await PhoneAuthProvider.Instance.VerifyPhoneNumber(number, 60, TimeUnit.Seconds, this, phoneAuthCallbacks);
            return user;
        }
    }

我的PhoneAuthCallbacks类:

public class PhoneAuthCallbacks : PhoneAuthProvider.OnVerificationStateChangedCallbacks
    {
        public override void OnVerificationCompleted(PhoneAuthCredential credential)
        {
            // This callback will be invoked in two situations:
            // 1 - Instant verification. In some cases the phone number can be instantly
            //     verified without needing to send or enter a verification code.
            // 2 - Auto-retrieval. On some devices Google Play services can automatically
            //     detect the incoming verification SMS and perform verification without
            //     user action.        
            FirebaseAuth.Instance.SignInWithCredential(credential);
            System.Diagnostics.Debug.WriteLine("onVerificationCompleted");
        }

        public override void OnVerificationFailed(FirebaseException exception)
        {
            // This callback is invoked in an invalid request for verification is made,
            // for instance if the the phone number format is not valid.
            System.Diagnostics.Debug.WriteLine("onVerificationFailed: " + exception);
        }

        public override void OnCodeSent(string verificationId, PhoneAuthProvider.ForceResendingToken forceResendingToken)
        {
            // The SMS verification code has been sent to the provided phone number, we
            // now need to ask the user to enter the code and then construct a credential
            // by combining the code with a verification ID.
            base.OnCodeSent(verificationId, forceResendingToken);
            System.Diagnostics.Debug.WriteLine("onCodeSent" + verificationId);
        }
    }

但它不起作用。在RegisterWithPhoneNumber中,'this'给出错误“无法从xx.Droid.FirebaseAuthenticator转换为Android.App.Activity”

android firebase xamarin xamarin.forms firebase-authentication
1个回答
0
投票

由于您的FirebaseAuthenticator不是Activity中固有的,因此您无法在调用函数中使用它。您可以将Main Activity保存为静态变量,并在依赖服务中使用。添加了以下代码

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    internal static Activity CurrentActivityRef { get; private set; }

    protected override void OnCreate(Bundle savedInstanceState)
    {
        TabLayoutResource = Resource.Layout.Tabbar;
        ToolbarResource = Resource.Layout.Toolbar;

        base.OnCreate(savedInstanceState);

        Xamarin.Essentials.Platform.Init(this, savedInstanceState);
        global::Xamarin.Forms.Forms.Init(this, savedInstanceState);

        var fapp = FirebaseApp.InitializeApp(this);

        LoadApplication(new App());
        CurrentActivityRef = this;

    }

}

并在您的依赖服务实现中

public class FirebaseAuthenticator: IFirebaseAuthenticator
{

    public void RegisterOrLoginWithMobileNumber(string MobileNumber)
    {

        Activity activity = MainActivity.CurrentActivityRef;
        PhoneAuthCredentialCallBack callBack = new PhoneAuthCredentialCallBack();
        PhoneAuthProvider.Instance.VerifyPhoneNumber(MobileNumber,
                                                                  60,
                                                                  TimeUnit.Seconds,
                                                                  activity, callBack
                                                                  );

    }
}
© www.soinside.com 2019 - 2024. All rights reserved.