通过Amazon SNS以JSON格式发送iOS推送通知

时间:2014-10-09 20:47:27

标签: php ios amazon-web-services push-notification amazon-sns

我正在将自己的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 \”}}“ }

3 个答案:

答案 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\"} }"
}