Android 发送FCM消息时条件为否定

Android 发送FCM消息时条件为否定,android,firebase,firebase-cloud-messaging,Android,Firebase,Firebase Cloud Messaging,我正在订阅一个主题,它是我在Android中的应用程序版本 FirebaseMessaging.getInstance().subscribeToTopic(APP_VERSION); 现在,每次启动更新时,我都必须取消订阅旧版本并订阅新版本,因此,如果我发送更新通知,只有老用户才能收到。相反,如果我只是否定一个版本就好了 "condition": "!'2.1.1' in topics", FCM中是否存在类似的内容?开箱即用主题不支持“未订阅xxx的人”之类的操作 但是,对于您的用例(向

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

FirebaseMessaging.getInstance().subscribeToTopic(APP_VERSION);
现在,每次启动更新时,我都必须取消订阅旧版本并订阅新版本,因此,如果我发送更新通知,只有老用户才能收到。相反,如果我只是否定一个版本就好了

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

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

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

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

关键是,在firebase控制台中,您可以按应用程序版本筛选目标。请参见下面的屏幕截图。我自己在生产中多次测试过,效果非常好。

您只能根据用户是否订阅了某个主题来确定目标用户,而不能根据用户是否订阅了主题来确定目标用户

由于通配符匹配仅在Firebase通知(尚未存在公共API)中可用,并且控制台只能发送通知消息(如果应用程序不在前台,则确实由系统处理),因此您的选项仅限于解决方法

我能想到几个:

  • 跟踪每个用户/设备ID已安装在类似于
    地图的结构中的应用程序版本。您可以使用Firebase数据库来实现这一点

  • 枚举所有旧版本并以带有通知的版本为目标

  • (通过云消息API)向所有人发送包含新版本公告的数据消息,然后在
    onMessageReceived()
    中禁止显示消息(如果他们已经有最新版本)


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

    Firebase现在似乎支持此功能

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

    !(“主题”中的“TopicA”)

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


    Firebase console的唯一问题是,当应用程序位于后台时,通知会发送到设备系统托盘,无法对其进行自定义。我知道,您可以自定义标题和说明(我认为是声音),但实际上仅此而已。我相信他们会在未来几个月增加更多的定制,你有兴趣定制什么?应用程序图标和待定的意图。我希望用户直接访问Play Store,而不是我的应用程序。我找到了一个解决方法,而不是否定。我将更改版本号常量,并与通过FCM发送的版本号进行比较。我已经在继续使用解决方案3,如其他答案的注释中所述。这在版本firebase admin==5.0..0中不再起作用