如何向特定平台发送通知?
我想向Android和iOS发送两个不同的通知。 我想向iOS发送通知消息,这样iOS就会显示一个不错的通知。 对于Android我想发送数据消息,这样我就可以在Android上以及在后台处理通知(因为我没有在后台获得回调并希望自己处理它)。
我查看了文档,但找不到有关发送到特定平台的任何信息。 我怎么做?
关于如何做到这一点的其他建议也是受欢迎的,但请记住,我特别想通过Android上的回调自己处理通知(onMessageReceived)
更新 :为FCM添加了最新function,该function提供了为特定平台提供特定参数的选项,称为平台覆盖 :
跨平台自定义消息
FCM v1 HTTP协议发送的消息可以包含两种类型的JSON密钥对:
- 由接收消息的所有应用程序实例解释的一组公用键。
- 特定于平台的键块仅由在指定平台上运行的应用程序实例解释。
特定于平台的块使您可以灵活地为不同平台自定义消息,以确保在接收时正确处理它们。 在许多情况下,在给定消息中使用公共密钥和特定于平台的密钥是有意义的。
何时使用普通键
- 每当您在所有平台上定位应用实例时 – iOS,Android和网络
- 当您向主题发送消息时
所有应用程序实例(无论平台如何)解释的公共密钥都是
message.notification.title
,message.notification.body
和message.data
。何时使用特定于平台的密钥
- 当您只想将字段发送到特定平台时
- 除了公共密钥之外,还要发送特定于平台的字段
无论何时只想将值发送到特定平台,都不要使用公共密钥; 使用特定于平台的密钥块。 例如,要仅向iOS和Web发送通知,而不是Android,您必须使用两个单独的键块,一个用于iOS,另一个用于Web。
发送具有特定传送选项的邮件时,请使用特定于平台的密钥进行设置。 如果需要,您可以为每个平台指定不同的值; 但即使您希望跨平台设置基本相同的值,也必须使用特定于平台的密钥。 这是因为每个平台可能会略微区别地解释该值 – 例如,在Android上将生存时间设置为以秒为单位的到期时间,而在iOS上将其设置为到期日期 。
示例:具有特定于平台的交付选项的通知消息
以下v1发送请求向所有平台发送公共通知标题和内容,但也发送一些特定于平台的覆盖。 具体来说,请求:
- 为Android和Web平台设置了较长的生存时间,同时将APN(iOS)消息优先级设置为较低的设置
- 设置适当的键以定义用户点击Android和iOS上的通知的结果 –
click_action
和category
。
{ "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参考文档 。 有关构建包含消息正文的发送请求的详细信息,请参阅构建发送请求 。
我记得之前回答过类似的问题,但似乎无法找到它。 目前没有选项可以指定发送消息的平台。 最简单的方法是使用Topics Messaging。
每次第一次生成令牌时,您都会从客户端应用程序确定平台类型并将其订阅到相应的主题(例如topics/(Android/iOS)_
),然后根据需要确定消息。
从服务器跟踪注册令牌也很好,如果您使用的是Firebase数据库,则可以将它们放在节点中:
/pushTokens /android /{userId} : string /ios /{userid}: string
这样您就可以从后端进行检查,并在发送单个邮件时根据需要调整有效负载。
我在Android开发中遇到了同样的问题。 我们在后端使用了Laravel。 在后端方面,开发人员必须为两个平台维护不同的方案。
在Android中:
FCM::sendTo($tokens, $option, null, $data);
这里,null作为通知构建器传递。 当您在通知中传递null并创建数据库($ data)时,您可以在后台应用程序时在onMessageReceived方法中接收消息。
对于iOS:
FCM::sendTo($tokens, $option, $notification, $data);
在这里,您可以在$ notification中传递通知构建器。 所以,iOS设备也可以获得通知。
- Android / iOS如何确定使用传感器的距离的微小变化?
- 我如何添加一个“共享”选项到iOS / iPhone或Android图像库?
- DFP广告pipe理系统广告 – 为插页式广告设置Facebook受众群体调解(AdUnit + LineItem + creative)
- 将联系人添加到HTML网页的移动设备地址簿中
- 如何从PhoneGap camera.getPicture获取File对象?
- 移动设备上的TensorFlow(Android,iOS,Windows Phone)
- 从iOS和Android端连接到xmpp时获取所有群组消息
- 无需用户知道,就可以使用基于cordova / phonegap的现有原生应用程序进行交换
- 在Swift Base64编码不会在Android中解码