Push-уведомление не работает в Oreo (8.1.0) после закрытия приложения - PullRequest
0 голосов
/ 18 января 2019

Android: 8.1.0 Устройство: Infinix X604B

Проблема: Использование «Notification Composer» в консоли Firebase для отправки уведомления в мое подписанное приложение для выпуска. Все работает, когда мое приложение находится на переднем плане / фоне. Когда я закрываю приложение, выгружая его из списка открытых приложений, отправленные уведомления не принимаются.

Я получаю следующее в моем logcat :

2019-01-18 12: 22: 21,758 2015-11920 /? I / ActivityManager: Убийство 15197: com.tsp.fcm / u0a148 (прил. 900): удалить задачу

2019-01-18 12: 22: 21,831 2015-2108 /? W / InputDispatcher: канал '92faa4f com.tsp.fcm / com.tsp.fcm.MainActivity (сервер)' ~ Потребитель закрыт входной канал или произошла ошибка. события = 0x9

2019-01-18 12: 22: 21,831 2015-2108 /? E / InputDispatcher: канал '92faa4f com.tsp.fcm / com.tsp.fcm.MainActivity (сервер)' ~ Канал неисправно сломан и будет уничтожен!

2019-01-18 12: 22: 21,831 2015-2151 /? Я / WindowManager: ВЫИГРАТЬ СМЕРТЬ: Окно {92faa4f u0 com.tsp.fcm / com.tsp.fcm.MainActivity} 2019-01-18 12: 22: 21,832 2015-2151 /? W / InputDispatcher: попытка отменить регистрацию уже незарегистрированный входной канал '92faa4f com.tsp.fcm / com.tsp.fcm.MainActivity (сервер) '

2019-01-18 12: 22: 21,837 2015-3498 /? V / ActivityManager: Умирающий процесс: com.tsp.fcm, pid: 15197 не удалось перезапустить.

2019-01-18 12: 22: 37,405 2015-2030 /? D / ProcessManager.AS: *** Пропустить {com.tsp.fcm} для приема трансляции.

2019-01-18 12: 22: 37.406 2015-2030 /? D / BroadcastQueue: *** Не запускается приложение com.tsp.fcm / 10148 для трансляции Intent { act = com.google.android.c2dm.intent.RECEIVE flg = 0x11000010 pkg = com.tsp.fcm (есть дополнения)} из com.google.android.gms / 10020. (Автостарт ограничен)

2019-01-18 12: 22: 37,413 2727-2727 /? W / GCM: широковещательный обратный вызов: result = CANCELED forIntent { act = com.google.android.c2dm.intent.RECEIVE flg = 0x10000000 pkg = com.tsp.fcm (есть дополнения)}

1 Ответ

0 голосов
/ 19 января 2019

В Android 8.0 представлены каналы уведомлений, которые позволяют создавать настраиваемые пользователем каналы для каждого типа уведомлений, которые вы хотите отображать.

Мы можем отделить поведение уведомлений, создав каналы для каждого из них. Если для уведомления не указан канал, это уведомление не будет отображаться в строке состояния.

До Android Oreo, когда мы хотели создать уведомление, мы должны были сделать что-то вроде этого:

    /**Creates an explicit intent for an Activity in your app**/
    Intent resultIntent = new Intent(mContext , SomeOtherActivity.class);
    resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

    PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
            0 /* Request code */, resultIntent,
            PendingIntent.FLAG_UPDATE_CURRENT);

    mBuilder = new NotificationCompat.Builder(mContext);
    mBuilder.setSmallIcon(R.mipmap.ic_launcher);
    mBuilder.setContentTitle(title)
            .setContentText(message)
            .setAutoCancel(false)
            .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
            .setContentIntent(resultPendingIntent);

    mNotificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);

    assert mNotificationManager != null;
    mNotificationManager.notify(0 /* Request Code */, mBuilder.build());

Теперь с Android Oreo, чтобы отобразить одно уведомление, нам нужно будет сделать что-то вроде этого (Проверьте добавлено, если):

        /**Creates an explicit intent for an Activity in your app**/
        Intent resultIntent = new Intent(mContext , SomeOtherActivity.class);
        resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

        PendingIntent resultPendingIntent = PendingIntent.getActivity(mContext,
                0 /* Request code */, resultIntent,
                PendingIntent.FLAG_UPDATE_CURRENT);

        mBuilder = new NotificationCompat.Builder(mContext);
        mBuilder.setSmallIcon(R.mipmap.ic_launcher);
        mBuilder.setContentTitle(title)
                .setContentText(message)
                .setAutoCancel(false)
                .setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
                .setContentIntent(resultPendingIntent);

        mNotificationManager = (NotificationManager) mContext.getSystemService(Context.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);
            notificationChannel.enableLights(true);
            notificationChannel.setLightColor(Color.RED);
            notificationChannel.enableVibration(true);
            notificationChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
            assert mNotificationManager != null;
            mBuilder.setChannelId(NOTIFICATION_CHANNEL_ID);
            mNotificationManager.createNotificationChannel(notificationChannel);
        }

        assert mNotificationManager != null;
        mNotificationManager.notify(0 /* Request Code */, mBuilder.build());
...