我正在将自己的iOS推送服务迁移到Amazon SNS。以前我通过我们自己的服务器推送消息已经不够了。
后端是用PHP构建的,这是我用旧解决方案发送推送的一些代码:
$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 publish-method获得通过SNS发送的相同通知。
我已经发现我必须发送推送通知:
$result = $snsClient->publish(array(
'TargetArn' => $target,
// Message is required
'Message' => $message,
'MessageStructure' => 'json'
));
在上面的代码示例中,$ message会是什么?感谢所有帮助!
编辑:我已成功通过以下JSON发送推送通过SNS仪表板。我的问题是通过PHP SDK重现这一点。
{ “APNS”:“{\”aps \“:{\”alert \“:{\”body \“:\”7500 \“,\”action-loc-key \“:\”读取此\“,\ “loc-key \”:\“%@ \”,\“loc-args \”:[\“Message \”]},\“badge \”:\“0 \”,\“声音\”:\ “default \”,\“content-available \”:\“1 \”}}“ }
答案 0 :(得分:11)
我设法解决了这个问题!
以下代码完成了这个技巧,我以前的尝试没有创建一个好的json-string(注意那里有两个json_encodes)或者没有必需的“默认”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
));
答案 1 :(得分:6)
我不知道这是否适用于您的目的,但在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
替换为APNS
答案 2 :(得分:2)
关于GrapplingCoder的回答,这里是用于发送基本推送通知的JSON,文本使用默认通知声音:
{
"APNS": "{\"aps\":{\"alert\": \"This is your message text!\",\"sound\":\"default\"} }"
}