解析一个推送通知
你的服务器负责创建一个推送通知消息,所以了解一个推送通知消息的构成是有必要的。
如果一个推送通知的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”字段包含的数字将被显示在应用图标上,这个通知不会播放提示音。
你的服务器负责创建一个推送通知消息,所以了解一个推送通知消息的构成是有必要的。
如果一个推送通知的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
这些技术问题,现在还是不太动