云数据库为安卓应用提供远程数据存储能力,常见类型包括:
| 类型 | 代表产品 | 特点 |
|———————|————————–|———————————————————————-|
| NoSQL(文档型) | Firebase Firestore | 实时同步、离线支持、免费额度高 |
| 关系型数据库 | AWS Aurora | SQL兼容、事务支持、适合复杂查询 |
| 对象存储 | 阿里云OSS | 存储二进制文件(图片/视频)、无Schema限制 |
| 新兴数据库 | MongoDB Atlas | JSON文档模型、水平扩展能力强 |
以Firebase Firestore为例:
创建项目
google-services.json
文件并放入app模块根目录配置依赖
// 项目级build.gradle buildscript { repositories { google() } dependencies { classpath 'com.google.gms:google-services:4.3.15' } } // 应用级build.gradle apply plugin: 'com.google.gms.google-services' dependencies { implementation 'com.google.firebase:firebase-firestore:24.4.0' }
初始化数据库
// 在Application类中初始化 val db = FirebaseFirestore.getInstance()
data class User(val name: String, val age: Int) fun addUser() { val user = User("张三", 25) db.collection("users") .add(user) .addOnSuccessListener { docRef -> Log.d("Firestore", "Document added with ID: ${docRef.id}") } .addOnFailureListener { e -> Log.w("Firestore", "Error adding document", e) } }
fun getUsers() { db.collection("users") .get() .addOnSuccessListener { result -> for (document in result) { Log.d("Firestore", "${document.data}") } } .addOnFailureListener { e -> Log.w("Firestore", "Error getting documents", e) } }
fun listenUsers() { db.collection("users") .addSnapshotListener { snapshots, e -> if (e != null) { Log.w("Firestore", "Listen failed.", e) return@addSnapshotListener } if (snapshots != null) { for (doc in snapshots.documents) { Log.d("Firestore", "${doc.data}") } } } }
功能 | 配置方法 |
---|---|
身份验证 | 启用Firebase Auth,配置邮箱/Google登录 |
安全规则 | 在Firebase控制台设置读写权限(如只允许登录用户写入) |
离线缓存 | 自动启用本地缓存,网络恢复后自动同步 |
查询优化 | 使用.whereEqualTo() /.limit() 等方法构建索引查询 |
Q1:为什么数据提交失败?
google-services.json
文件正确配置Q2:如何控制数据同步流量?
.source(Source.CACHE)
优先读取本地缓存db.disableNetwork()
/db.enableNetwork()
手动控制网络访问云服务 | 免费额度 | 超出后费用 |
---|---|---|
Firebase | 1GB存储+5万次读写/月 | $0.06/GB存储 + $0.15/万次读写 |
AWS DynamoDB | 25GB存储+25万次请求/月 | $0.25/GB/月 + $0.000002/请求 |
Azure Cosmos DB | 无免费存储,前10GB/月$0咨询费 | $0.07/GB/小时 + $0.001/千次请求 |
Q:云数据库和本地数据库(Room)应该如何配合使用?
A:建议将频繁读写的临时数据存储在本地Room数据库,将需要跨设备同步的核心数据存储在云数据库,通过WorkManager
定期进行本地与云端的数据同步。
Q:如何在没有服务器的情况下实现多设备数据同步?
A:使用BaaS(后端即服务)解决方案如Firebase,其内置的实时数据库和认证服务可替代自建服务器,对于复杂业务逻辑,可结合云函数(Firebase Functions)实现服务器端