Skip to content

Instantly share code, notes, and snippets.

@krainet
Created September 5, 2018 08:39
Show Gist options
  • Save krainet/c9226bfc812dd7cd4c93c9b142337aba to your computer and use it in GitHub Desktop.
Save krainet/c9226bfc812dd7cd4c93c9b142337aba to your computer and use it in GitHub Desktop.
Send APNS push in PHP Class & Manager
<?php
class PushApns
{
private $apnsPemFile="ck.pem"; //pem file link
private $type = 'dev'; //development and distribution (dev or dis)
private $passphrase = 'yourPass';
public function SendNotification($device_token, $message, $sound = "bingbong.aiff",$debug=false)
{
if ($this->type == "dev") {
$push_link = 'ssl://gateway.sandbox.push.apple.com:2195';
}
if ($this->type == "dis") {
$push_link = 'ssl://gateway.push.apple.com:2195';
}
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', $this->apnsPemFile);
stream_context_set_option($ctx, 'ssl', 'passphrase', $this->passphrase);
$fp = stream_socket_client($push_link, $error, $error_str, 60, STREAM_CLIENT_CONNECT | STREAM_CLIENT_PERSISTENT, $ctx);
if ($fp) {
$body = array();
$body['aps']['body'] = $message;
$body['aps']['alert'] = $message["Message"];
$body['aps']['badge'] = 1;
$body['aps']['sound'] = $sound;
$payload = json_encode($body);
$result = chr(0) . pack('n', 32) . pack('H*', $device_token) . pack('n', strlen($payload)) . $payload;
$response = fwrite($fp, $result, strlen($result));
if ($debug == true) {
$res = $this->checkAPNSErrorResponse($fp);
if ($res['success'] == 0) {
$apns_response = $this->Response(0,$res);
}
else{
$apns_response = $this->Response(1,"Message Successfully Delivered ");
}
} else {
if (!$response) {
$apns_response = $this->Response(0,"Error: Message Not Delivered");
} else {
$apns_response = $this->Response(1, "Message Successfully Delivered");
}
}
fclose($fp);
} else {
$apns_response = $this->Response(0, "Error: Failed To Connect: $error $error_str");
}
return $apns_response;
}
private function checkAPNSErrorResponse($fp)
{
$appleErrorResponse = fread($fp, 6);
if ($appleErrorResponse) {
$errorResponse = unpack('Ccommand/Cstatus_code/Nidentifier', $appleErrorResponse);
if ($errorResponse['status_code'] == '0') {
$errorResponse['status_code'] = '0-No errors encountered';
} else if ($errorResponse['status_code'] == '1') {
$errorResponse['status_code'] = '1-Processing error';
} else if ($errorResponse['status_code'] == '2') {
$errorResponse['status_code'] = '2-Missing device token';
} else if ($errorResponse['status_code'] == '3') {
$errorResponse['status_code'] = '3-Missing topic';
} else if ($errorResponse['status_code'] == '4') {
$errorResponse['status_code'] = '4-Missing payload';
} else if ($errorResponse['status_code'] == '5') {
$errorResponse['status_code'] = '5-Invalid token size';
} else if ($errorResponse['status_code'] == '6') {
$errorResponse['status_code'] = '6-Invalid topic size';
} else if ($errorResponse['status_code'] == '7') {
$errorResponse['status_code'] = '7-Invalid payload size';
} else if ($errorResponse['status_code'] == '8') {
$errorResponse['status_code'] = '8-Invalid token';
} else if ($errorResponse['status_code'] == '255') {
$errorResponse['status_code'] = '255-None (unknown)';
} else {
$errorResponse['status_code'] = $errorResponse['status_code'] . '-Not listed';
}
return $this->Response(0,$errorResponse['status_code']);
}else {
return $this->Response(1,"Successfully send.");
}
}
private function Response($success,$result)
{
return array("success"=>$success,"data"=>$result);
}
}
<?php
/**
* Created by PhpStorm.
* User: ramon
* Date: 5/09/18
* Time: 9:50
*/
require "PushApns.php";
$apns = new PushApns();
$message=array();
$message["Message"]="Hello";
$device_token="3f02b105e4c53d92014995b4ab840726f38a15063cfa120db8721b222c080ea9";
$res = $apns->SendNotification($device_token, $message);
print_r($res);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment