繁体   English   中英

如何将通知发送到特定平台?

[英]How to send a notification to specific platform?

我想向Android和iOS发送两个不同的通知。 我想向iOS发送通知消息,这样iOS会显示一个不错的通知。 对于Android,我想发送数据消息,这样我就可以在Android和后台处理通知(因为我没有在后台收到回调,而是想自己处理)。

我浏览了文档,但找不到有关发送到特定平台的任何信息。 我怎么做?

还欢迎提供有关如何执行此操作的其他建议,但请记住,我特别希望自己通过Android上的回调(onMessageReceived)处理通知

更新 :为FCM添加了一项最新功能,该功能提供了为特定平台提供特定参数的选项,称为Platform Overrides

跨平台自定义消息

FCM v1 HTTP协议发送的消息可以包含两种类型的JSON密钥对:

  • 接收消息的所有应用程序实例将解释的一组通用键。
  • 特定于平台的键块仅由在指定平台上运行的应用程序实例解释。

特定于平台的块使您可以灵活地针对不同平台自定义消息,以确保在收到消息后正确处理它们。 在许多情况下,在给定消息中同时使用公共密钥和特定于平台的密钥都是有意义的。

何时使用通用键

  • 每当您在所有平台(iOS,Android和Web)上定位应用程序实例时
  • 当您向主题发送消息时

无论平台如何,所有应用程序实例都可以解释的公用密钥是message.notification.titlemessage.notification.bodymessage.data

何时使用平台专用键

  • 当您只想将字段发送到特定平台时
  • 除公用密钥外,还发送平台特定的字段

每当您只想将值发送到特定平台时,请不要使用公用密钥。 使用平台特定的键块。 例如,要将通知仅发送到iOS和Web,而不发送给Android,则必须使用两个单独的键块,一个用于iOS,另一个用于Web。

使用特定的传递选项发送邮件时,请使用特定于平台的密钥进行设置。 您可以根据需要在每个平台上指定不同的值。 但是即使您希望在平台之间设置基本相同的值,也必须使用平台特定的键。 这是因为每个平台对值的解释都略有不同-例如,将生存时间在Android上设置为以秒为单位的到期时间,而在iOS上将其设置为到期日期

示例:带有特定于平台的传递选项的通知消息

以下v1发送请求将通用通知标题和内容发送到所有平台,但还会发送一些特定于平台的替代。 具体来说,请求:

  • 为Android和Web平台设置了较长的生存时间,同时将APN(iOS)消息优先级设置为较低的设置
  • 设置适当的键来定义用户在Android和iOS上点击通知的结果click_actioncategory
{
  "message":{
     "token":"bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
     "notification":{
       "title":"Match update",
       "body":"Arsenal goal in added time, score is now 3-0"
     },
     "android":{
       "ttl":"86400s",
       "notification"{
         "click_action":"OPEN_ACTIVITY_1"
       }
     },
     "apns": {
       "headers": {
         "apns-priority": "5",
       },
       "payload": {
         "aps": {
           "category": "NEW_MESSAGE_CATEGORY"
         }
       }
     },
     "webpush":{
       "headers":{
         "TTL":"86400"
       }
     }
   }
 }

有关消息主体中特定于平台的块中可用键的完整详细信息,请参见HTTP v1参考文档 有关构建包含消息正文的发送请求的更多信息,请参见构建发送请求


我记得以前回答过类似的问题,但似乎找不到。 当前没有选择指定将消息发送到哪个平台的选项。 您可以执行此操作的最简单方法是使用主题消息。

每次首次生成令牌时,您都将从客户端应用程序中确定平台类型,然后将其订阅相应的主题(例如topic topics/(Android/iOS)_<Your App Name> ),然后根据需要对消息进行筛选。

跟踪服务器中的注册令牌也很不错,如果您使用的是Firebase DB,则可以将它们放在一个节点中:

/pushTokens
  /android
    /{userId} : string
  /ios
    /{userid}: string

这样,您就可以从后端进行检查,并在发送单个消息时根据需要调整有效负载。

我在Android开发中也遇到了同样的问题。 我们在后端使用Laravel。 在后端,开发人员必须为两个平台维护不同的方案。

在Android中:

FCM::sendTo($tokens, $option, null, $data);

在此,将null作为通知生成器传递。 当您在通知中传递null并创建databuilder($ data)时,当应用程序在后台运行时,您可以通过onMessageReceived方法接收消息。

对于iOS:

FCM::sendTo($tokens, $option, $notification, $data);

在这里,您可以在$ notification中传递通知生成器。 因此,iOS设备也可以获取通知。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM