I'm in the works of migrating my own iOS pushservice into Amazon SNS. Previously I was pushing messages trough our own server which no longer is enough.
The backend is built with PHP and this is some code of how I send a pushnotification with the old solution:
$body = array(
    'alert' => array('body' => $id,
                   'action-loc-key' => 'read this',
                   'loc-key' => '%@',
                   'loc-args' => array($message)),
    'badge' => '0',
    'sound' => 'default',
    'content-available' => '1'
    );
That is the body of the notification I sent. Now I want to get the same notification to be sent trough SNS, with the AWS PHP SDK publish-method.
I've figured out that I have to send the pushnotification trough this:
$result = $snsClient->publish(array(
        'TargetArn' => $target,
        // Message is required
        'Message' => $message,
        'MessageStructure' => 'json'
    ));
What would $message be, in the codeexample above? All help is appreciated!
Edit: I've successfully sent the pushnotification trough SNS dashboard with the following JSON. My problem is to reproduce this trough the PHP SDK.
{ "APNS":"{\"aps\":{\"alert\":{\"body\":\"7500\", \"action-loc-key\":\"read this\", \"loc-key\":\"%@\", \"loc-args\":[\"Message\"]}, \"badge\":\"0\", \"sound\":\"default\", \"content-available\":\"1\"} }" }
I managed to solve the problem!
The following code did the trick, my previously attempts did not create either a good json-string (notice that there are two json_encodes in there) or didn't have the "default" json key which is required.
$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
        ));
                        I don't know if this would work for your purposes, but in the AWS SNS API dashboard to send a single message out the format is like this:
{"APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"}
To send to a topic in the dashboard you use a string like this:
{ 
    "default": "HERE IS AN ALERT, BADGE, and SOUND",
    "APNS_SANDBOX": "{\"aps\": {\"alert\":\"HERE IS AN ALERT, BADGE, and SOUND!\",\"badge\": 1,\"sound\":\"bingbong.aiff\"}}"
}
The escaped quotes are required when sending from the dashboard.
When sending to production you replace APNS_SANDBOX with APNS
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With