我正在使用Firebase Cloud Messaging发送通知,并使用ShortcutBadger更新应用徽章上的未读消息数。我扩展了FirebaseMessagingService类并实现了覆盖方法onMessageReceived,由于我的应用程序在后台或被杀死时会收到通知,因此该方法似乎运行良好。但是,当我在此方法中添加ShortcutBadger调用时,我不再收到通知,并且ShortcutBadger调用不起作用。

ShortcutBadger需要一个Context,并且由于FirebaseMessagingService扩展了Service,因此它是一个上下文,这就是为什么我只传递this的原因。我的代码的其他部分也有ShortcutBadger,所以我知道它可以工作。

任何建议,将不胜感激。

public class Notifications extends FirebaseMessagingService {

    @Override
    public void onMessageReceived(RemoteMessage remoteMessage) {
        super.onMessageReceived(remoteMessage);
        ShortcutBadger.applyCount(getApplicationContext(), 1); // <-- now is working
    }

}


编辑:服务器端代码

这是发送Firebase消息的服务器端代码。

Notification notification = new Notification.Builder(null)
        .title(msg.getTitle())
        .badge(msg.getBadge())
        .body(msg.getMessage())
        .build();


Message message = new Message.Builder()
        .timeToLive(timeToLive)
        .delayWhileIdle(true)
        .notification(notification)
        .addData("text", msg.getMessage())
        .addData("title", msg.getTitle())
        .addData("line1", msg.getSubtitle())
        .addData("badge", String.valueOf(msg.getBadge()))
        .addData("qummute_notification", "true")
        .build();

Result result = send(message, deviceKey, retries);


建议我发送不带通知有效载荷的消息。会尝试一下,看看会发生什么。

最佳答案

您确定测试期间没有呼叫ShortcutBadger.removeCount(Context context)吗?
尝试使用ShortcutBadger.applyCountOrThrow(Context context, int badgeCount)来查看是否抛出任何异常。
onMessageReceived(RemoteMessage remoteMessage)在后台线程上被调用。也许您正在测试的电话/发射器使用的徽章无法从后台线程创建和显示。

08-05 11:52