部署于新加坡asia-southeast1的Firebase Realtime Database无法写入
问题排查及解决方法
1. 非美区实时数据库实例未指定访问URL
部署在新加坡区域的Firebase Realtime Database无法通过默认的FirebaseDatabase.getInstance()直接访问,该默认方法只会指向美国区的默认实例。你需要在获取实例时传入你的新加坡区域数据库完整URL,URL可以在Firebase控制台的Realtime Database页面顶部找到,格式一般为https://[你的项目名]-default-rtdb.asia-southeast1.firebasedatabase.app。
修改后的实例获取代码示例:
// 替换为你自己的新加坡区域数据库URL val usersRef: DatabaseReference = FirebaseDatabase.getInstance("https://你的数据库URL").reference.child("Users")
2. 节点大小写不匹配
你代码中写入的节点是大写开头的Users,但安全规则中配置的是小写开头的users,实时数据库的节点名称大小写敏感,两者不匹配会导致权限校验失败。可以选择两种修改方式:
- 将代码中的
child("Users")改为child("users") - 或将安全规则中的
"users"改为"Users"
3. 其他排查点
- 检查项目下的
google-services.json是否是最新下载的、包含新加坡区域数据库配置的版本,若更新过数据库区域需要重新下载该文件替换到项目中 - 在写入失败的回调中打印错误日志定位具体原因,修改失败回调代码:
} else { // 打印具体错误信息 Log.e("FirebaseWriteError", "写入失败", task.exception) Toast.makeText(baseContext, "data not stored: ${task.exception?.message}", Toast.LENGTH_SHORT).show() }
- 检查当前设备的网络是否可以正常访问Firebase服务,避免代理或防火墙拦截请求
- 检查Firebase Auth登录状态是否有效,你当前代码用了
!!强制取值,若用户未登录会直接崩溃,建议补充空判断逻辑
内容的提问来源于stack exchange,提问作者Prasad
相关产品推荐
相关产品推荐

