【问题标题】:Message multiple platforms through AWS SNS with aws-ruby-sdk使用 aws-ruby-sdk 通过 AWS SNS 向多个平台发送消息
【发布时间】:2017-02-16 00:35:15
【问题描述】:

我正在尝试使用 Amazon 的 Ruby SDK 为不同平台(即 APNS 和 GCM(Apple 和 Android 设备))发送带有附加属性的推送通知,但我找不到使用 SDK 发送记录消息结构的方法API。

要为 GCM 和 APNS 发送具有不同负载的消息,我发现的文档建议使用以下结构:

{
  "APNS": {
    "aps": {
      "alert": "someone set us up the bomb"
    }
  },
  "GCM": {
    "data": {
      "message": "we get signal"
    }
  }
}

我希望 SNS 能够正确地将特定于平台的有效负载发送到正确的平台端点,但发送到例如 android 设备的消息也包括 APNS 有效负载 - 它包括完整的消息正文。

这是我发送消息的方式:

sns = AWS::SNS::Client.new
sns.publish(
  target_arn: endpoint_arn,
  message: {
    GCM: ...,
    APNS: ...
  }.to_json
)

可用的文档,特别是关于 ruby​​ sdk 的文档,似乎并不那么详细。我认为有效载荷应该根据端点平台正确分布的假设是否不正确?有没有更好的方法来实现我想要做的事情?

【问题讨论】:

    标签: android ios ruby amazon-web-services amazon-sns


    【解决方案1】:

    您可能已经知道这一点,但下面是它在 PHP 上的工作方式。可能消息结构与 Ruby 中的相同:

    publish(array(
            'TopicArn' => 'YOUR_TOPIC_ARN',
            'Message' => '{ 
                            "default": "YOUR_MESSAGE", 
                            "email": "YOUR_MESSAGE", 
                            "sqs": "YOUR_MESSAGE", 
                            "http": "YOUR_MESSAGE", 
                            "https": "YOUR_MESSAGE", 
                            "sms": "YOUR_MESSAGE", 
                            "APNS": "{\"aps\":{\"alert\": \"YOUR_MESSAGE\",\"sound\":\"default\", \"badge\":\"1\"} }", 
                            "GCM": "{ \"data\": { \"message\": \"YOUR_MESSAGE\" } }", 
                            "ADM": "{ \"data\": { \"message\": \"YOUR_MESSAGE\" } }"
                        }',
            'MessageStructure' => 'json'
        ));
    

    【讨论】:

      【解决方案2】:

      老故事,但这是我在@user3719626 灵感之后设法做到的:

      client.publish({
        target_arn: @endpoint_arn,
        message: {
          "default" => "Default message. Used only if the target does not support any other format.",
          "APNS"    => {
                         "aps" => {
                                    "alert" => "Whatever!",
                                    "url"   => "stackoverflow.com",
                                  }
                       }.to_json,
          "GCM"     => {
                         "data" => {
                                     "message" => "Whatever!",
                                     "url"     => "stackoverflow.com"
                                   }
                       }.to_json,
        }.to_json,
        message_structure: 'json',
      })
      

      注意事项:

      • clientAWS::SNS::Client 的一个实例。
      • @endpoint_arn 是一个包含目标端点/主题 ARN 标识符的字符串。
      • message 必须是字符串,这里必须是 JSON 字符串。
      • 每个平台键也必须指向一个 JSON 字符串。所以每个平台值都被“JSON 化”了两次。

      【讨论】:

      • 你知道我们是否可以通过推送发送一些有效负载(例如:标识符等),以便设备可以在操作中使用?
      • 我不完全理解你的问题。如果您的意思是决定有效载荷的内容,是的,您可以。主要有结构(字典中的键)要尊重的条件和大小限制。事实上,我在去年的一个实现中已经用标识符通知了——这不是新的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-02
      • 2021-01-22
      • 2023-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多