Flutter Firebase手机认证异常:无法发送OTP且报错17028
解决Firebase手机认证17028错误(非测试手机号无法发送OTP)
核心问题说明
测试手机号能正常使用,是因为Firebase对测试号跳过了Play Integrity合法性校验;而非测试号触发了完整校验流程,错误17028本质是Play Integrity Token验证失败,和应用签名、API配置直接相关。
修复步骤
1. 将Debug和Release的SHA指纹全部添加到Firebase
- 多数人只添加了一种环境的签名指纹,导致换环境测试时触发错误。
- 获取指纹:打开Android Studio的Gradle面板,找到app模块→
Tasks→android→运行signingReport,复制debug和release版本的SHA-1、SHA-256。 - 前往Firebase控制台项目设置→对应应用→添加指纹,将两种环境的指纹全部录入。
2. 启用Play Integrity API
- 当前Firebase手机认证依赖Play Integrity校验,必须在Google Cloud控制台启用该API:
- 从Firebase项目设置跳转至对应的Google Cloud控制台,搜索“Play Integrity API”并启用,确保关联的是你正在使用的Google Play开发者账号。
3. 关联Firebase与Google Play开发者账号
- 若应用已上架或准备上架Google Play,必须完成账号绑定:
- 进入Firebase项目设置→集成→Google Play,绑定你的开发者账号,确认包名与Play后台完全一致。
4. 更新google-services.json并清除应用缓存
- 修改Firebase配置后,重新下载
google-services.json替换项目中的旧文件;随后清除应用的缓存与数据,重新安装测试。
5. 检查自定义Play Token逻辑(若有)
- 如果你手动实现了Play Integrity Token的获取逻辑,需确保调用
PlayIntegrityManager.generateIntegrityToken()时参数正确,传递给Firebase的Token无格式错误或截断问题。
内容的提问来源于stack exchange,提问作者Jay Patel
相关产品推荐
相关产品推荐

