我尝试使用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 \":{\& #34;消息\":\" aa \"它发送正常。"}' 发送它的问题是什么? 我应该选择哪种方式?我认为raw更好,因为它允许我使用相同的结构发送到iOS和Android(然后SNS会为我正确构建消息)...
谢谢, 约瑟夫。
答案 0 :(得分:0)
详见Push Notifications to Mobile Devices Using Amazon SNS,您需要执行以下操作才能创建可接收推送通知的移动应用:
- 为受支持的设备和消息传递API创建应用。应用必须使用设备API向本地平台通知服务注册才能接收通知。
- 使用SNS的
CreatePlatformApplication
函数创建应用程序的服务器端表示。- 注册设备,因为您的服务器代码通过调用SNS
CreatePlatformEndpoint
功能来了解它们。此函数将返回唯一标识设备的ARN(Amazon资源名称)。- 通过使用设备的ARN调用
Publish
功能,将消息直接发送到特定设备。- 通过调用相同的
醇>Publish
函数向订阅主题的所有设备发送消息,但使用该主题的ARN。
在给定的文档中显示了一个优秀的示例代码,其中使用了最新版本的AWS SDK for PHP,并将逐步指导您如何实施GCM。
除此之外,初学者还可以使用此引用 - What is Amazon Simple Notification Service?和Getting Started with Amazon Simple Notification Service获取更多信息。