【问题标题】:Android notifications when app is in background应用程序在后台时的 Android 通知
【发布时间】:2018-01-17 12:37:56
【问题描述】:

我正在从 google firebase 为我的 Android 应用程序发送推送通知,目标为 Android 5.0:

我的推送通知代码是:

@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
    String badge = "0";
    Uri uri = Uri.parse(
            getString(R.string.app_host_name)
    );

    Map<String, String> data = remoteMessage.getData();
    if (data.size() > 0) {
        try {
            uri = Uri.parse(
                    data.get("link")
            );

            badge = data.get("badge");
        } catch (NullPointerException e) {
            //
        }
    }

    if (remoteMessage.getNotification() != null) {
        RemoteMessage.Notification notification = remoteMessage.getNotification();
        sendNotification(notification.getTitle(), notification.getBody(), uri.toString(), badge);
    }
}



private void sendNotification(String title, String body, String url, String badge) {
    Intent intent = new Intent(this, MainActivity.class);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

    if (Patterns.WEB_URL.matcher(url).matches()) {
        intent.putExtra("link", url);
    }

    PendingIntent pendingIntent = PendingIntent.getActivity(
            this,
            0,
            intent,
            PendingIntent.FLAG_UPDATE_CURRENT
    );

    Resources resources = getApplicationContext().getResources();

    NotificationCompat.Builder notificationBuilder =
            new NotificationCompat.Builder(this, "default")
                    .setColor(
                            resources.getColor(R.color.colorPrimaryDark)
                    )
                    .setSmallIcon(
                            R.drawable.ic_stat_icon
                    )
                    .setContentTitle(title)
                    .setContentText(body)
                    .setAutoCancel(true)
                    .setNumber(Integer.parseInt(badge))
                    .setLargeIcon(
                            BitmapFactory.decodeResource(
                                    resources,
                                    R.mipmap.ic_launcher
                            )
                    )
                    .setContentIntent(pendingIntent);

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

    if (Build.VERSION.SDK_INT >= 26) {
        NotificationChannel notificationChannel = new NotificationChannel(
                "default",
                "Main notification channel",
                NotificationManager.IMPORTANCE_HIGH
        );

        notificationManager.createNotificationChannel(
                notificationChannel
        );
    }

    notificationManager.notify(
            1,
            notificationBuilder.build()
    );
}

当应用程序处于活动/打开/不在后台时,一切都非常完美,但是当它不是时,通知不会分组,没有显示数字,并且对所有这些设置都没有反应,我是什么只能通过清单设置更改小图标和圆圈颜色

    <meta-data
        android:name="com.google.firebase.messaging.default_notification_icon"
        android:resource="@drawable/ic_stat_icon" />
    <meta-data
        android:name="com.google.firebase.messaging.default_notification_color"
        android:resource="@color/colorPrimaryDark" />

但是为什么呢?就像当应用程序处于后台时,通知没有使用 Activity 代码中的设置,而是仅使用 AndroidManifest 中的某种“默认”设置。

【问题讨论】:

  • 您可以使用透明图标进行通知。
  • 是的,我知道,但问题不是图标,问题是应用程序在后台运行时的不同选项,应用程序没有使用 setNumbersetAutoCancel、setSmallIconsetLargeIcon 选项,没有清单中未定义的内容

标签: java android firebase firebase-cloud-messaging


【解决方案1】:

正如你在 cmets 中所说:

当应用处于后台时,应用不采用 setNumber、setAutoCancel、setSmallIcon、setLargeIcon 选项

这是因为您使用通知负载发送仅在前台触发的通知。

所以当你的应用在后台时它不会进入这个方法。

要解决这个问题,您可以单独使用 data 有效负载:

"data": {
"titles": "New Title",
"bodys": "body here"
}

因为当您的应用处于前台/后台时,数据负载将进入onMessageReceived()

那么在 fcm 中你可以这样做:

  if (remoteMessage.getData().size() > 0) {

        title = remoteMessage.getData().get("titles");
        body = remoteMessage.getData().get("bodys");
    }

【讨论】:

  • 更新了我的起始帖子,我已经在这样做了,但这不起作用,例如它对通知图标没有影响
  • 标题和正文似乎是通知负载,这个notification.getTitle(), notification.getBody()
  • 原来我发送的是带有数据有效负载的通知消息,而不是数据消息 (firebase.google.com/docs/cloud-messaging/…)
  • @MyMomSaysIamSpecial 请将其标记为已解决..如果提供的解决方案已解决问题.. 或请使用您找到的解决方案更新它..
  • @PeterHaddad nope.. :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多