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

Php AWS SNS发布的消息未被推送到设备,php,push-notification,google-cloud-messaging,aws-sdk,amazon-sns,Php,Push Notification,Google Cloud Messaging,Aws Sdk,Amazon Sns,我正在尝试使用AWS SNS作为运行我自己的服务(向iOS和Android应用程序发送推送通知)的替代方案。我从GCM开始,所以我在SNS中创建了一个GCM应用程序,然后添加了一个端点 当我从AWS控制台发布消息时,它会很好地传递到设备,但当我通过AWS PHP SDK发布消息时,它会返回一个messageId(因此SNS获得了消息),但不会推送到设备 我是这样做的: $snsclient = Aws\Sns\SnsClient::factory(array( "version" =&g

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

当我从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会为我正确地构建消息)

谢谢, Joseph.

如中所述,以下是创建可接收推送通知的移动应用程序所需执行的操作:

  • 为受支持的设备和消息传递API创建应用程序。应用程序必须使用设备API向本地平台通知服务注册,才能接收通知
  • 使用SNS的
    CreatePlatformApplication
    功能创建应用程序的服务器端表示
  • 通过调用SNS
    CreatePlatformEndpoint
    函数,在服务器代码意识到设备时注册设备。此函数将返回唯一标识设备的ARN(亚马逊资源名称)
  • 通过使用设备的ARN调用
    Publish
    功能,直接向特定设备发送消息
  • 通过调用相同的
    Publish
    函数向订阅了某个主题的所有设备发送消息,但使用该主题的ARN
  • 在给定的文档中显示了一个优秀的示例代码,其中使用了最新版本的AWS SDK for PHP,并将逐步指导您如何实现GCM


    除此之外,初学者还可以使用此引用,以获取更多信息。

    我创建了平台应用程序和端点,但在发布消息时,如中所示。如果不指定
    'MessageStructure'=>'json'
    ,它就无法正常工作。最后,我为不同的平台构建了一个具有不同属性的JSON格式的消息。在我看来,这样做是正确的。这是一个答案还是aws sns的纪录片?谢谢编辑@john rotenstein。这对我很有效,节省了我大量的调查时间。