msolla
msolla

Reputation: 326

Firebase notifications not shown on foreground

I'm trying to manage notifications, but I am not able to do nothing with them when app is in foreground.

When app is minimified or completly closed, the notification is correctly shown, but if app is in foreground it is not seen.

I have test variations of this code, but nothing works. The notifications with app closed or minimified works wit any modification of this code, or with any this code at all:

(EDITED following comments indications, same result)

import android.app.Notification
import android.app.NotificationManager
import android.app.PendingIntent
import android.content.Context
import android.content.Intent
import android.os.Looper
import android.util.Log
import androidx.appcompat.app.AlertDialog
import androidx.core.app.NotificationCompat
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
import PACKAGE_NAME.ContenedorPrincipal
import PACKAGE_NAME.R
import PACKAGE_NAME.general.General
import java.text.SimpleDateFormat
import java.util.*
//import java.util.concurrent.atomic.AtomicInteger

class ServicioNotificaciones: FirebaseMessagingService()
{
    //private val c = AtomicInteger(0)

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

        try{
            val uniqueID = Integer.parseInt(SimpleDateFormat("ddHHmmss",  Locale.getDefault()).format(Date()))

            val mNotificationManager: NotificationManager = applicationContext.getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

            if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                val notificationChannel = NotificationChannel(
                    "notificationChannelID",
                    "notificationChannelName",
                    NotificationManager.IMPORTANCE_HIGH)

                mNotificationManager.createNotificationChannel(notificationChannel)
            }


            val mBuilder: NotificationCompat.Builder = NotificationCompat.Builder(applicationContext, "notify_001")
            val ii = Intent(applicationContext, ContenedorPrincipal::class.java)
            val pendingIntent = PendingIntent.getActivity(applicationContext, 0, ii, 0)

            val bigText = NotificationCompat.BigTextStyle()
            bigText.bigText(remoteMessage.notification?.body ?: "")
            bigText.setBigContentTitle(remoteMessage.notification?.title ?: "")
            bigText.setSummaryText(remoteMessage.notification?.body ?: "")

            mBuilder.setContentIntent(pendingIntent)
            mBuilder.setSmallIcon(R.mipmap.ic_launcher_round)
            mBuilder.setContentTitle(remoteMessage.notification?.title ?: "")
            mBuilder.setContentText(remoteMessage.notification?.body ?: "")
            @Suppress("DEPRECATION")
            mBuilder.priority = Notification.PRIORITY_MAX
            mBuilder.setStyle(bigText)

            val buildedNotification = mBuilder.build()

            //mNotificationManager.notify(c.incrementAndGet(), buildedNotification)
            mNotificationManager.notify(uniqueID, buildedNotification)

            /*Looper.prepare()
            General.mostrarConfirmacion(
                remoteMessage.notification?.title ?: "",
                remoteMessage.notification?.body ?: "",
                AlertDialog.Builder(this)
            )*/
        }
        catch (ex: Exception){
            Log.wtf("onMessageReceivedEX", ex.message.toString())
        }
    }
}

And manifest:

   <service
            android:name="PACKAGE_NAME.servicios.ServicioNotificaciones"
            android:enabled="true"
            android:exported="true">
            <intent-filter>
                <action android:name="com.google.firebase.MESSAGING_EVENT" />
            </intent-filter>
    </service>

EDIT 2: I finnaly make it work with this code:

                val intent2 = Intent(this, MainActivity::class.java)
            intent2.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
            val pendingintent2 = PendingIntent.getActivity(this, 0, intent2, PendingIntent.FLAG_ONE_SHOT)
            val channelId = "Default"
            val builder = NotificationCompat.Builder(this, channelId)
                .setSmallIcon(R.mipmap.ic_launcher)
                .setContentTitle(remoteMessage.notification?.title)
                .setContentText(remoteMessage.notification?.body).setAutoCancel(true)
                .setContentIntent(pendingintent2)
            val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                val channel = NotificationChannel(
                    channelId,
                    "Default channel",
                    NotificationManager.IMPORTANCE_DEFAULT
                )
                manager.createNotificationChannel(channel)
            }
            manager.notify(uniqueID, builder.build())

Thanks you all!

Upvotes: 4

Views: 3315

Answers (3)

Moayed Alayaseh
Moayed Alayaseh

Reputation: 243

i think this issue related to sent notification not to receive notification try to sent notification like this

"data": {
  "data_title": "test",
  "data_body" : "test"
 }

Upvotes: 0

Md. Asaduzzaman
Md. Asaduzzaman

Reputation: 15423

You have to use notification channel:

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val notificationChannel = NotificationChannel(
        "notify_001",
        getString(R.string.notification_channel_name),
        NotificationManager.IMPORTANCE_HIGH)

    mNotificationManager.createNotificationChannel(notificationChannel)
}

Upvotes: 2

CmTiger
CmTiger

Reputation: 74

I Don't see where do you create the notification channel (Since Android O it is a must).

Create and Manage Notification Channels

Upvotes: 1

Related Questions