Created
May 2, 2012 00:23
-
-
Save SiriusDely/2572588 to your computer and use it in GitHub Desktop.
Push Notification PHP Script - Apple iOS, Android C2DM, BlackBerry PPG
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// Put your device token here (without spaces): | |
$deviceToken = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; | |
// Put your private key's passphrase here: | |
$passphrase = 'xxxxxxx'; | |
// Put your alert message here: | |
$message = 'A push notification has been sent!'; | |
//////////////////////////////////////////////////////////////////////////////// | |
$ctx = stream_context_create(); | |
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck_file_name.pem'); | |
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); | |
// Open a connection to the APNS server | |
$fp = stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); | |
if (!$fp) | |
exit("Failed to connect: $err $errstr" . PHP_EOL); | |
echo 'Connected to APNS' . PHP_EOL; | |
// Create the payload body | |
$body['aps'] = array( | |
'alert' => array( | |
'body' => $message, | |
'action-loc-key' => 'Bango App', | |
), | |
'badge' => 2, | |
'sound' => 'oven.caf', | |
); | |
// Encode the payload as JSON | |
$payload = json_encode($body); | |
// Build the binary notification | |
$msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; | |
// Send it to the server | |
$result = fwrite($fp, $msg, strlen($msg)); | |
if (!$result) | |
echo 'Message not delivered' . PHP_EOL; | |
else | |
echo 'Message successfully delivered' . PHP_EOL; | |
// Close the connection to the server | |
fclose($fp); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
curl https://www.google.com/accounts/ClientLogin -d [email protected] -d sgAF-1do -d accountType=GOOGLE -d source=Google-cURL-Example -d service=ac2dm | |
curl --header "Authorization: GoogleLogin auth=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" "https://android.apis.google.com/c2dm/send" -d registration_id=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX -d "data.payload=payload" -d collapse_key=0 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// APP ID provided by RIM | |
$appid = 'xxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'; | |
// Password provided by RIM | |
$password = 'xxxxxxxxx'; | |
//Deliver before timestamp | |
$deliverbefore = gmdate('Y-m-d\TH:i:s\Z', strtotime('+5 minutes')); | |
//An array of address must be in PIN format or "push_all" | |
$addresstosendto[] = 'push_all'; | |
$addresses = ''; | |
foreach ($addresstosendto as $value) { | |
$addresses .= '<address address-value="XXXXXXXX"/>'; | |
} | |
// create a new cURL resource | |
$err = false; | |
$ch = curl_init(); | |
$messageid = microtime(true); | |
$data = '--mPsbVQo0a68eIL3OAxnm'. "\r\n" . | |
'Content-Type: application/xml; charset=UTF-8' . "\r\n\r\n" . | |
'<?xml version="1.0"?> | |
<!DOCTYPE pap PUBLIC "-//WAPFORUM//DTD PAP 2.1//EN" "http://www.openmobilealliance.org/tech/DTD/pap_2.1.dtd"> | |
<pap> | |
<push-message push-id="' . $messageid . '" deliver-before-timestamp="' . $deliverbefore . '" source-reference="' . $appid . '">' | |
. $addresses . | |
'<quality-of-service delivery-method="unconfirmed"/> | |
</push-message> | |
</pap>' . "\r\n" . | |
'--mPsbVQo0a68eIL3OAxnm' . "\r\n" . | |
'Content-Type: text/plain' . "\r\n" . | |
'Push-Message-ID: ' . $messageid . "\r\n\r\n" . | |
stripslashes('HASAN ST') . "\r\n" . | |
'--mPsbVQo0a68eIL3OAxnm--' . "\n\r"; | |
// set URL and other appropriate options | |
curl_setopt($ch, CURLOPT_URL, "https://pushapi.eval.blackberry.com/mss/PD_pushRequest"); | |
curl_setopt($ch, CURLOPT_HEADER, false); | |
curl_setopt($ch, CURLOPT_USERAGENT, "Hallgren Networks BB Push Server/1.0"); | |
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); | |
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); | |
curl_setopt($ch, CURLOPT_USERPWD, $appid . ':' . $password); | |
curl_setopt($ch, CURLOPT_POST, 1); | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: multipart/related; boundary=mPsbVQo0a68eIL3OAxnm; type=application/xml", "Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2", "Connection: keep-alive")); | |
// grab URL and pass it to the browser | |
$xmldata = curl_exec($ch); | |
// close cURL resource, and free up system resources | |
curl_close($ch); | |
//Start parsing response into XML data that we can read and output | |
$p = xml_parser_create(); | |
xml_parse_into_struct($p, $xmldata, $vals); | |
$errorcode = xml_get_error_code($p); | |
if ($errorcode > 0) { | |
echo xml_error_string($errorcode); | |
$err = true; | |
} | |
xml_parser_free($p); | |
echo 'Our PUSH-ID: ' . $messageid . "<br \>\n"; | |
if (!$err && $vals[1]['tag'] == 'PUSH-RESPONSE') { | |
echo 'PUSH-ID: ' . $vals[1]['attributes']['PUSH-ID'] . "<br \>\n"; | |
echo 'REPLY-TIME: ' . $vals[1]['attributes']['REPLY-TIME'] . "<br \>\n"; | |
echo 'Response CODE: ' . $vals[2]['attributes']['CODE'] . "<br \>\n"; | |
echo 'Response DESC: ' . $vals[2]['attributes']['DESC'] . "<br \> \n"; | |
} else { | |
echo '<p>An error has occured</p>' . "\n"; | |
echo 'Error CODE: ' . $vals[1]['attributes']['CODE'] . "<br \>\n"; | |
echo 'Error DESC: ' . $vals[1]['attributes']['DESC'] . "<br \>\n"; | |
} | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@ankitgajjer passpharse is the password of the pem file.