You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 17:36:03