下载:ios推送实例和类

解析一个推送通知
你的服务器负责创建一个推送通知消息,所以了解一个推送通知消息的构成是有必要的。
如果一个推送通知的payload超过了256个字节,那么这个推送就不会被“APNS”接受。
一个推送通知是一个短信息,由“device token”,“payload–负载内容”,和其他的一些字节组成。“payload–负载内容”是我们感兴趣的部分,因为它包含着我们实际想发送出去的数据。
你的服务器必须提供“payload–负载内容”,它是以JSON的字典的数据格式来组织数据的。下面是一个很简单的推送消息payload:
{
“aps”:
{
“alert”: “Hello, world!”,
“sound”: “default”
}
}
对于不了解JSON的人,一个block的划分由一对花括号“{}”包裹,其中包含一个由“键/值 (key/value)”对组成的“字典”,(就像NSDictionary)。
“payload–负载内容”就是一个“字典”,包含了至少一个“aps”项,“aps”本身也是一个“字典”。在我们的例子中,“aps”包含“alert”和“sound”字段。当这个推送通知被接收后,它将显示一个包含“Hello, world!”内容的提醒框,并且播放标准的提示音。
你可以向“aps”添加另外的选项,来配置通知,例如
{
“aps”:
{
“alert”:
{
“action-loc-key”: “Open”,
“body”: “Hello, world!”
},
“badge”: 2
}
}
现在“alert”是一个字典。”action-loc-key” 对应的value替代了“View”按钮上的文本内容,”badge”字段包含的数字将被显示在应用图标上,这个通知不会播放提示音。
<?php
     //ios推送
     require_once ( "./iospush.class.php" ) ;
     //证书,IOS开发人员提供的, 还有一个密码,配置在 iospush.php 上
     $pem = './ck.pem';
    //token 用连接工具连接上了,看看设备信息就可以查看  测试请修改为正确的 token
    $ios_token = '82eba403a347861e7d0ec0d160e140fbb216c64a6518ed87dcf260c65931aa63';
    //我们定义的数据
    $pusharr = array(
	'description'=>'test_push',
	'key1'=>'value1',
	'key2'=>'value2',
    );
    $iospush = new iospush($pem,'123456');
    $push = $iospush->push($ios_token,$pusharr);
    var_dump($push );
?>
<?php
/**
 * PHP iospush
 *
 * Copyright (c) 2006 - 2014 iospush
 *
 *
 * @category   PHP iospush
 * @copyright  Copyright (c) iospush (http://www.leipi.org)
 * @license    http://www.apple.com    LGPL
 * @version    1.8.0, 2014-03-02
 */
class iospush
{
	public $path='ck.pem';//证书
	public $pass='123456'; //证书密码
	public $sound = 'tap.aif'; //通知声
	public $badge=0;
	
	public function __construct($path='',$pass='') {
		if($path)
			$this->path = $path;
		if($pass)
			$this->pass = $pass;

	}
	function push($token, $data)
	{
		
		// Construct the notification payload
		$body = array();
		if ($this->badge) {
			$body['aps']['badge'] = $this->badge;
		} 
		$body['aps']['alert'] = $data['description'];
		$body['aps']['sound'] = $this->sound; 
		// 组装数据
		foreach($data as $k => $v) {
			if ($k != "description") {
				$body[$k] = $v;
			} 
		} 
		
		// $body['append_1']="appendent_1";
		// $body['append_2']="appendent_2";
		$ctx = stream_context_create();
		stream_context_set_option($ctx, 'ssl', 'local_cert', $path); //pem文件地址
		stream_context_set_option($ctx, 'ssl', 'passphrase', $this->pass); //证书密码
		 
		// $fp=stream_socket_client('ssl://gateway.push.apple.com:2195', $err, $errstr, 60,                  STREAM_CLIENT_CONNECT, $ctx);//正式
		$fp = @stream_socket_client("ssl://gateway.sandbox.push.apple.com:2195", $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); //测试沙箱
		
		if (!$fp) {
			return false;
		} 

		$payload = json_encode($body);
		$msg = chr(0) . pack("n", 32) . pack('H*', str_replace(' ', '', $token)) . pack("n", strlen($payload)) . $payload;

		fwrite($fp, $msg);
		fclose($fp);
		return true;
	} 
}
?>

转载请注明转自:运达's blog 原文地址:http://www.yunda51.com/1322.html