Firebase PhoneAuth for Xamarin Android



即使经过广泛的研究,我也无法找到任何适用于Xamarin Android的Firebase PhoneAuth的实现,我已经尝试了与我类似的其他问题的答案,但这些只是C#端口的方法,但并不真正起作用。我已经尝试过,但在调用VerifyPhoneNumber时最终出现NullPointerException。

登录活动.cs

...
void VerifyNumber(string mobile_no)
{
PhoneAuthCallbacks phoneAuthCallbacks = new PhoneAuthCallbacks();
PhoneAuthProvider.Instance.VerifyPhoneNumber(mobile_no, 60, Java.Util.Concurrent.TimeUnit.Seconds, this, phoneAuthCallbacks);
}
public class PhoneAuthCallbacks : PhoneAuthProvider.OnVerificationStateChangedCallbacks
{
public override void OnVerificationCompleted(PhoneAuthCredential credential)
{
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);
}
}

调试日志

10-05 16:35:45.265 D/Mono    (19093): Loading reference 8 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Delivery_DemoApp.dll asmctx DEFAULT, looking for Xamarin.Firebase.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.265 D/Mono    (19093): Assembly Ref addref Delivery_DemoApp[0xa7179160] -> Xamarin.Firebase.Common[0xa7177e40]: 2
10-05 16:35:45.265 D/Mono    (19093): Loading reference 1 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Common.dll asmctx DEFAULT, looking for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.265 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Common[0xa7177e40] -> Mono.Android[0xa7178620]: 12
10-05 16:35:45.265 D/Mono    (19093): Loading reference 9 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Delivery_DemoApp.dll asmctx DEFAULT, looking for Xamarin.Firebase.Auth, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.265 D/Mono    (19093): Assembly Ref addref Delivery_DemoApp[0xa7179160] -> Xamarin.Firebase.Auth[0xa7177d80]: 2
10-05 16:35:45.266 D/Mono    (19093): Loading reference 1 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> Mono.Android[0xa7178620]: 13
10-05 16:35:45.266 D/Mono    (19093): Loading reference 2 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for Xamarin.Firebase.Auth.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> Xamarin.Firebase.Auth.Interop[0xa7177de0]: 2
10-05 16:35:45.266 D/Mono    (19093): Loading reference 2 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.Interop.dll asmctx DEFAULT, looking for Xamarin.Firebase.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth.Interop[0xa7177de0] -> Xamarin.Firebase.Common[0xa7177e40]: 3
10-05 16:35:45.266 D/Mono    (19093): Loading reference 0 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Common.dll asmctx DEFAULT, looking for mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Common[0xa7177e40] -> mscorlib[0xa83b5220]: 15
10-05 16:35:45.266 D/Mono    (19093): Loading reference 1 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.Interop.dll asmctx DEFAULT, looking for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth.Interop[0xa7177de0] -> Mono.Android[0xa7178620]: 14
10-05 16:35:45.266 D/Mono    (19093): Loading reference 0 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.Interop.dll asmctx DEFAULT, looking for mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth.Interop[0xa7177de0] -> mscorlib[0xa83b5220]: 16
10-05 16:35:45.266 D/Mono    (19093): Loading reference 3 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for Xamarin.Firebase.Common, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.266 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> Xamarin.Firebase.Common[0xa7177e40]: 4
10-05 16:35:45.266 D/Mono    (19093): Loading reference 0 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
10-05 16:35:45.267 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> mscorlib[0xa83b5220]: 17
10-05 16:35:45.271 D/Mono    (19093): Loading reference 4 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.271 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> Java.Interop[0xa7178680]: 6
10-05 16:35:45.271 D/Mono    (19093): Loading reference 10 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Delivery_DemoApp.dll asmctx DEFAULT, looking for Xamarin.GooglePlayServices.Basement, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.272 D/Mono    (19093): Assembly Ref addref Delivery_DemoApp[0xa7179160] -> Xamarin.GooglePlayServices.Basement[0xa7178140]: 2
10-05 16:35:45.272 D/Mono    (19093): Loading reference 1 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.GooglePlayServices.Basement.dll asmctx DEFAULT, looking for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.272 D/Mono    (19093): Assembly Ref addref Xamarin.GooglePlayServices.Basement[0xa7178140] -> Mono.Android[0xa7178620]: 15
10-05 16:35:45.272 D/Mono    (19093): Loading reference 6 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for Xamarin.GooglePlayServices.Basement, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.272 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> Xamarin.GooglePlayServices.Basement[0xa7178140]: 3
10-05 16:35:45.273 D/Mono    (19093): Loading reference 0 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.GooglePlayServices.Basement.dll asmctx DEFAULT, looking for mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e
10-05 16:35:45.273 D/Mono    (19093): Assembly Ref addref Xamarin.GooglePlayServices.Basement[0xa7178140] -> mscorlib[0xa83b5220]: 18
10-05 16:35:45.330 D/Mono    (19093): Loading reference 2 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Common.dll asmctx DEFAULT, looking for Java.Interop, Version=0.1.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.330 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Common[0xa7177e40] -> Java.Interop[0xa7178680]: 7
10-05 16:35:45.383 D/FirebaseApp(19093): com.google.firebase.iid.FirebaseInstanceId is not linked. Skipping initialization.
10-05 16:35:45.384 D/FirebaseApp(19093): com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
10-05 16:35:45.385 D/FirebaseApp(19093): com.google.android.gms.measurement.AppMeasurement is not linked. Skipping initialization.
10-05 16:35:45.404 D/Mono    (19093): Loading reference 5 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.dll asmctx DEFAULT, looking for Xamarin.GooglePlayServices.Tasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.405 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth[0xa7177d80] -> Xamarin.GooglePlayServices.Tasks[0xa7178200]: 2
10-05 16:35:45.405 D/Mono    (19093): Loading reference 1 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.GooglePlayServices.Tasks.dll asmctx DEFAULT, looking for Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=84e04ff9cfb79065
10-05 16:35:45.405 D/Mono    (19093): Assembly Ref addref Xamarin.GooglePlayServices.Tasks[0xa7178200] -> Mono.Android[0xa7178620]: 16
10-05 16:35:45.405 D/Mono    (19093): Loading reference 4 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Auth.Interop.dll asmctx DEFAULT, looking for Xamarin.GooglePlayServices.Tasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.405 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Auth.Interop[0xa7177de0] -> Xamarin.GooglePlayServices.Tasks[0xa7178200]: 3
10-05 16:35:45.405 D/Mono    (19093): Loading reference 3 of /storage/emulated/0/Android/data/com.companyname.App1/files/.__override__/Xamarin.Firebase.Common.dll asmctx DEFAULT, looking for Xamarin.GooglePlayServices.Tasks, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
10-05 16:35:45.405 D/Mono    (19093): Assembly Ref addref Xamarin.Firebase.Common[0xa7177e40] -> Xamarin.GooglePlayServices.Tasks[0xa7178200]: 4
Unhandled Exception: Java.Lang.NullPointerException: <Timeout exceeded getting exception details>

堆栈跟踪

>Java.Lang.NullPointerException: Attempt to invoke virtual method 'void com.google.firebase.auth.FirebaseAuth.zza(java.lang.String, long, java.util.concurrent.TimeUnit, com.google.firebase.auth.PhoneAuthProvider$OnVerificationStateChangedCallbacks, android.app.Activity, java.util.concurrent.Executor, boolean)' on a null object reference
at Java.Interop.JniEnvironment+InstanceMethods.CallVoidMethod (Java.Interop.JniObjectReference instance, Java.Interop.JniMethodInfo method, Java.Interop.JniArgumentValue* args) [0x00069] in <3beddfcb1eb547cd8ce47c3097f6eaeb>:0 
at Java.Interop.JniPeerMembers+JniInstanceMethods.InvokeVirtualVoidMethod (System.String encodedMember, Java.Interop.IJavaPeerable self, Java.Interop.JniArgumentValue* parameters) [0x0002a] in <3beddfcb1eb547cd8ce47c3097f6eaeb>:0 
at Firebase.Auth.PhoneAuthProvider.VerifyPhoneNumber (System.String phoneNumber, System.Int64 timeout, Java.Util.Concurrent.TimeUnit unit, Android.App.Activity activity, Firebase.Auth.PhoneAuthProvider+OnVerificationStateChangedCallbacks callbacks) [0x000af] in <fd3fe568403d40c2b79ab43d84a24199>:0 
at Delivery_DemoApp.Helpers.Firebase_Manager.SendCodeVerification (System.String mobile, Delivery_DemoApp.LoginActivity Instance) [0x00043] in C:UsersbilkasourcereposDelivery_DemoAppDelivery_DemoAppHelpersFirebase_Manager.cs:76 
--- End of managed Java.Lang.NullPointerException stack trace ---
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.firebase.auth.FirebaseAuth.zza(java.lang.String, long, java.util.concurrent.TimeUnit, com.google.firebase.auth.PhoneAuthProvider$OnVerificationStateChangedCallbacks, android.app.Activity, java.util.concurrent.Executor, boolean)' on a null object reference
at com.google.firebase.auth.PhoneAuthProvider.zza(Unknown Source:30)
at com.google.firebase.auth.PhoneAuthProvider.verifyPhoneNumber(Unknown Source:10)
at mono.android.view.View_OnClickListenerImplementor.n_onClick(Native Method)
at mono.android.view.View_OnClickListenerImplementor.onClick(View_OnClickListenerImplementor.java:30)
at android.view.View.performClick(View.java:6297)
at android.view.View$PerformClick.run(View.java:24797)
at android.os.Handler.handleCallback(Handler.java:790)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:164)
at android.app.ActivityThread.main(ActivityThread.java:6626)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:811)

有人能够实施它吗?如果是这样,请提供帮助

如前所述,这是新的 Xamarin Firebase 身份验证包的已知问题,其中 Firebase 身份验证实例为空,有关详细信息,请参阅 https://github.com/xamarin/GooglePlayServicesComponents/issues/223。

还提到了一个临时修复程序(这确实解决了我的问题,至少对于注册和登录功能而言(,如下所示

var instance = FirebaseAuth.GetInstance(app);
if (instance == null)
{
instance = new FirebaseAuth(app);
}

看起来这仍然是当前Xamarin Firebase Auth包中的一个问题。在 Bilal 的解决方案的基础上,我找到了一种让电话身份验证工作的方法。您可以使用FirebaseAuth实例获取PhoneAuthProvider实例。

var instance = FirebaseAuth.GetInstance(FirebaseApp.GetInstance(FirebaseApp.DefaultAppName));
if (instance == null)
{
instance = new FirebaseAuth(FirebaseApp.GetInstance(FirebaseApp.DefaultAppName));       
}
var providerInstance = PhoneAuthProvider.GetInstance(instance);
providerInstance.VerifyPhoneNumber(numberWithCode, 60, Java.Util.Concurrent.TimeUnit.Seconds, this, PhoneAuthCallbacks);

希望这对某人有所帮助

相关内容

最新更新