Android firebase消息推送集成 FCM消息处理

FirebaseMessagingService 是 Firebase Cloud Messaging (FCM) 提供的一个服务,用于处理来自 Firebase 服务器的消息。它有几个关键的方法,你提到的 onMessageReceiveddoRemoteMessagehandleIntent 各有不同的用途。下面逐一解释这些方法的作用和用法:

1. onMessageReceived(RemoteMessage message)

当你的应用处于前台时,如果有消息到达,就会回调 onMessageReceived 方法。这里是处理接收到的消息的逻辑部分。

override fun onMessageReceived(message: RemoteMessage) {
   
   
    super.onMessageReceived(message)
    // 你可以根据消息(message)的内容来做相应的处理,
    // 比如展示通知,更新UI等。
}

2. doRemoteMessage()

FirebaseMessagingService 的官方文档中,并没有直接提及 doRemoteMessage 这个方法。它可能是某个特定项目或库中特有的方法,而不是 Firebase SDK 的一部分。如果它存在于你的代码或你使用的某个库中,可能需要查找特定的文档或源代码来了解其具体用途。

3. handleIntent(Intent intent)

handleIntent 方法在服务中处理意图(Intent)。它不是 FirebaseMessagingService 专有的方法,而是 Android Service 类的一部分,可能会在接收到 Intent 时被调用。然而,在处理 FCM 相关的任务中,你通常不需要直接覆写或调用 handleIntent 方法。FCM 服务通常会自动处理消息的接收和分发工作,包括将消息派发到 onMessageReceived 方法。

如果你需要在后台接收消息并触发一些行为,通常会使用 onMessageReceived 来实现逻辑,因为 FCM 为这种用例提供了足够的支持。

注意:如果你的应用在后台,Firebase 通常会自动处理消息。如果消息中包含了通知负载,系统可能会自动显示通知,而不会调用 onMessageReceived。如果想要确保后台消息也触发 onMessageReceived,需要在发送消息时仅使用数据负载(即不包含通知负载),并确保应用实现了适当的后台运行条件(例如,使用高版本的 targetSdkVersion,考虑到 Android 的后台执行限制等)。

总之,对于绝大多数使用 Firebase Cloud Messaging 的场景,你主要会与 onMessageReceived 方法打交道,对于特殊的或自定义的方法(如 doRemoteMessage),需要参考特定的文档或代码实现。

当你使用 Firebase Cloud Messaging (FCM) 发送消息时,消息可以包含两种类型的数据:

  1. 通知负载:当应用在前台运行时,通过 onMessageReceived 处理;当应用在后台或被杀死时,系统会自动处理。
  2. 数据负载:无论应用是在前台、后台还是被杀死,都会触发 onMessageReceived(需要特定格式的负载才会在后台触发)。

以下是如何在 FirebaseMessagingServiceonMessageReceived 方法中获取消息标题、消息体和任意附加的数据(如 deeplink)的一个示例:

完整的 FirebaseMessagingService 示例

import android.app.NotificationChannel
import android.app.NotificationManager
import android.content.Context
import android.os.Build
import androidx.core.app.NotificationCompat
import androidx.core.app.NotificationManagerCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage

class MyFirebaseMessagingService : FirebaseMessagingService() {
   
   

    override fun onMessageReceived(remoteMessage: RemoteMessage) {
   
   
        super.onMessageReceived(remoteMessage)

        // 获取消息标题和内容(消息负载)
        val title = remoteMessage.notification?.title ?: "Default Title"
        val messageBody = remoteMessage.notification?.body ?: "Default Message Body"

        // 获取数据(数据负载)
        val data = remoteMessage.data
        val deeplink = data["deeplink"] // 假定有一个键为"deeplink"的数据

        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值