云数据库类型 | 特点 | 适用场景 |
---|---|---|
Firebase Realtime Database | 实时同步、NoSQL、基于JSON结构,内置安全规则 | 实时聊天、协作应用 |
Firebase Firestore | 支持复杂查询、ACID事务、多平台兼容(Web/iOS/Android) | 企业级应用、复杂数据结构 |
AWS DynamoDB | 全托管NoSQL、自动扩展、按请求计费 | 高并发、大规模数据存储 |
MySQL/PostgreSQL | 传统关系型数据库、支持SQL语法、需自行搭建或使用托管服务(如AWS RDS) | 结构化数据管理、复杂业务逻辑 |
创建项目:登录Firebase控制台,新建Android应用项目。
下载google-services.json
:将文件放入app/
目录。
添加依赖:
// 项目根目录 build.gradle buildscript { repositories { google() } dependencies { classpath 'com.google.gms:google-services:4.3.15' } } // app模块 build.gradle apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' implementation 'com.google.firebase:firebase-database:20.1.0'
// 初始化(通常在Application类中) FirebaseDatabase database = FirebaseDatabase.getInstance(); // 写入数据 DatabaseReference ref = database.getReference("users"); User user = new User("John", 25); ref.push().setValue(user); // 生成唯一ID // 读取数据 ref.addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { User user = snapshot.getValue(User.class); // 处理用户数据 } } @Override public void onCancelled(DatabaseError error) { // 处理错误 } });
在Firebase控制台设置数据库规则,
{ "rules": { ".read": "auth != null", // 仅认证用户可读 ".write": "auth != null" // 仅认证用户可写 } }
客户端认证流程:
FirebaseAuth auth = FirebaseAuth.getInstance(); auth.signInWithEmailAndPassword("user@example.com", "password") .addOnCompleteListener(task -> { if (task.isSuccessful()) { // 认证成功,可读写数据库 } else { // 处理错误 } });
问题 | 解决方案 |
---|---|
权限不足导致读写失败 | 检查Firebase安全规则,确保.read /.write 规则允许当前操作 |
数据不实时同步 | 使用addChildEventListener 替代addValueEventListener ,或启用Firestore的流式监听 |
网络请求超时 | 启用Firebase离线持久化:FirebaseDatabase.getInstance().setPersistenceEnabled(true); |
A1:
"adminOnly": { ".write": "false" // 禁止客户端写入 }
Server SDK
进行加密。A2:
FirebaseDatabase.getInstance().setPersistenceEnabled(true);
onChildChanged
或onConflict
回调中合并本地与云端数据, ref.runTransaction(new Transaction.Handler() { @Override public void update(MutableData mutableData) { // 合并本地与云端数据 } });