Unity中FirebaseAuth调用VerifyPhoneNumber报错:无法验证给定手机号
Unity Firebase Auth 手机号登录报错排查方案
针对调用VerifyPhoneNumber返回Unable to verify the given phone number且测试手机号无法触发回调的问题,按以下步骤逐一排查:
1. Firebase 控制台配置检查
- 确认Phone Auth 已启用:进入控制台「Authentication」→「Sign-in method」,找到「Phone」并确保状态为「启用」,测试阶段不要设置号码白名单或限制条件。
- 添加官方测试号码:在「Phone」设置的「Test phone numbers」区域,添加Firebase官方提供的测试号(如
+16505551234)及对应验证码(如123456),添加后使用该号码测试可跳过真实短信通道,直接触发回调。 - 更新配置文件:重新下载
google-services.json(Android)或GoogleService-Info.plist(iOS),替换Unity项目中Assets/Plugins/Android或Assets/Plugins/iOS下的旧文件,确保配置与控制台一致。
2. 手机号格式校验
- 必须携带国际区号:例如中国手机号需写为
+86138xxxxxxx,不能省略区号直接写138xxxxxxx,Firebase不识别无区号的号码。 - 测试号严格遵循官方格式:使用控制台添加的测试号时,要完全匹配输入(包括
+号和空格/连字符,如+1 650-555-1234)。
3. Unity 项目与SDK配置
- 匹配SDK与Unity版本:使用兼容的Firebase Auth SDK(建议最新稳定版,如12.x系列),Unity版本需在2020.x及以上,避免版本不兼容导致的初始化错误。
- Android 权限检查:确认
Assets/Plugins/Android/AndroidManifest.xml中包含Firebase自动添加的权限:
同时确保存在处理验证短信的<uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" />intent-filter,若手动修改过Manifest需恢复自动生成的配置。 - iOS Info.plist 检查:确认项目Bundle ID与Firebase控制台注册的一致,无需额外配置ATS(Firebase使用HTTPS),但需确保设备网络正常。
4. 代码逻辑修正
- 确保Firebase初始化完成:调用
VerifyPhoneNumber前,必须等待FirebaseApp.CheckAndFixDependenciesAsync()执行完成,示例:async void Start() { var dependencyStatus = await FirebaseApp.CheckAndFixDependenciesAsync(); if (dependencyStatus == DependencyStatus.Available) { // 初始化完成后再调用手机号验证 StartPhoneVerification("+86138xxxxxxx"); } else { Debug.LogError("Firebase依赖初始化失败: " + dependencyStatus); } } - 完整绑定回调并打印详细错误:必须实现所有回调,尤其是
verificationFailed要打印错误详情,而非仅返回的提示字符串:void StartPhoneVerification(string phoneNumber) { FirebaseAuth.DefaultInstance.VerifyPhoneNumber(phoneNumber, 60, null, verificationCompleted: (credential) => { Debug.Log("自动验证完成,凭证: " + credential); }, codeSent: (verificationId, forceResendingToken) => { Debug.Log("验证码已发送,验证ID: " + verificationId); // 保存verificationId用于后续验证 }, codeAutoRetrievalTimeOut: (verificationId) => { Debug.Log("验证码自动获取超时,验证ID: " + verificationId); }, verificationFailed: (error) => { // 打印详细错误信息,定位问题根源 Debug.LogError("验证失败: " + error.Message + " | 错误码: " + error.ErrorCode); }); }
5. 网络与环境排查
- 使用真机测试:避免依赖模拟器的虚拟网络,部分模拟器可能无法正常连接Firebase服务器。
- 确保设备网络正常:无代理、防火墙限制,能正常访问Firebase相关域名(无需手动添加例外,SDK已处理)。
内容的提问来源于stack exchange,提问作者Tho Doan
相关产品推荐
相关产品推荐

