Почему мое уведомление не работает в фоновом режиме, когда мое приложение убить и закрыть в Android - PullRequest
0 голосов
/ 02 июля 2018

Когда мое приложение открыто, уведомление работает отлично, но в фоновом режиме оно не работает. Я хочу, чтобы уведомление отображалось, даже если мое приложение было убито или закрыто на моем телефоне. Но это не работает. Вот мой код: -

1) MyFirebaseMessagingService.kt: -

class MyFirebaseMessagingService : FirebaseMessagingService() {


override fun onMessageReceived(remoteMessage: RemoteMessage?) {

    showNotification(remoteMessage!!)
    Log.e("fcm", "HElloo Call")

}


@SuppressLint("WrongConstant")
private fun showNotification(message: RemoteMessage) {
    val manager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {


        val i = Intent(this, MainActivity::class.java)
        i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

        val pendingIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)

        val androidChannel = NotificationChannel("1",
                "sdccscsc", NotificationManager.IMPORTANCE_DEFAULT)
        androidChannel.enableLights(true)
        androidChannel.enableVibration(true)
        androidChannel.lightColor = Color.GREEN
        androidChannel.lockscreenVisibility = Notification.VISIBILITY_PRIVATE

        val builder = NotificationCompat.Builder(this, "1")
                .setAutoCancel(true)
                .setContentTitle(message.data["title"])
                .setContentText(message.data["message"])
                .setSmallIcon(R.drawable.main_logo)
                .setDefaults(Notification.DEFAULT_ALL)
                .setContentIntent(pendingIntent)

        manager.createNotificationChannel(androidChannel)
    }


    val i = Intent(this, MainActivity::class.java)
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

    val pendingIntent = PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT)

    val builder = NotificationCompat.Builder(this)
            .setAutoCancel(true)
            .setContentTitle(message.data["title"])
            .setContentText(message.data["message"])
            .setSmallIcon(R.drawable.main_logo)
            .setPriority(NotificationCompat.PRIORITY_HIGH)
            .setDefaults(Notification.DEFAULT_ALL)
            .setContentIntent(pendingIntent)
    manager.notify(0, builder.build())

}

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Проверьте свой logcat, если вы получаете уведомление. Ваше уведомление отображается в системном трее?

0 голосов
/ 02 июля 2018

Существует два типа Типы сообщений

  1. Уведомление

FCM автоматически отображает сообщение для устройств конечного пользователя от имени клиентского приложения. Уведомительные сообщения имеют предопределенный набор видимых пользователем ключей и дополнительную полезную нагрузку данных пользовательских пар ключ-значение.

  1. Сообщение данных

Клиентское приложение отвечает за обработку сообщений с данными. Сообщения данных имеют только пользовательские пары ключ-значение.

согласно моему комментарию

Вам необходимо отправить данные уведомления в Сообщения с данными

ФОРМАТ ОБРАЗЦА

{
  "message":{
    "token":"your token",
    "data":{
      "key1" : "value1",
      "key2" : "value2",
      "key3" : "value4",
    }
  }
}

EDIT

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.cancelAll();

    Intent intent = new Intent(this, YourActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    try {
        intent.putExtra("ID",object.getString("data"));
    } catch (JSONException e) {
        e.printStackTrace();
    }
    PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_ONE_SHOT);


    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    String NOTIFICATION_CHANNEL_ID = "Your_channel";

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "Your Notifications", NotificationManager.IMPORTANCE_HIGH);

        notificationChannel.setDescription("Description");
        notificationChannel.enableLights(true);
        notificationChannel.setLightColor(Color.RED);
        notificationChannel.setVibrationPattern(new long[]{0, 1000, 500, 1000});
        notificationChannel.enableVibration(true);
        notificationManager.createNotificationChannel(notificationChannel);
    }


    NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);

    notificationBuilder.setAutoCancel(true)
            .setColor(ContextCompat.getColor(this, R.color.colorDarkBlue))
            .setContentTitle(getString(R.string.app_name))
            .setContentText(remoteMessage.getNotification().getBody())
            .setDefaults(Notification.DEFAULT_ALL)
            .setWhen(System.currentTimeMillis())
            .setSmallIcon(R.drawable.ic_notification)
            .setAutoCancel(true)
            .setContentIntent(pendingIntent)
            .setPriority(Notification.PRIORITY_MAX);

    notificationManager.notify(1000, notificationBuilder.build());
    notificationManager.cancelAll();
...