Не удалось опубликовать уведомление на канале "null"

У меня есть приложение, которое может отправлять уведомления пользователям, но поскольку новые обновления PlayStore должны соответствовать targetSdkVersion 26, уведомления больше не работают с всплывающей подсказкой об ошибке Не удалось отправить уведомление на канал «null». Об этом есть несколько тем, но я не получил решения. Вот мой настоящий класс FirebaseMessagingService:

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {


    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        String notification_title = remoteMessage.getNotification().getTitle();
        String notification_message = remoteMessage.getNotification().getBody();
        String click_action = remoteMessage.getNotification().getClickAction();
        String from_user_id = remoteMessage.getData().get("from_user_id");

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle(notification_title)
                        .setContentText(notification_message);


        Intent resultIntent = new Intent(click_action);
        resultIntent.putExtra("user_id", from_user_id);

        PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        this,
                        0,
                        resultIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );

        mBuilder.setContentIntent(resultPendingIntent);
        int mNotificationId = (int) System.currentTimeMillis();
        NotificationManager mNotifyMgr =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

        mNotifyMgr.notify(mNotificationId, mBuilder.build());
    }
}

Что мне нужно изменить, чтобы он снова заработал? Было бы хорошо, если бы он работал и на устройствах от sdk 24 и выше.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
0
6 347
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Начиная с Android Oreo, вам нужен канал для отправки уведомлений. Вы можете сделать что-то вроде этого (не проверено):

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {

  public static final String NOTIFICATION_CHANNEL_ID = "10001";

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);

        String notification_title = remoteMessage.getNotification().getTitle();
        String notification_message = remoteMessage.getNotification().getBody();
        String click_action = remoteMessage.getNotification().getClickAction();
        String from_user_id = remoteMessage.getData().get("from_user_id");

        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle(notification_title)
                        .setContentText(notification_message);


        Intent resultIntent = new Intent(click_action);
        resultIntent.putExtra("user_id", from_user_id);

        PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        this,
                        0,
                        resultIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );

        mBuilder.setContentIntent(resultPendingIntent);
        int mNotificationId = (int) System.currentTimeMillis();
        NotificationManager mNotifyMgr =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O)
        {
            int importance = NotificationManager.IMPORTANCE_HIGH;
            NotificationChannel notificationChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, "NOTIFICATION_CHANNEL_NAME", importance);

            mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
            mNotifyMgr.createNotificationChannel(notificationChannel);
        }
        mNotifyMgr.notify(mNotificationId, mBuilder.build());
    }
}

mBuilder.setChannelId (NOTIFICATION_CHANNEL_ID); вызывает Невозможно разрешить метод 'setChannelId (java.lang.String)'

FlazzerXP 07.11.2018 15:42

Вы используете последний AppCompat? Или хотя бы 26.0.2?

Bruno 07.11.2018 16:03

Работает, когда приложение открыто. если приложение закрыто или работает в фоновом режиме, снова появляется сообщение об ошибке Не удалось опубликовать уведомление на канале «null».

FlazzerXP 07.11.2018 16:17

nmv Ive обновил обмен сообщениями firebase до 11.8.0, и теперь он работает. Благодарность

FlazzerXP 07.11.2018 16:44

Окей круто. Если мой ответ вам подходит, не стесняйтесь голосовать за него: он может помочь кому-то другому в будущем;)

Bruno 07.11.2018 16:53

Я сделал, но: голоса, отданные теми, у кого репутация менее 15, записываются, но не меняют общедоступный рейтинг публикации.

FlazzerXP 07.11.2018 18:44

Он работает, когда приложение находится в фоновом режиме, но получает сообщение «Не удалось опубликовать сообщение на канале« null », когда приложение открыто.

Adam Mendoza 12.01.2019 09:55

Другие вопросы по теме