【问题标题】:Is aps dictionary necessary in iOS notification payload? Can we have same payload for iOS and Android?iOS通知有效负载中是否需要aps字典?我们可以为 iOS 和 Android 提供相同的有效负载吗?
【发布时间】:2017-02-14 05:23:24
【问题描述】:

我刚开始在 iOS 上处理通知,似乎苹果已经为有效负载定义了一种格式来接收通知。

所以目前,我正在使用这个有效载荷,一切都按预期工作。我正在获取标题、副标题、身体声音、图像。

{"aps" : {
        "alert" : {
            "title" : "Introduction To Notification",
            "subtitle" : "Session 707",
            "body" : "New Notification Look Amazing"
        },
       "sound" : "default",
        "category" : "message",
        "badge" : 1,
        "mutable-content": 1
    },
    "attachment-url": "https://pusher.com/static_logos/320x320.png"
}

假设我想为 Android 和 iOS 提供一个有效负载。

Android 中是否定义了通知的标准格式,或者您可以在 Android 中设置任何数据而客户端必须手动处理和显示这些通知?

如何创建对两者都适用的有效负载?

【问题讨论】:

  • @NayanSrivastava 对于 iOS,苹果已经设置了一个特定的键来显示警报。 android 的情况是否相同,或者我们可以提供任何 JSON 并以我们想要的方式显示数据
  • 您显示的有效负载:您是从 Firebase 控制台发送的吗?并且您按照 Firebase (FCM) 代码示例发送它?或者您是说您首先基于使用 Apple 推送通知 (APN) 的示例进行 iOS 测试?如果我的问题不清楚,请显示您在 iOS 应用中使用的代码,以便通知起作用。
  • Similar question。展开 cmets - 显然答案是“不,为 Android 和 iOS 用户发送单独的有效负载”。我在那里添加了一条评论,询问如何这样做。
  • @ToolmakerSteve 我正在从推送器发送有效负载,基本上我已经完成了 iOS 测试并且成功,只需要知道有没有一种方法可以创建可以在两个设备上工作的有效负载跨度>

标签: android ios google-cloud-messaging apple-push-notifications firebase-cloud-messaging


【解决方案1】:

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


您发布的示例有效负载似乎与official parameters for APNs 一致。使用GCMFCM时,使用的参数不同(见链接)。

Android 中是否为通知定义了标准格式,或者您可以在 Android 中设置任何数据,而客户端必须手动处理和显示这些通知?

这取决于您计划使用哪种类型的消息负载。 GCM/FCM 有2 types of Messagesnotificationdata

notification 消息只有预定义的可用参数集,而data 消息可用于自定义键值对。两者通常由客户端处理,但请注意AndroidiOS 的行为因您使用的消息类型而异(请参阅链接)。

如何创建一个对两者都适用的有效负载?

正如我在 other post 的 cmets 部分中提到的:

您必须在自己的数据库/应用服务器中进行映射。是的。我在这里的想法是,每次在客户端应用程序端生成注册令牌时,您都会将其发送到您的数据库/应用程序服务器,并按照设备类型(即“Android”、“iOS”)。因此,当您发送消息时,您首先必须检查设备的类型。我确实说过这是更多的工作,但这是让您控制事物的可靠方法。 AFAIK,开发人员有责任跟踪注册令牌以及应与之关联的任何详细信息。

【讨论】:

  • 所以您建议为 iOS 和 Android 使用单独的有效负载,对吧?
  • @SudhanshuGupta 是的。
  • 感谢您的信息
【解决方案2】:

您不能将自定义标签放在 aps 标签内。以下是相关文档的说明:

提供者可以在 Apple 保留的 aps 命名空间之外指定自定义负载值。自定义值必须使用 JSON 结构化和原始类型:字典(对象)、数组、字符串、数字和布尔值。 因此,在您的情况下,您应该执行以下操作:

{
    "aps": {
        "alert": "Hello World",
        "sound": "default"
    },
    "Person": {
        "Address": "Your address",
        "Name": "Your Name",
        "Number": "XXXXXXXXXX"
    }
}

因此,您可以通过在主 JSON 中而不是在“aps”中查找自定义有效负载来读取它:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    • 2017-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多