APNS(全称:Apple Push Notification Service),翻译为:苹果消息推送服务。
下面的代码是用PHP语言编写的一个公共类,用来完成从服务器端向APNS Server推送消息的过程。(这个类被应用在新京报新闻这个App的消息推送服务器端)
代码语言:javascript复制<?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/