今天終於完完全全的搞明白了,APNs 推送前,客戶端的准備工作需要那一些。如果有錯誤的地方,歡迎大神指出來。
准備工作:
原文地址:點擊打開鏈接http://blog.csdn.net/tuxiangqi/article/details/17245553
1.到開發者中心,創建app Id,選擇push notification 功能(game center 和另外一個是必選的)。
2.創建certificates
注意:內部開發,只能是用Develpment,producation是測試完了,准備發布到appstore的時候再弄的。
其中按照Develop 流程的介紹,會創建一個CSR文件(production版本也可以公用這個CSR文件),通過 鑰匙串(通用菜單裡的某個應用)創建,詳情見官方<喎?http://www.Bkjia.com/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+Q2VydGlmaWNhdGVTaWduaW5nUmVxdWVzdC5jZXJ0U2lnbmluZ1JlcXVlc3SjrNXiuPbKx9fu1tXJ+rL6s/a1xM7EvP48YnI+CjwvcD4KPHA+My60tL2oY2VydCDOxLz+oaO4+b7dtdq2/rK9o6y74bXDtb3Su7j2Y2VydM7EvP6jrGNlcnTOxLz+t9YgZGV2us1wcm+w5rG+oaPXotLiztLDx9PDZGV2suLK1KOscHJvyse3orK8PC9wPgo8cD40LrW8yOtjZXJ0IM7EvP7I6yDUv7PXtK48L3A+CjxwPjxpbWcgc3JjPQ=="http://www.Bkjia.com/uploadfile/Collfiles/20131211/2013121109360487.jpg" alt="\">
5.制作 SSL和 私鑰 的 PEM格式文件(php服務端需要)
a。分別制作SSL(cert文件)和 key(私鑰)的p12格式文件,通過導出獲得。(注意命名)
b.通過終端shell 輸入命令,得到SSL 和 key 的 2個PEM 格式的文件,並且將它們合二為一
命令參數如下:
原文地址:點擊打開鏈接http://blog.csdn.net/tuxiangqi/article/details/17245553
cd 存放文件夾的路徑
openssl pkcs12 -clcerts -nokeys -out 輸出文件名.pem -in 原文件的名字例如SSL(Cert文件).p12 (將SSLcert文件從p12變為pem)
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 (將key.p12 文件變為 pem,這裡會提示一定要設置 私鑰的解壓密碼,至少4位,你輸入即可)
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem (這個命令是將私鑰剛才設置的 至少4位密碼 去除,如果你想保留也可以,但是需要和php服務端的同事說明下)
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem (這個命令是將 SSL 和私鑰 編譯為一個文件pem 命名可以自己改)
下面是從網上找到的其他資源,關於php服務器的設置
array("alert" => "message123gggg32323333", "badge" => 1, "sound"=>'default')); //推送方式,包括了提示內容,提示方式和提示聲音。 $ctx = stream_context_create(); //如果在Windows的服務器上,尋找pem路徑會有問題,路徑修改成這樣的方法: $pem = !empty($this->cfg['isga']) && $this->cfg['isga'] == 2?'apns-dev.pem':'apns-dev.pem'; //臨時全部為開發狀態 stream_context_set_option($ctx, 'ssl', 'local_cert', "/data/web/cert/".$pem); //linux 的服務器直接寫pem的路徑即可 stream_context_set_option($ctx, 'ssl', 'local_cert',"/data/web/cert/".$pem);//如果你的pem存有密碼,需要加一個密碼登陸語句 stream_context_set_option($ctx, 'ssl', 'passphrase', ''); //如果你的pem存有密碼,需要加一個密碼登陸語句 //$pass = ”123123“; //stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $pass); //此處有兩個服務器需要選擇,如果是開發測試用,選擇第二名sandbox的服務器並使用Dev的pem證書,如果是正是發布,使用Product的pem並選用正式的服務器 $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) { print_r("Failed to connect $err $errstrn"); return; } print_r("Connection OK\n"); $payload = json_encode($body); $msg = chr(0).pack("n", 32).pack('H*', str_replace(' ', '', $deviceToken)).pack("n",strlen($payload)).$payload; print_r("sending message :".$payload."\n"); fwrite($fp, $msg); fclose($fp); ?>
差不多這裡弄好了,你就可以 按照其他 的服務器 教程去弄了。。。網上很多。當然,你的
關於 和php 服務器交互這塊,到這裡就結束了