Skip to content

FCM background notifications do not trigger custom Analytics event #2663

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
GuruAndroidDev opened this issue Mar 25, 2025 · 1 comment
Open

Comments

@GuruAndroidDev
Copy link

Description
I am trying to log a custom Analytics event from onMessageReceived in my FirebaseMessagingService when a background notification is delivered. However, the custom event is never showing up in Firebase DebugView or the Analytics dashboard. I suspect that onMessageReceived is not being called in the background or that the payload might not be set up correctly. I’d like help diagnosing why the custom event is not appearing.

Step 1: Describe your environment

  • Android device: Pixel 5 (example)
  • Android OS version: 12 (example)
  • Google Play Services version: 22.12.13 (example)
  • Firebase/Play Services SDK version:
    • Firebase Messaging: 23.0.0
    • Firebase Analytics: 21.2.0
      (examples—replace with your actual versions)

Step 2: Describe the problem

Steps to reproduce

  1. Create a subclass of FirebaseMessagingService (e.g., MyFirebaseMessagingService) that overrides onMessageReceived.
  2. In onMessageReceived, log a custom event using FirebaseAnalytics.logEvent(...) when a data payload is present.
  3. Send an FCM message from the Firebase Console or a server with both notification and data payloads.
  4. Put the app in the background.
  5. Wait for the notification to arrive, then check Firebase DebugView for the custom event.

Observed Results

  • The onMessageReceived method seems to run when the app is in the foreground (and the custom event appears in DebugView).
  • When the app is in the background, the custom event (notification_received_background) never appears in DebugView or in the Analytics dashboard.
  • It appears that onMessageReceived is not being triggered, or the event is not being uploaded in the background.

Expected Results

  • Even if the notification is received while the app is in the background, the custom event (notification_received_background) should be logged and appear in DebugView (after the app comes to the foreground to upload events).

Relevant Code

package com.example.myapplication

import android.app.NotificationChannel
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.util.Log
import androidx.core.app.NotificationCompat
import com.google.firebase.analytics.FirebaseAnalytics
import com.google.firebase.analytics.ktx.analytics
import com.google.firebase.ktx.Firebase
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import com.example.myapplication.extension.isAppInForeground

class MyFirebaseMessagingService : FirebaseMessagingService() {

    private val firebaseAnalytics: FirebaseAnalytics by lazy {
        Firebase.analytics
    }

    override fun onMessageReceived(remoteMessage: RemoteMessage) {
        // Log data payload
        if (remoteMessage.data.isNotEmpty()) {
            Log.d("FirebaseMessagingService", "Data payload: ${remoteMessage.data}")
            // Log custom event
            logEventToFirebase("notification_received_background", "Android", "google.com")
        }

        val isInForeground = applicationContext.isAppInForeground()
        if (isInForeground) {
            logEventToFirebase("notification_user_foreground", "Android", "google.com")
        }

        // Show a local notification
        showNotification(remoteMessage, "Android", "google.com")
    }

    override fun onNewToken(token: String) {
        super.onNewToken(token)
        Log.d("FCM", "New FCM Token: $token")
    }

    private fun showNotification(
        remoteMessage: RemoteMessage,
        operatorName: String,
        subDomain: String
    ) {
        val notificationManager =
            getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
        val channelId = "default_channel"

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            val channel = NotificationChannel(
                channelId,
                "Default Channel",
                NotificationManager.IMPORTANCE_DEFAULT
            )
            notificationManager.createNotificationChannel(channel)
        }

        val tapIntent = Intent(this, MainActivity::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            putExtra("operator_name", operatorName)
            putExtra("sub_domain", subDomain)
        }
        val pendingTapIntent = PendingIntent.getActivity(
            this, 0, tapIntent, PendingIntent.FLAG_IMMUTABLE
        )

        val dismissIntent = Intent(this, NotificationDismissReceiver::class.java)
        val pendingDismissIntent = PendingIntent.getBroadcast(
            this, 1, dismissIntent, PendingIntent.FLAG_IMMUTABLE
        )

        val builder = NotificationCompat.Builder(this, channelId)
            .setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(remoteMessage.data["title"] ?: "Title")
            .setContentText(remoteMessage.data["body"] ?: "Body")
            .setContentIntent(pendingTapIntent)
            .setDeleteIntent(pendingDismissIntent)
            .setAutoCancel(true)

        notificationManager.notify(0, builder.build())
    }

    private fun logEventToFirebase(eventName: String, operatorName: String, subDomain: String) {
        val params = Bundle().apply {
            putString("operator_name", operatorName)
            putString("sub_domain", subDomain)
        }
        firebaseAnalytics.logEvent(eventName, params)
    }
}
@google-oss-bot
Copy link

This issue does not seem to follow the issue template. Make sure you provide all the required information.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants