Xamarin Android Firebase手机认证无法发送OTP验证码问题求助
异常修复方案
首先明确异常根因:你遇到的转换错误来自SetTimeout方法的参数传递错误,直接将C#原生long类型强转为Java.Lang.Long类型不符合Xamarin Android与Java库的绑定规则,导致调试器抛出类型转换异常。
核心修复代码
将SetTimeout参数的强转逻辑替换为Java.Lang.Long.ValueOf()方法生成Java侧可识别的Long类型对象,修改后的完整方法如下:
public Task<bool> SendOtpCodeAsync(string PhoneNumber) { _PhoneAuthenticationTCS = new TaskCompletionSource<bool>(); PhoneAuthOptions newOptions = PhoneAuthOptions.NewBuilder() .SetPhoneNumber(PhoneNumber) // 替换原有的强转逻辑,使用ValueOf生成合法的Java.Lang.Long对象 .SetTimeout(Java.Lang.Long.ValueOf(60), TimeUnit.Seconds) .SetActivity(Platform.CurrentActivity) .SetCallbacks(this) .Build(); PhoneAuthProvider.VerifyPhoneNumber(newOptions); return _PhoneAuthenticationTCS.Task; }
其余排查项
如果修改后仍有异常,可依次排查以下点:
- 手机号格式必须符合E.164标准,携带国家码前缀,例如中国手机号需要填写为
+8613xxxxxxxxx,不可省略国家码、不可包含空格、横线等特殊字符 - 确保所有Xamarin.Firebase系列NuGet包版本统一,避免跨版本依赖冲突导致的JNI调用错误
- 当前类必须完整实现
PhoneAuthProvider.OnVerificationStateChangedCallbacks接口的所有方法,包括OnVerificationCompleted、OnVerificationFailed、OnCodeSent,未用到的方法也需要保留空实现,避免运行时调用缺失 - 确认Android平台的Firebase初始化逻辑已正确执行,需在
MainActivity.OnCreate方法中提前调用FirebaseApp.InitializeApp(this)完成初始化
内容的提问来源于stack exchange,提问作者Rizwan Siddiqui
相关产品推荐
相关产品推荐

