发送FCM消息时的状态否定

时间:2016-09-01 16:23:20

标签: android firebase firebase-cloud-messaging

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

FirebaseMessaging.getInstance().subscribeToTopic(APP_VERSION);

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

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

FCM中是否存在这样的内容?

3 个答案:

答案 0 :(得分:4)

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

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

我能想到的一些:

  1. 跟踪每个用户/设备ID在Map<Token, Version>类似结构中安装的应用版本。您可以使用Firebase数据库。

  2. 枚举所有旧版本并定位带有通知的版本。

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

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

答案 1 :(得分:2)

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

但是对于您的用例(向未更新的用户发送通知),我建议使用Firebase通知(不要与FCM,firebase云消息混淆),您可以找到文档here。< / p>

关键是,在firebase控制台中,您可以按应用版本过滤目标。请参阅下面particular part of the doc的屏幕截图。我自己在生产中多次测试它并且它很有效。 enter image description here

答案 2 :(得分:2)

现在看起来Firebase支持这个! Firebase send-message

  

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

的用法      

!('TopicA' in topics)

     

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