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

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' =>

我正在将自己的iOS推送服务迁移到Amazon SNS中。以前我是通过我们自己的服务器推送消息,这已经不够了

后端是用PHP构建的,下面是我如何使用旧解决方案发送pushnotification的一些代码:

$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,\”声音\“:\”默认\“}}”将正常工作。我很高兴你把问题解决了!