Android构建变体下Firebase Cloud Messaging无法正常工作
我来帮你解决这个Firebase推送的问题,结合你的配置和遇到的症状,大概率是多环境下的配置匹配出了问题,给你几个具体的排查和修复方向:
1. 检查google-services.json的Flavor目录配置
你现在把json放在app/google-services.json,但因为用了productFlavors,Android Studio会优先读取对应flavor目录下的配置文件。正确的做法是:
- 把nl.companyname.acc项目的google-services.json放到
app/src/acceptance/google-services.json - 把nl.companyname项目的google-services.json放到
app/src/production/google-services.json
这样构建不同flavor时,会自动加载对应环境的Firebase配置。你之前只替换了根目录的json,acceptance环境可能还是在使用旧的配置。
验证方法:构建acceptance flavor后,打开app/build/generated/res/google-services/acceptance/debug/values/values.xml,查看google_app_id是否和Firebase nl.companyname.acc项目里的App ID完全一致。
2. 确认Flavor的applicationId与Firebase包名完全匹配
你的acceptance flavor设置了applicationIdSuffix ".acc",最终生成的包名是nl.companyname.acc,一定要确保Firebase控制台里nl.companyname.acc项目的应用包名完全一致——注意大小写、后缀有没有多打或少打字符,包名不匹配会直接导致推送失败。
你可以去Firebase控制台的「项目设置」→「应用」里,核对包名是否和acceptance构建后的applicationId一致。
3. 确保测试用的是对应Flavor的设备Token
两个Firebase项目的设备Token是不互通的:
- production flavor生成的Token只能用于nl.companyname项目的推送
- acceptance flavor生成的Token才能用于nl.companyname.acc项目的推送
测试前可以在app里加日志,打印当前的BuildConfig.APPLICATION_ID和Firebase Token,确认你用来测试推送的Token是acceptance环境生成的。
4. 验证Firebase Cloud Messaging服务配置
- 登录Firebase控制台,确认nl.companyname.acc项目已经启用了Cloud Messaging服务
- 查看「Cloud Messaging」标签页里的服务器密钥和发送者ID是否有效,没有被禁用或修改
- 直接用Firebase控制台的「发送测试消息」功能,输入acceptance环境的设备Token测试,排除服务器端配置的问题
5. 清理构建缓存重新构建
有时候Android Studio的构建缓存会残留旧配置,导致新的json文件不生效。你可以执行:File -> Invalidate Caches... -> Invalidate and Restart
然后重新构建acceptance flavor的app,再测试推送。
内容的提问来源于stack exchange,提问作者Jim Clermonts

