Firebase PhoneAuth для Android Xamarin - PullRequest
       16

Firebase PhoneAuth для Android Xamarin

1 голос
/ 05 октября 2019

Даже после обширных исследований мне не удалось найти какую-либо реализацию Firebase PhoneAuth для Xamarin Android, и я уже попробовал ответы на другие вопросы, похожие на мои, но это всего лишь порт C # методов, но они на самом деле не работают,Я попытался, но в результате вызова VerifyPhoneNumber возникла исключительная ситуация NullPointerException.

LoginActivity.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:\Users\bilka\source\repos\Delivery_DemoApp\Delivery_DemoApp\Helpers\Firebase_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)

Кто-нибудь смог это реализовать? Если да, пожалуйста, предоставьте помощь

1 Ответ

0 голосов
/ 09 октября 2019

Как было обнаружено ранее, это известная проблема с новым пакетом Xamarin Firebase Auth, где экземпляр Firebase Auth имеет значение null, подробности которого можно найти по адресу https://github.com/xamarin/GooglePlayServicesComponents/issues/223.

Также упоминается временное исправление (который действительно решил мою проблему, по крайней мере для функций регистрации и входа в систему), как показано ниже

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