发送FCM消息时的状态否定

我正在订阅一个主题,这是我在Android中的应用程序版本。

FirebaseMessaging.getInstance().subscribeToTopic(APP_VERSION); 

现在,每次我启动更新时,我都必须取消订阅旧版本并订阅新版本,因此如果我发送更新通知,则只有旧用户才能获得更新。 相反,如果我只是否定一个版本,那就太棒了。

 "condition": "!'2.1.1' in topics", 

在FCM中是否存在类似的内容?

Related of "发送FCM消息时的状态否定"

您只能根据用户是否订阅某个主题来定位用户,而不是他们是否订阅。

由于通配符匹配仅适用于Firebase通知(尚未存在公共API),并且控制台只能发送通知消息(如果应用程序不在前台,确实由系统处理),您的选项将是仅限于解决问题。

我能想到的一些:

  1. 跟踪每个用户/设备ID已安装在Map结构中的应用程序Map 。 您可以使用Firebase数据库。

  2. 枚举所有旧版本并以通知为目标。

  3. 向所有人发送带有新版本通知的数据消息(通过Cloud Messaging API),然后禁止在onMessageReceived()显示消息onMessageReceived()如果已有最新版本)。

嗯……事后看来#3似乎是一个相当干净的解决方案。 你过度发送,但系统可以处理,只要频率不是太高,你的用户很可能不会受到太多影响。

开箱即用的主题不支持“未订阅xxx的人”等操作。

但是对于您的用例(向未更新的用户发送通知),我建议使用Firebase通知(不要与FCM,firebase云消息混淆),您可以在此处find该文档。

关键点在于,在firebase控制台中,您可以按应用版本过滤目标。 请参阅下面的文档特定部分的屏幕截图。 我自己在生产中多次测试过它并且效果很好。 在此处输入图像描述

看起来Firebase现在支持这个! https://firebase.google.com/docs/cloud-messaging/ios/topic-messaging

您可以在条件expression式中包含最多五个主题,并且支持括号。 支持的运算符:&&,|| ,! 注意!的用法:

!('TopicA' in topics)

使用此expression式,任何未订阅TopicA的应用程序实例(包括未订阅任何主题的应用程序实例)都会收到该消息。