Last active
February 19, 2025 06:09
-
Star
(152)
You must be signed in to star a gist -
Fork
(75)
You must be signed in to fork a gist
-
-
Save joashp/b2f6c7e24127f2798eb2 to your computer and use it in GitHub Desktop.
Simple PHP script to send Android Push Notification, iOS Push Notification and Windows Phone 8 Push Notification
This file contains hidden or 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 | |
// Server file | |
class PushNotifications { | |
// (Android)API access key from Google API's Console. | |
private static $API_ACCESS_KEY = 'AIzaSyDG3fYAj1uW7VB-wejaMJyJXiO5JagAsYI'; | |
// (iOS) Private key's passphrase. | |
private static $passphrase = 'joashp'; | |
// (Windows Phone 8) The name of our push channel. | |
private static $channelName = "joashp"; | |
// Change the above three vriables as per your app. | |
public function __construct() { | |
exit('Init function is not allowed'); | |
} | |
// Sends Push notification for Android users | |
public function android($data, $reg_id) { | |
$url = 'https://android.googleapis.com/gcm/send'; | |
$message = array( | |
'title' => $data['mtitle'], | |
'message' => $data['mdesc'], | |
'subtitle' => '', | |
'tickerText' => '', | |
'msgcnt' => 1, | |
'vibrate' => 1 | |
); | |
$headers = array( | |
'Authorization: key=' .self::$API_ACCESS_KEY, | |
'Content-Type: application/json' | |
); | |
$fields = array( | |
'registration_ids' => array($reg_id), | |
'data' => $message, | |
); | |
return $this->useCurl($url, $headers, json_encode($fields)); | |
} | |
// Sends Push's toast notification for Windows Phone 8 users | |
public function WP($data, $uri) { | |
$delay = 2; | |
$msg = "<?xml version=\"1.0\" encoding=\"utf-8\"?>" . | |
"<wp:Notification xmlns:wp=\"WPNotification\">" . | |
"<wp:Toast>" . | |
"<wp:Text1>".htmlspecialchars($data['mtitle'])."</wp:Text1>" . | |
"<wp:Text2>".htmlspecialchars($data['mdesc'])."</wp:Text2>" . | |
"</wp:Toast>" . | |
"</wp:Notification>"; | |
$sendedheaders = array( | |
'Content-Type: text/xml', | |
'Accept: application/*', | |
'X-WindowsPhone-Target: toast', | |
"X-NotificationClass: $delay" | |
); | |
$response = $this->useCurl($uri, $sendedheaders, $msg); | |
$result = array(); | |
foreach(explode("\n", $response) as $line) { | |
$tab = explode(":", $line, 2); | |
if (count($tab) == 2) | |
$result[$tab[0]] = trim($tab[1]); | |
} | |
return $result; | |
} | |
// Sends Push notification for iOS users | |
public function iOS($data, $devicetoken) { | |
$deviceToken = $devicetoken; | |
$ctx = stream_context_create(); | |
// ck.pem is your certificate file | |
stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); | |
stream_context_set_option($ctx, 'ssl', 'passphrase', self::$passphrase); | |
// Open a connection to the APNS server | |
$fp = stream_socket_client( | |
'ssl://gateway.sandbox.push.apple.com:2195', $err, | |
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); | |
if (!$fp) | |
exit("Failed to connect: $err $errstr" . PHP_EOL); | |
// Create the payload body | |
$body['aps'] = array( | |
'alert' => array( | |
'title' => $data['mtitle'], | |
'body' => $data['mdesc'], | |
), | |
'sound' => 'default' | |
); | |
// 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)); | |
// Close the connection to the server | |
fclose($fp); | |
if (!$result) | |
return 'Message not delivered' . PHP_EOL; | |
else | |
return 'Message successfully delivered' . PHP_EOL; | |
} | |
// Curl | |
private function useCurl(&$model, $url, $headers, $fields = null) { | |
// Open connection | |
$ch = curl_init(); | |
if ($url) { | |
// Set the url, number of POST vars, POST data | |
curl_setopt($ch, CURLOPT_URL, $url); | |
curl_setopt($ch, CURLOPT_POST, true); | |
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); | |
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); | |
// Disabling SSL Certificate support temporarly | |
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); | |
if ($fields) { | |
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); | |
} | |
// Execute post | |
$result = curl_exec($ch); | |
if ($result === FALSE) { | |
die('Curl failed: ' . curl_error($ch)); | |
} | |
// Close connection | |
curl_close($ch); | |
return $result; | |
} | |
} | |
} | |
?> |
This file contains hidden or 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 | |
require_once('PushNotifications.php'); | |
// Message payload | |
$msg_payload = array ( | |
'mtitle' => 'Test push notification title', | |
'mdesc' => 'Test push notification body', | |
); | |
// For Android | |
$regId = 'APA91bHdOmMHiRo5jJRM1jvxmGqhComcpVFDqBcPfLVvaieHeFI9WVrwoDeVVD1nPZ82rV2DxcyVv-oMMl5CJPhVXnLrzKiacR99eQ_irrYogy7typHQDb5sg4NB8zn6rFpiBuikNuwDQzr-2abV6Gl_VWDZlJOf4w'; | |
// For iOS | |
$deviceToken = 'FE66489F304DC75B8D6E8200DFF8A456E8DAEACEC428B427E9518741C92C6660'; | |
// For WP8 | |
$uri = 'http://s.notify.live.net/u/1/sin/HmQAAAD1XJMXfQ8SR0b580NcxIoD6G7hIYP9oHvjjpMC2etA7U_xy_xtSAh8tWx7Dul2AZlHqoYzsSQ8jQRQ-pQLAtKW/d2luZG93c3Bob25lZGVmYXVsdA/EKTs2gmt5BG_GB8lKdN_Rg/WuhpYBv02fAmB7tjUfF7DG9aUL4'; | |
// Replace the above variable values | |
PushNotifications::android($msg_payload, $regId); | |
PushNotifications::WP8($msg_payload, $uri); | |
PushNotifications::iOS($msg_payload, $deviceToken); | |
?> |
Replaced with @ProdigyTech https://gist.github.com/joashp/b2f6c7e24127f2798eb2#gistcomment-2044235 and its working.
Do we need to register our app in firebase to work with push notifications?
I have used this code for get push notification in iOS. But getting some error. Please any one can help me.
Error:
Message: stream_socket_client(): SSL operation failed with code 1. OpenSSL Error messages:
error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
This code is outdated, You will have to use Google FCM.
https://firebase.google.com/docs/cloud-messaging
…On Thu, Aug 22, 2019 at 12:58 PM Cristian Capannini < ***@***.***> wrote:
URGENT: I need to send push notification through php with attachment-url
to all ios devices with topic '/ topic / nametopic'. Thanks.
—
You are receiving this because you authored the thread.
Reply to this email directly, view it on GitHub
<https://gist.github.com/b2f6c7e24127f2798eb2?email_source=notifications&email_token=AB4DVRERMSKTKIJITBOIH5TQFY523A5CNFSM4IGPOFE2YY3PNVWWK3TUL52HS4DFVNDWS43UINXW23LFNZ2KUY3PNVWWK3TUL5UWJTQAFXNK4#gistcomment-3005102>,
or mute the thread
<https://github.com/notifications/unsubscribe-auth/AB4DVRHNEGZOSE7DLOCI4F3QFY523ANCNFSM4IGPOFEQ>
.
--
Thanks,
Joash Pereira
What? Are you always this arrogant? @cristo1985
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Can anyone confirm if this is still operational