如何公开Android Studio项目至GitHub且不开放Firebase数据库访问权限?
如何公开Android项目同时保护Firebase数据库?
嗨,我来帮你搞定这个问题!要公开你的Android项目,同时不让外人碰你的Firebase数据库,核心就是把敏感配置、权限和代码彻底隔离开,下面是一步步的实操方案:
1. 彻底移除Git中的Firebase配置文件
你的google-services.json里包含了Firebase项目的敏感标识,绝对不能出现在公开仓库里:
- 首先,把这个文件从Git的追踪列表中移除(如果已经提交过的话):
git rm --cached app/google-services.json - 然后在项目根目录的
.gitignore文件里添加一行,确保以后不会再误提交:app/google-services.json - 最后,创建一个示例配置文件
google-services.example.json,填一些占位值,比如把真实的项目ID、API密钥换成类似YOUR_PROJECT_ID的标记,再加上注释告诉其他用户:需要自己创建Firebase项目,生成对应的配置文件替换这个示例。
2. 收紧Firebase数据库的安全规则
既然你的项目不需要用户认证,那就得靠安全规则来过滤非法访问:
- 最简单的方式是基于设备ID白名单:在代码里获取你家里设备的唯一ID,然后在Firebase控制台的数据库规则里设置只允许这些ID的请求:
{ "rules": { ".read": "request.resource.data.deviceId in ['你的设备ID1', '你的设备ID2']", ".write": "request.resource.data.deviceId in ['你的设备ID1', '你的设备ID2']" } } - 另外,你也可以结合应用的包名和SHA-1证书指纹来限制访问(不过这个能被伪造,建议和设备ID结合用):
{ "rules": { ".read": "request.auth == null && request.app.packageName == '你的应用包名' && request.app.sha1 == '你的应用SHA-1指纹'", ".write": "request.auth == null && request.app.packageName == '你的应用包名' && request.app.sha1 == '你的应用SHA-1指纹'" } } - 一定要在Firebase控制台的“规则模拟器”里测试这些规则,确保只有你的设备/应用能正常读写,其他人的请求都会被拒绝。
3. 清理代码中的硬编码敏感值
检查整个项目代码,把所有直接写死的敏感信息(比如Firebase数据库URL、API密钥)都替换掉:
- 可以用
local.properties文件来存储这些敏感值,然后在build.gradle里读取并注入到BuildConfig中:
比如在local.properties里加:
然后在app模块的FIREBASE_DB_URL=https://your-real-db-url.firebaseio.combuild.gradle里添加:android { defaultConfig { buildConfigField("String", "FIREBASE_DB_URL", "\"${properties.getProperty("FIREBASE_DB_URL")}\"") } } - 最后把
local.properties也加入.gitignore,代码里就用BuildConfig.FIREBASE_DB_URL来获取数据库地址。
4. 清除Git历史中的敏感信息
如果之前不小心把敏感文件或信息提交到Git历史里了,即使现在移除,别人还是能通过历史记录查到,这时候要用git filter-repo来彻底清理:
- 安装
git filter-repo后,运行命令移除历史中的google-services.json:git filter-repo --path app/google-services.json --invert-paths - 然后强制推送到GitHub(注意:这个操作会改写仓库历史,一定要先做好本地备份):
git push origin main --force
做完以上所有步骤后,先在本地测试你的应用,确保家里的设备还能正常控制,然后再把GitHub项目从私有改成公开就没问题啦!
内容的提问来源于stack exchange,提问作者Larry
相关产品推荐
相关产品推荐

