参考文章:http://blog.csdn.net/showhilllee/article/details/8631734#comments
第一步、下载你工程的开发证书
第二步、从钥匙串访问中导出秘钥
注意我在这里使用的密码是123456
把他们放在同一个文件里边
第三步、证书文件处理
打开终端进入上述文件夹
① 输入命令把.cer的SSL证书转换为.pem文件openssl x509 -in aps_development.cer -inform der -out PushChatCert.pem
②输入命令把私钥test.p12文件转化为.pem文件
openssl pkcs12 -nocerts -out PushChatKey.pem -in test.p12
③对生成的这两个pem文件再生成一个pem文件,来把证书和私钥整合到一个文件里:
cat PushChatCert.pem PushChatKey.pem > ck.pem
生成ck.pem文件
④测试与苹果推送服务器连接;
telnet gateway.sandbox.push.apple.com 2195
⑥下面我们要使用我们生成的SSL证书和私钥来设置一个安全的链接去链接苹果服务器
openssl s_client -connect gateway.sandbox.push.apple.com:2195 -cert PushChatCert.pem -key PushChatKey.pem
输入Q结束
客户端我就不说了
第四步、获取deviceToken及推送php测试代码
①运行你的App获取deviceToken,将你获取到deviceToken填写至php代码中的位置;
②在终端输入php pushMe.php(php代码稍后贴上)
注意php代码必须和其他文件放在一个文件夹中
php代码段
1 <?php 2 3 // Put your device token here (without spaces): 4 5 $deviceToken = 'deviceToken去掉中间的空格'; 6 7 // Put your private key's passphrase here:密语 8 $passphrase = '123456'; 9 10 // Put your alert message here: 11 $message = '这是一条推送消息'; 12 13 //////////////////////////////////////////////////////////////////////////////// 14 15 $ctx = stream_context_create(); 16 stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); 17 stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); 18 19 // Open a connection to the APNS server 20 $fp = stream_socket_client( 21 'ssl://gateway.sandbox.push.apple.com:2195', $err, 22 $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); 23 24 if (!$fp) 25 exit("Failed to connect: $err $errstr" . PHP_EOL); 26 27 echo 'Connected to APNS' . PHP_EOL; 28 29 // Create the payload body 30 $body['aps'] = array( 31 'alert' => $message, 32 'sound' => 'default' 33 ); 34 35 // Encode the payload as JSON 36 $payload = json_encode($body); 37 38 // Build the binary notification 39 $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; 40 41 // Send it to the server 42 $result = fwrite($fp, $msg, strlen($msg)); 43 44 if (!$result) 45 echo 'Message not delivered' . PHP_EOL; 46 else 47 echo 'Message successfully delivered' . PHP_EOL; 48 49 // Close the connection to the server 50 fclose($fp); 51 52 ?>
代码下载:php代码下载