基于Expo开发的安卓应用使用Firebase Auth的API密钥如何设置安卓限制
解答
首先明确结论:可以将Firebase Authentication的API密钥设置为仅允许你的Expo安卓应用调用,你当前的报错是校验参数传递缺失导致的。
问题根因
Firebase Auth的安卓应用限制校验逻辑和Maps SDK、Geocoding API不同:
- 你之前配置的地图、地理编码API调用时,原生模块会自动携带APK的包名、签名SHA1信息随请求发送,能匹配GCP的限制规则
- 你当前用的Firebase JS SDK(Expo默认对接的Web版SDK)不会自动携带这些校验参数,导致GCP识别不到合法的客户端信息,就会拦截请求,你看到的
auth/requests-from-this-android-client-application-<empty>-are-blocked.报错就是因为请求里的客户端字段为空。
解决方案
方案1(推荐):切换为原生封装的Firebase Auth库
替换Web版Firebase SDK,使用@react-native-firebase/auth或者expo-firebase-auth这类原生封装插件:
- 这类插件会调用安卓原生Firebase SDK,自动在Auth请求中携带包名、SHA1校验信息,完全匹配你在GCP控制台配置的限制规则
- 调整后重新同步
google-services.json配置,确保文件内的OAuth 2.0客户端ID、API密钥和GCP控制台的配置完全一致即可正常调用。
方案2:保留Web SDK,手动添加校验请求头
如果不想更换现有SDK,可以在Firebase初始化后手动给所有Auth请求添加两个自定义头:
X-Android-Package:填写你的应用包名,和app.json里expo.android.package的取值一致X-Android-Cert:填写你的SHA1指纹的小写、无冒号格式,比如原始SHA1为A1:B2:C3:D4...,则转写为a1b2c3d4...
后续注意事项
应用后续上架Google Play时,需要把Google Play应用签名的SHA1指纹也添加到GCP API密钥的允许列表中,否则上架后的正式版本会被拦截。
内容的提问来源于stack exchange,提问作者Hessuew
相关产品推荐
相关产品推荐

