You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

iOS/Android应用FCM推送通知打开次数未在仪表盘显示,如何解决?

解决方案:FCM推送打开计数(Open)追踪实现

FCM仪表盘的Open计数不会自动统计通知打开行为,必须在应用中手动集成Firebase Analytics的事件上报逻辑,以下是iOS和Android平台的具体实现步骤:

iOS 端实现

在通知点击回调中上报通知打开事件到Firebase Analytics:

  1. 确保已集成Firebase Analytics,在AppDelegate或自定义UNUserNotificationCenterDelegate中实现通知点击处理:
import FirebaseAnalytics

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
    // 仅处理默认的通知点击动作
    guard response.actionIdentifier == UNNotificationDefaultActionIdentifier else {
        completionHandler()
        return
    }
    
    // 提取FCM消息ID(用于关联推送记录)
    let userInfo = response.notification.request.content.userInfo
    let messageID = userInfo["google.message_id"] as? String ?? ""
    
    // 上报通知打开事件
    Analytics.logEvent(AnalyticsEventNotificationOpen, parameters: [
        AnalyticsParameterMessageID: messageID,
        AnalyticsParameterNotificationType: "push"
    ])
    
    completionHandler()
}
  1. 验证配置:确保GoogleService-Info.plist已正确添加到项目,且在AppDelegate的application(_:didFinishLaunchingWithOptions:)中调用FirebaseApp.configure()完成初始化。

Android 端实现

在通知点击跳转的Activity中上报事件,需先将FCM消息ID传递到目标页面:

  1. 构建通知时,把FCM消息ID存入PendingIntent的Extra:
// 在FirebaseMessagingService的onMessageReceived方法中构建通知
val messageId = remoteMessage.messageId
val intent = Intent(this, NotificationDetailActivity::class.java).apply {
    putExtra("google.message_id", messageId)
    flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
val pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE)

// 构建并显示通知
val notificationBuilder = NotificationCompat.Builder(this, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notification)
    .setContentTitle(remoteMessage.notification?.title)
    .setContentText(remoteMessage.notification?.body)
    .setContentIntent(pendingIntent)
    .setAutoCancel(true)

NotificationManagerCompat.from(this).notify(NOTIFICATION_ID, notificationBuilder.build())
  1. 在跳转目标Activity中上报通知打开事件:
import com.google.firebase.analytics.FirebaseAnalytics

class NotificationDetailActivity : AppCompatActivity() {
    private lateinit var firebaseAnalytics: FirebaseAnalytics

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_notification_detail)
        
        firebaseAnalytics = FirebaseAnalytics.getInstance(this)
        
        // 提取传递的消息ID
        val messageId = intent.getStringExtra("google.message_id") ?: ""
        
        // 上报事件到Firebase Analytics
        val params = Bundle().apply {
            putString(FirebaseAnalytics.Param.MESSAGE_ID, messageId)
            putString(FirebaseAnalytics.Param.NOTIFICATION_TYPE, "push")
        }
        firebaseAnalytics.logEvent(FirebaseAnalytics.Event.NOTIFICATION_OPEN, params)
    }
}

注意事项

  • 数据延迟:FCM仪表盘的Open计数更新存在延迟,通常需要1-3小时才能在报表中看到统计数据。
  • 网络要求:测试时需确保设备联网,Analytics事件能正常上传到Firebase后台。
  • 初始化顺序:Android应用冷启动状态下打开通知时,需确保Firebase Analytics已完成初始化再上报事件(可在Application类中提前初始化Firebase)。

内容的提问来源于stack exchange,提问作者Green Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:31:03