Php 通过Amazon SNS以JSON格式发送iOS推送通知
我正在将自己的iOS推送服务迁移到Amazon SNS中。以前我是通过我们自己的服务器推送消息,这已经不够了 后端是用PHP构建的,下面是我如何使用旧解决方案发送pushnotification的一些代码:Php 通过Amazon SNS以JSON格式发送iOS推送通知,php,ios,amazon-web-services,push-notification,amazon-sns,Php,Ios,Amazon Web Services,Push Notification,Amazon Sns,我正在将自己的iOS推送服务迁移到Amazon SNS中。以前我是通过我们自己的服务器推送消息,这已经不够了 后端是用PHP构建的,下面是我如何使用旧解决方案发送pushnotification的一些代码: $body = array( 'alert' => array('body' => $id, 'action-loc-key' => 'read this', 'loc-key' =>
$body = array(
'alert' => array('body' => $id,
'action-loc-key' => 'read this',
'loc-key' => '%@',
'loc-args' => array($message)),
'badge' => '0',
'sound' => 'default',
'content-available' => '1'
);
这就是我发送的通知的主体。现在,我想用AWS PHP SDK通过SNS发送相同的通知
我发现我必须通过以下方式发送推送通知:
$result = $snsClient->publish(array(
'TargetArn' => $target,
// Message is required
'Message' => $message,
'MessageStructure' => 'json'
));
在上面的代码示例中,$message是什么?感谢您的帮助
编辑:我已经使用以下JSON成功地通过SNS仪表板发送了pushnotification。我的问题是通过PHPSDK复制这个
{
“APNS:“{\'aps\':{\'alert\':{\'body\':\'7500\',\'action loc key\':\'read this\',\'loc key\':\'%@\,\'loc args\':[\'Message\']},\'badge\':\'0\',\'sound\':“default\',\'content available\':\'1\'}”
}我不知道这是否适用于您的目的,但在AWS SNS API仪表板中,发送单个消息的格式如下:
{"APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"}
{
"default": "HERE IS AN ALERT, BADGE, and SOUND",
"APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"
}
要发送到仪表板中的主题,请使用如下字符串:
{"APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"}
{
"default": "HERE IS AN ALERT, BADGE, and SOUND",
"APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"
}
从仪表板发送时需要转义引号
当发送到生产时,您用
APNS
替换了APNS\u沙箱
,我设法解决了这个问题
下面的代码做到了这一点,我以前的尝试既没有创建好的json字符串(请注意,其中有两个json_编码),也没有所需的“默认”json键
$message = json_encode(array(
'default' => $message,
'APNS' => json_encode(array(
'aps' => array(
'alert' => array('body' => $id,
'action-loc-key' => 'read this',
'loc-key' => '%@',
'loc-args' => array($message)),
),
'badge' => '0',
'sound' => 'default',
'content-available' => '1'
))
));
$result = $snsClient->publish(array(
'TargetArn' => $target,
'MessageStructure' => 'json',
'Message' => $message
));
关于GrapplingCoder的答案,下面是用于发送基本推送通知的JSON,其中包含使用默认通知声音的文本:
{
"APNS": "{\"aps\":{\"alert\": \"This is your message text!\",\"sound\":\"default\"} }"
}
谢谢但我的问题是从我自己的后端开始。我应该提到,我已经用以下json通过SNS仪表板发送了一条成功的消息:{“APNS”:“{“aps\”:{“alert\”:{“body\”:“7500\”,“action loc key\”:“read this\”,“loc key\”:“%@\”,“loc args\”:[“message\”],“badge\”:“0\,“sound\”:“default\”,“content available\”:“1\”}我如何通过PHPSDK重现这个问题呢?今天我遇到了这个问题,答案很好,但不能在badge count中使用引号,否则它在当前的Amazon SNS仪表板上无法工作。像这样{“APNS\U沙盒”:“{”aps\“:{”警报\“:\”测试警报、徽章和声音\“,\”徽章\“:1,\”声音\“:\”默认\“}}”将正常工作。我很高兴你把问题解决了!