摘自《IOS开发之实现App消息推送(最新)》 发表于2014-11-19 21:13http://blog.csdn.net/shenjie12345678/article/details/41120637
第六部分
好了,前期的准备工作都已经做完了,现在让我们开始推送吧!(吼吼)
首先双击我们生成的 “aps_development .cer” 文件,进入钥匙串访问,找到我们的专用秘钥(根据在第二部分中从证书机构颁发证书操作中填写的常用名)
我在第二部分填写的是“silicon”,由于换了一台mac之前安装的没有了,之前没有截图,所以随便找了个图给大家看一下,凭大家的聪明才智应该不难理解吧。
然后右击导出,会弹出如下所示的图。
将他存储到push文件夹中,命名为“push.p12”,在这一步中导出会让你输入密码并验证,你可以自定义一个密码,例如abc123。
现在push文件夹中应该有几个文件“aps_development .cer” ,"push.p12",“CertificateSigningRequest.certSigningRequest”以及刚才下下来的配置概要文件。
接下来我们打开终端将他们生成.pem文件
1.把aps_development .cer文件生成.pcm文件,cd到push文件夹下
2.把push.p12文件生成为.pem文件
上边输入的密码则是你导出证书所设的密码,即abc123.接着还会让你输入.pem文件的密码,还是使用abc123好了,防止混淆。
这样我们在push文件夹中就又得到了两个文件,PushChatCert.pem和PushChatKey.pem。
3.把PushChatCert.pem和PushChatKey.pem合并为一个pem文件,
在push文件夹中又多了一个ck.pem文件,以上我们把需要使用的文件都准备好了
接下来就要测试一下啦,是不是很激动~
为了测试证书工作的状况,我们可以使用“telnet gateway.sandbox.push.apple.com 2195”来检测一下,如果显示
则表示成功了。
然后,我们使用我们生成的证书和私钥来设置一个安全的链接去链接苹果服务器
在终端输入如下命令:openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
需要输入密码(abc123 我们刚才所设置的)。
然后他会返回一系列的数据,这里我就粘贴一部分啦:
CONNECTED(00000003)
depth=1 /C=US/O=Entrust, Inc./OU=www.entrust.net/rpa is incorporated by reference/OU=(c) 2009 Entrust, Inc./CN=Entrust Certification Authority - L1C
verify error:num=20:unable to get local issuer certificate
verify return:0
---
Certificate chain
。。。。。(省略)。。。。。(省略)
。。。。。(省略)
Start Time: 1416389389
Timeout : 300 (sec)
Verify return code: 0 (ok)
---
测试就到这里啦。。。
发送推送
2.PHP服务端
将simplepush.php这个推送脚本也放在push文件夹中
- <?php
- // ??????????deviceToken???????????????
- $deviceToken = 'c95f661371b085e2517b4c12cc76293522775e5fd9bb1dea17dd80fe85583b41';
- // Put your private key's passphrase here:
- $passphrase = 'abc123';
- // Put your alert message here:
- $message = 'My first push test!';
- $ctx = stream_context_create();
- stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
- stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
- // Open a connection to the APNS server
- //??????????
- //$fp = stream_socket_client(?ssl://gateway.push.apple.com:2195?, $err, $errstr, 60, //STREAM_CLIENT_CONNECT, $ctx);
- //?????????????appstore??????
- $fp = stream_socket_client(
- 'ssl://gateway.sandbox.push.apple.com:2195', $err,
- $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
- if (!$fp)
- exit("Failed to connect: $err $errstr" . PHP_EOL);
- echo 'Connected to APNS' . PHP_EOL;
- // Create the payload body
- $body['aps'] = array(
- 'alert' => $message,
- 'sound' => 'default'
- );
- // Encode the payload as JSON
- $payload = json_encode($body);
- // Build the binary notification
- $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload;
- // Send it to the server
- $result = fwrite($fp, $msg, strlen($msg));
- if (!$result)
- echo 'Message not delivered' . PHP_EOL;
- else
- echo 'Message successfully delivered' . PHP_EOL;
- // Close the connection to the server
- fclose($fp);
- ?>
此刻就是见证奇迹的时候了
使用终端进入到push文件夹,在终端输入 php simplepush.php
若显示以上提示则表示推送成功了