iOS/Android应用FCM推送通知打开次数未在仪表盘显示,如何解决?
解决方案:FCM推送打开计数(Open)追踪实现
FCM仪表盘的Open计数不会自动统计通知打开行为,必须在应用中手动集成Firebase Analytics的事件上报逻辑,以下是iOS和Android平台的具体实现步骤:
iOS 端实现
在通知点击回调中上报通知打开事件到Firebase Analytics:
- 确保已集成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() }
- 验证配置:确保
GoogleService-Info.plist已正确添加到项目,且在AppDelegate的application(_:didFinishLaunchingWithOptions:)中调用FirebaseApp.configure()完成初始化。
Android 端实现
在通知点击跳转的Activity中上报事件,需先将FCM消息ID传递到目标页面:
- 构建通知时,把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())
- 在跳转目标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
相关产品推荐
相关产品推荐

