首页 文章

AWS SNS发布的消息未被推送到设备

提问于
浏览
2

我正在尝试使用AWS SNS作为运行我自己的向iOS和Android应用程序发送推送通知服务的替代方案 . 我从GCM开始,所以我在SNS中创建了一个GCM应用程序,然后添加了一个 endpoints .

当我从AWS控制台发布消息时,它可以很好地进入设备,但是当我通过AWS PHP SDK发布时,它会返回一个messageId(因此SNS收到消息),但不会推送到设备 .

这是我做的:

$snsclient = Aws\Sns\SnsClient::factory(array(
    "version" => "2010-03-31",
    "region" => "eu-west-1",
    "credentials" => array(
        "key" => "***********",
        "secret" => "***********"
    )
));
$publish_result = $snsclient->publish(array(
    "TargetArn" => "arn:aws:sns:eu-west-1:*********:endpoint/GCM/*******/********",
    "Message" => "MESSAGE",
    "Subject" => "SUBJECT",
));

然后导致

object(Aws\Result)#96 (1) {
  ["data":"Aws\Result":private]=>
  array(2) {
    ["MessageId"]=>
    string(36) "********************"
    ["@metadata"]=>
    array(3) {
      ["statusCode"]=>
      int(200)
      ["effectiveUri"]=>
      string(35) "https://sns.eu-west-1.amazonaws.com"
      ["headers"]=>
      array(4) {
        ["x-amzn-requestid"]=>
        string(36) "****************"
        ["content-type"]=>
        string(8) "text/xml"
        ["content-length"]=>
        string(3) "294"
        ["date"]=>
        string(29) "Mon, 27 Jun 2016 10:20:26 GMT"
      }
    }
  }
}

编辑:我刚才意识到,如果我将MessageStructure设置为json,然后将Message设置为'{“GCM”:“{\”data \“:{\”message \“:\”aa \“}}}}',它送好了 . 发送原始的问题是什么?我应该选择哪种方式?我认为raw更好,因为它允许我使用相同的结构发送到iOS和Android(然后SNS会为我正确构建消息)...

谢谢,约瑟夫 .

1 回答

  • 0

    Push Notifications to Mobile Devices Using Amazon SNS中所述,您需要执行以下操作来创建可以接收推送通知的移动应用程序:

    为受支持的设备和消息传递API创建应用程序 . 应用必须使用设备API向本地平台通知服务注册才能接收通知 . 使用SNS的CreatePlatformApplication函数创建应用程序的服务器端表示 . 注册设备,因为您的服务器代码通过调用SNS CreatePlatformEndpoint函数来了解它们 . 此函数将返回唯一标识设备的ARN(Amazon资源名称) . 通过使用设备的ARN调用“发布”功能,将消息直接发送到特定设备 . 通过调用相同的发布功能将消息发送到订阅主题的所有设备,但使用该主题的ARN .

    在给定文档中显示了一个优秀的示例代码,其中使用了最新版本的AWS SDK for PHP,并将逐步指导您如何实现GCM .

    除此之外,初学者还可以使用此引用 - What is Amazon Simple Notification Service?Getting Started with Amazon Simple Notification Service获取更多信息 .

相关问题