Android |Уведомления Java не отображаются в API 25 и ниже - PullRequest
0 голосов
/ 21 октября 2019

У меня есть push-уведомления Firebase, которые отправляют текстовые сообщения. Мои уведомления появляются в API 26 и более поздних версиях, но в API ниже (в настоящее время тестируется с API 22), и сообщения успешно отправляются, но они не отображаются на устройстве (API 22). В чем может быть проблема?

public class FirebaseMessagingService extends com.google.firebase.messaging.FirebaseMessagingService {
    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        createNotificationChannel();
        String messageTitle = remoteMessage.getNotification().getTitle();
        String messageBody = remoteMessage.getNotification().getBody();

        String click_action = remoteMessage.getNotification().getClickAction();
        String dataMessage = remoteMessage.getData().get("message");
        String dataFrom = remoteMessage.getData().get("from_user_id");

        NotificationCompat.Builder builder = new NotificationCompat.Builder(this, getString(R.string.default_notification_channel_id))
                .setSmallIcon(R.mipmap.ic_launcher_round)
                .setContentTitle(messageTitle)
                .setContentText(messageBody)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

        Intent intent = new Intent(click_action);
        intent.putExtra("message", dataMessage);
        intent.putExtra("from_user_id", dataFrom);
        PendingIntent resultIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        builder.setContentIntent(resultIntent);
        int mNotificationId = (int) System.currentTimeMillis();
        NotificationManager mNotifyMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        mNotifyMgr.notify(mNotificationId, builder.build());
    }


    private void createNotificationChannel() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
            CharSequence name = "Personal Notifications";
            String desc = "Include all the personal notifications";
            int importance = NotificationManager.IMPORTANCE_DEFAULT;

            NotificationChannel notificationChannel = new NotificationChannel(getString(R.string.default_notification_channel_id), name, importance);
            notificationChannel.setDescription(desc);

            NotificationManager notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            notificationManager.createNotificationChannel(notificationChannel);
        }
    }

}

В чем может быть проблема?

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

У меня было это некоторое время назад. Держите ваш метод createNotificationChannel() в своем основном классе. Однако я предлагаю создать другой класс со статическим методом (для создания вашего уведомления), а затем просто вызвать его в классе FirebaseMessagingService. Попробуйте это:

public class NotificationHelper {
    public static void displayNotification(Context context,String title,String body){
        NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context,CHANNELID)
                .setSmallIcon(R.drawable.ic_launcher)
                .setContentTitle(title)
                .setContentText(body)
                .setPriority(NotificationCompat.PRIORITY_DEFAULT);

        NotificationManagerCompat managerCompat =  NotificationManagerCompat.from(context);
        managerCompat.notify(1,mBuilder.build());
    }
}

Затем в вашем классе FMService просто вызовите статический метод после канала уведомлений, например, так:

 public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        createNotificationChannel();
        if(remoteMessage.getNotification()!=null){
            String messageTitle = remoteMessage.getNotification().getTitle();
            String messageBody = remoteMessage.getNotification().getBody();
            NotificationHelper.displayNotification(getApplicationContext(),messageTitle,messageBody);
        }

С вами все будет в порядке.

0 голосов
/ 21 октября 2019

Проблема в том, что вы настроили таргетинг на Oreo и выше в своем канале createNotificationsChannel.

Точное место нацеливания на oreo и выше:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O)

Причина, по которой это произошло, заключается в коде, указанном ниже, так как он был добавлен в APIУровень 26. Вам нужно будет найти альтернативную версию для более низких уровней.

notificationManager.createNotificationChannel(notificationChannel);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...