<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>运达&#039;s  blog &#187; 推送</title>
	<atom:link href="https://www.yunda51.com/?feed=rss2&#038;tag=%E6%8E%A8%E9%80%81" rel="self" type="application/rss+xml" />
	<link>https://www.yunda51.com</link>
	<description>运达的博客</description>
	<lastBuildDate>Wed, 12 Nov 2025 07:58:26 +0000</lastBuildDate>
	<language>zh-CN</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=4.0.19</generator>
	<item>
		<title>php ios 推送实例 + iospush.class.php类</title>
		<link>https://www.yunda51.com/?p=1322</link>
		<comments>https://www.yunda51.com/?p=1322#comments</comments>
		<pubDate>Tue, 17 Jun 2014 03:37:24 +0000</pubDate>
		<dc:creator><![CDATA[运达]]></dc:creator>
				<category><![CDATA[php技术]]></category>
		<category><![CDATA[Thinkphp]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[推送]]></category>

		<guid isPermaLink="false">http://www.yunda51.com/?p=1322</guid>
		<description><![CDATA[下载：ios推送实例和类 解析一个推送通知 你的服务器负责创建一个推送通知消息，所以了解一个推送通知消息的构成<a href="https://www.yunda51.com/?p=1322" class="read-more">Continue Reading</a>]]></description>
				<content:encoded><![CDATA[<p><strong><a href="http://pan.baidu.com/s/1dDmtFOH" target=_blank>下载：ios推送实例和类</a></strong></p>
<div class="buy shortcodestyle">
解析一个推送通知<br />
你的服务器负责创建一个推送通知消息，所以了解一个推送通知消息的构成是有必要的。<br />
如果一个推送通知的payload超过了256个字节，那么这个推送就不会被“APNS”接受。<br />
一个推送通知是一个短信息，由“device token”，“payload–负载内容”，和其他的一些字节组成。“payload–负载内容”是我们感兴趣的部分，因为它包含着我们实际想发送出去的数据。<br />
你的服务器必须提供“payload–负载内容”，它是以JSON的字典的数据格式来组织数据的。下面是一个很简单的推送消息payload：<br />
{<br />
“aps”:<br />
{<br />
“alert”: “Hello, world!”,<br />
“sound”: “default”<br />
}<br />
}<br />
对于不了解JSON的人，一个block的划分由一对花括号“{}”包裹，其中包含一个由“键/值 (key/value)”对组成的“字典”，(就像NSDictionary)。<br />
“payload–负载内容”就是一个“字典”，包含了至少一个“aps”项，“aps”本身也是一个“字典”。在我们的例子中，“aps”包含“alert”和“sound”字段。当这个推送通知被接收后，它将显示一个包含“Hello, world!”内容的提醒框，并且播放标准的提示音。<br />
你可以向“aps”添加另外的选项，来配置通知，例如<br />
{<br />
“aps”:<br />
{<br />
“alert”:<br />
{<br />
“action-loc-key”: “Open”,<br />
“body”: “Hello, world!”<br />
},<br />
“badge”: 2<br />
}<br />
}<br />
现在“alert”是一个字典。”action-loc-key” 对应的value替代了“View”按钮上的文本内容，”badge”字段包含的数字将被显示在应用图标上，这个通知不会播放提示音。
</div>
<pre class="wp-code-highlight prettyprint">
&lt;?php
     //ios推送
     require_once ( &quot;./iospush.class.php&quot; ) ;
     //证书，IOS开发人员提供的, 还有一个密码，配置在 iospush.php 上
     $pem = &#039;./ck.pem&#039;;
    //token 用连接工具连接上了，看看设备信息就可以查看  测试请修改为正确的 token
    $ios_token = &#039;82eba403a347861e7d0ec0d160e140fbb216c64a6518ed87dcf260c65931aa63&#039;;
    //我们定义的数据
    $pusharr = array(
	&#039;description&#039;=&gt;&#039;test_push&#039;,
	&#039;key1&#039;=&gt;&#039;value1&#039;,
	&#039;key2&#039;=&gt;&#039;value2&#039;,
    );
    $iospush = new iospush($pem,&#039;123456&#039;);
    $push = $iospush-&gt;push($ios_token,$pusharr);
    var_dump($push );
?&gt;
</pre>
<pre class="wp-code-highlight prettyprint">
&lt;?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=&#039;ck.pem&#039;;//证书
	public $pass=&#039;123456&#039;; //证书密码
	public $sound = &#039;tap.aif&#039;; //通知声
	public $badge=0;
	
	public function __construct($path=&#039;&#039;,$pass=&#039;&#039;) {
		if($path)
			$this-&gt;path = $path;
		if($pass)
			$this-&gt;pass = $pass;

	}
	function push($token, $data)
	{
		
		// Construct the notification payload
		$body = array();
		if ($this-&gt;badge) {
			$body[&#039;aps&#039;][&#039;badge&#039;] = $this-&gt;badge;
		} 
		$body[&#039;aps&#039;][&#039;alert&#039;] = $data[&#039;description&#039;];
		$body[&#039;aps&#039;][&#039;sound&#039;] = $this-&gt;sound; 
		// 组装数据
		foreach($data as $k =&gt; $v) {
			if ($k != &quot;description&quot;) {
				$body[$k] = $v;
			} 
		} 
		
		// $body[&#039;append_1&#039;]=&quot;appendent_1&quot;;
		// $body[&#039;append_2&#039;]=&quot;appendent_2&quot;;
		$ctx = stream_context_create();
		stream_context_set_option($ctx, &#039;ssl&#039;, &#039;local_cert&#039;, $path); //pem文件地址
		stream_context_set_option($ctx, &#039;ssl&#039;, &#039;passphrase&#039;, $this-&gt;pass); //证书密码
		 
		// $fp=stream_socket_client(&#039;ssl://gateway.push.apple.com:2195&#039;, $err, $errstr, 60,                  STREAM_CLIENT_CONNECT, $ctx);//正式
		$fp = @stream_socket_client(&quot;ssl://gateway.sandbox.push.apple.com:2195&quot;, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); //测试沙箱
		
		if (!$fp) {
			return false;
		} 

		$payload = json_encode($body);
		$msg = chr(0) . pack(&quot;n&quot;, 32) . pack(&#039;H*&#039;, str_replace(&#039; &#039;, &#039;&#039;, $token)) . pack(&quot;n&quot;, strlen($payload)) . $payload;

		fwrite($fp, $msg);
		fclose($fp);
		return true;
	} 
}
?&gt;
</pre>
<p>转载请注明转自:<a href="http://www.yunda51.com">运达's blog</a>  原文地址：<a href="http://www.yunda51.com/1322.html">http://www.yunda51.com/1322.html</a></p>
]]></content:encoded>
			<wfw:commentRss>https://www.yunda51.com/?feed=rss2&#038;p=1322</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
