Created
September 5, 2018 08:39
-
-
Save krainet/c9226bfc812dd7cd4c93c9b142337aba to your computer and use it in GitHub Desktop.
Send APNS push in PHP Class & Manager
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 | |
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); | |
} | |
} |
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 | |
/** | |
* 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