应用关闭后,推送通知在Oreo(8.1.0)中不起作用

时间:2019-01-18 07:01:53

标签: android push-notification firebase-cloud-messaging

Android:8.1.0 设备:Infinix X604B

问题: 在Firebase控制台中使用“ Notification Composer”将通知发送到我的签名发布应用。 当我的应用程序位于前台/后台时,一切正常。当我通过从打开的应用列表中换出来关闭应用时,不会收到发送的通知。

我在 logcat 中得到关注:

  

2019-01-18 12:22:21.758 2015-11920 /? I / ActivityManager:杀死   15197:com.tsp.fcm / u0a148(adj 900):删除任务

     

2019-2108 / 2019-01-18 12:22:21.831 W / InputDispatcher:频道   '92faa4f com.tsp.fcm / com.tsp.fcm.MainActivity(服务器)'〜使用者   输入通道关闭或发生错误。事件= 0x9

     

2019-2108 / 2019-01-18 12:22:21.831 E / InputDispatcher:通道   '92faa4f com.tsp.fcm / com.tsp.fcm.MainActivity(服务器)'〜频道为   不可恢复的破碎,将被处置!

     

2019-01-18 12:22:21.831 2015-2151 /? I / WindowManager:WIN DEATH:   窗口{92faa4f u0 com.tsp.fcm / com.tsp.fcm.MainActivity} 2019-01-18   2015-2151 12:22:21.832 /? W / InputDispatcher:尝试注销   已经未注册的输入通道'92faa4f   com.tsp.fcm / com.tsp.fcm.MainActivity(服务器)'

     

2019-3498 / 2019-01-18 12:22:21.837 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 = CANCELLED forIntent {   act = com.google.android.c2dm.intent.RECEIVE flg = 0x10000000   pkg = com.tsp.fcm(有其他功能)}

1 个答案:

答案 0 :(得分:0)

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());