要将 FCM 通知保存到 Room 数据库,你需要执行以下步骤:
NotificationEntity:@Entity(tableName = "notifications")
data class NotificationEntity(
@PrimaryKey(autoGenerate = true)
val id: Long = 0,
val title: String,
val message: String,
val timestamp: Long
)
NotificationDao:@Dao
interface NotificationDao {
@Insert
fun insert(notification: NotificationEntity)
@Query("SELECT * FROM notifications ORDER BY timestamp DESC")
fun getAllNotifications(): LiveData>
}
RoomDatabase的数据库类,例如AppDatabase:@Database(entities = [NotificationEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun notificationDao(): NotificationDao
companion object {
@Volatile
private var instance: AppDatabase? = null
fun getInstance(context: Context): AppDatabase {
return instance ?: synchronized(this) {
instance ?: Room.databaseBuilder(
context.applicationContext,
AppDatabase::class.java,
"app_database"
).build().also { instance = it }
}
}
}
}
MyFirebaseMessagingService:class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
// 处理接收到的通知数据
val title = remoteMessage.notification?.title
val message = remoteMessage.notification?.body
val timestamp = System.currentTimeMillis()
// 保存通知到数据库
val notification = NotificationEntity(title = title, message = message, timestamp = timestamp)
val notificationDao = AppDatabase.getInstance(applicationContext).notificationDao()
notificationDao.insert(notification)
}
}
这样,当你的应用接收到来自 FCM 的通知时,它们将被保存到 Room 数据库中。你可以使用notificationDao().getAllNotifications()方法来获取保存的通知列表。
请注意,上述代码示例是使用 Kotlin 编写的,如果你使用的是 Java,你需要相应地进行转换。另外,确保已正确配置 Room 数据库依赖项。