生产环境Firebase Remote Config获取失败:用户未授权问题求助
解决Firebase Remote Config生产环境FetchException(403 Forbidden)问题
嘿,我看你在生产环境配置Firebase Remote Config时碰到了FirebaseRemoteConfigFetchException,而且核心是403未授权错误——结合你说的开发环境正常、仅生产环境加了SHA指纹的情况,咱们可以从这几个方向排查:
1. 确认生产环境SHA证书指纹已正确添加到Firebase控制台
这是最可能的原因,毕竟你提到生产和开发的唯一差异就是SHA指纹:
- 确保你把生产签名密钥的SHA-1和SHA-256都添加到了Firebase项目的「项目设置」→「应用」→「SHA证书指纹」里;
- 如果用了Google Play App Signing,别忘了把Google Play提供的「应用签名证书指纹」也加进去,很多人会漏掉这个环节。
2. 重新下载并替换google-services.json
添加新的SHA指纹后,Firebase会更新配置文件里的授权信息:
- 去Firebase控制台重新下载
google-services.json,替换到你项目的app目录下; - 一定要确保生产打包时用的是这个更新后的配置文件,别不小心用了旧的开发版配置。
3. 检查Firebase Remote Config API是否启用
有时候会忽略这个细节:
- 打开Google Cloud Console,找到你的Firebase项目,搜索「Firebase Remote Config API」,确认它处于「已启用」状态;
- 开发环境可能默认启用了,但生产环境对应的项目可能需要手动开启(不过大部分情况Firebase会自动配置,查一下更稳妥)。
4. 验证API密钥的应用限制
如果你的API密钥设置了限制,要确保生产环境的信息符合要求:
- 在Google Cloud Console的「API和服务」→「凭据」里,找到对应Android应用的API密钥;
- 检查「应用限制」里是否包含了生产环境的包名+SHA指纹组合,两者缺一不可。
5. 清除客户端缓存后重试
客户端可能缓存了旧的授权信息,干扰新配置的生效:
- 卸载生产环境的应用,清除设备上的相关缓存;
- 重新安装签名后的生产APK,再测试Remote Config的fetch操作。
你提供的错误日志:
2019-02-08 22:59:52.755 19724-19744/? W/System.err: java.io.IOException: com.google.android.gms.internal.firebase_remote_config.zzas.read() returned value out of range -1..255: -117 2019-02-08 22:59:52.755 19724-19744/? W/System.err: at java.util.zip.GZIPInputStream.readUByte(GZIPInputStream.java:273) 2019-02-08 22:59:52.755 19724-19744/? W/System.err: at java.util.zip.GZIPInputStream.readUShort(GZIPInputStream.java:260) 2019-02-08 22:59:52.755 19724-19744/? W/System.err: at java.util.zip.GZIPInputStream.readHeader(GZIPInputStream.java:165) 2019-02-08 22:59:52.755 19724-19744/? W/System.err: at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:80) 2019-02-08 22:59:52.755 19724-19744/? W/System.err: at java.util.zip.GZIPInputStream.<init>(GZIPInputStream.java:92) 2019-02-08 22:59:52.756 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzad.getContent(Unknown Source:46) 2019-02-08 22:59:52.756 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzd.zza(Unknown Source:12) 2019-02-08 22:59:52.756 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzm.zza(Unknown Source:14) 2019-02-08 22:59:52.756 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzg.zzb(Unknown Source:5) 2019-02-08 22:59:52.756 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzaa.zzad(Unknown Source:178) 2019-02-08 22:59:52.756 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzf.zzi(Unknown Source:51) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzer.zzc(Unknown Source:41) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzer.zzb(Unknown Source:23) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzer.zza(Unknown Source:149) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at com.google.android.gms.internal.firebase_remote_config.zzes.then(Unknown Source:6) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at com.google.android.gms.tasks.zzf.run(Unknown Source:2) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) 2019-02-08 22:59:52.757 19724-19744/? W/System.err: at java.lang.Thread.run(Thread.java:764) 2019-02-08 22:59:52.757 19724-19744/? E/FirebaseRemoteConfig: Fetch failed! Server responded with an error. com.google.android.gms.internal.firebase_remote_config.zzd: 403 Forbidden at com.google.android.gms.internal.firebase_remote_config.zzm.zza(Unknown Source:14) at com.google.android.gms.internal.firebase_remote_config.zzg.zzb(Unknown Source:5) at com.google.android.gms.internal.firebase_remote_config.zzaa.zzad(Unknown Source:178) at com.google.android.gms.internal.firebase_remote_config.zzf.zzi(Unknown Source:51) at com.google.android.gms.internal.firebase_remote_config.zzer.zzc(Unknown Source:41) at com.google.android.gms.internal.firebase_remote_config.zzer.zzb(Unknown Source:23) at com.google.android.gms.internal.firebase_remote_config.zzer.zza(Unknown Source:149) at com.google.android.gms.internal.firebase_remote_config.zzes.then(Unknown Source:6) at com.google.android.gms.tasks.zzf.run(Unknown Source:2) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764) 2019-02-08 22:59:52.759 19724-19754/? E/FirebaseRemoteConfig: Fetch failed! com.google.firebase.remoteconfig.FirebaseRemoteConfigFetchException: Fetch failed: The user is not authorized to access the project. Please make sure you are using the API key that corresponds to your Firebase project. Check logs for details. at com.google.android.gms.internal.firebase_remote_config.zzer.zzc(Unknown Source:77) at com.google.android.gms.internal.firebase_remote_config.zzer.zzb(Unknown Source:23) at com.google.android.gms.internal.firebase_remote_config.zzer.zza(Unknown Source:149) at com.google.android.gms.internal.firebase_remote_config.zzes.then(Unknown Source:6) at com.google.android.gms.tasks.zzf.run(Unknown Source:2) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636) at java.lang.Thread.run(Thread.java:764)
内容的提问来源于stack exchange,提问作者eslimaf
相关产品推荐
相关产品推荐

