APNS(全称:Apple Push Notification Service),翻译为:苹果消息推送服务。
下面的代码是用PHP语言编写的一个公共类,用来完成从服务器端向APNS Server推送消息的过程。(这个类被应用在新京报新闻这个App的消息推送服务器端)
<?php /** * ApplePush 苹果消息推送公共类 * @author www.sunbloger.com */ class ApplePush { /** * APNS server url * * @var string */ protected $apns_url = 'ssl://gateway.push.apple.com:2195'; //沙盒地址:ssl://gateway.sandbox.push.apple.com:2195 /** * 推送数据 * * @var string */ private $payload_json; /** * 数据流对象 * * @var mixed */ private $fp; /** * 设置APNS地址 * * @param string $url */ public function setApnsUrl($url) { if (empty($url)) { return false; } else { $this->apns_url = $url; } return true; } /** * 设置推送的消息 * * @param string $body */ public function setBody($body) { if (empty($body)) { return false; } else { $this->payload_json = json_encode($body); } return true; } /** * Open 打开APNS服务器连接 * * @param string $pem 证书 * @param string $passphrase 证书密钥 */ public function open($pem, $passphrase) { if (empty($pem)) { return false; } if (empty($passphrase)) { return false; } $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', $pem); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); $fp = stream_socket_client($this->apns_url, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); if (!$fp) { return false; } $this->fp = $fp; return true; } /** * Send 推送 * * @param string $token */ public function send($token) { $msg = chr(0) . pack('n', 32) . pack('H*', $token) . pack('n', strlen($this->payload_json)) . $this->payload_json; $result = fwrite($this->fp, $msg, strlen($msg)); return $result; } /** * Close APNS server 关闭APNS服务器连接 * */ public function close() { fclose($this->fp); return true; } } ?>
阳光部落原创,更多内容请访问http://www.sunbloger.com/