今天終于完完全全的搞明白了,APNs 推送前,客戶端的準(zhǔn)備工作需要那一些。如果有錯(cuò)誤的地方,歡迎大神指出來(lái)。
準(zhǔn)備工作:
1.到開(kāi)發(fā)者中心,創(chuàng)建app Id,選擇push notification 功能(game center 和另外一個(gè)是必選的)。
2.創(chuàng)建certificates
注意:內(nèi)部開(kāi)發(fā),只能是用Develpment,producation是測(cè)試完了,準(zhǔn)備發(fā)布到appstore的時(shí)候再弄的。
其中按照Develop 流程的介紹,會(huì)創(chuàng)建一個(gè)CSR文件(production版本也可以公用這個(gè)CSR文件),通過(guò) 鑰匙串(通用菜單里的某個(gè)應(yīng)用)創(chuàng)建,詳情見(jiàn)官方
CertificateSigningRequest.certSigningRequest,這個(gè)是最終生產(chǎn)出的文件
3.創(chuàng)建cert 文件。根據(jù)第二步,會(huì)得到一個(gè)cert文件,cert文件分 dev和pro版本。注意我們用dev測(cè)試,pro是發(fā)布
4.導(dǎo)入cert 文件入 鑰匙串
5.制作 SSL和 私鑰 的 PEM格式文件(php服務(wù)端需要)
a。分別制作SSL(cert文件)和 key(私鑰)的p12格式文件,通過(guò)導(dǎo)出獲得。(注意命名)
b.通過(guò)終端shell 輸入命令,得到SSL 和 key 的 2個(gè)PEM 格式的文件,并且將它們合二為一
命令參數(shù)如下:
原文地址:點(diǎn)擊打開(kāi)鏈接http://blog.csdn.net/tuxiangqi/article/details/17245553
cd 存放文件夾的路徑
openssl pkcs12 -clcerts -nokeys -out 輸出文件名.pem -in 原文件的名字例如SSL(Cert文件).p12 (將SSLcert文件從p12變?yōu)閜em)
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 (將key.p12 文件變?yōu)?pem,這里會(huì)提示一定要設(shè)置 私鑰的解壓密碼,至少4位,你輸入即可)
openssl rsa -in apns-dev-key.pem -out apns-dev-key-noenc.pem (這個(gè)命令是將私鑰剛才設(shè)置的 至少4位密碼 去除,如果你想保留也可以,但是需要和php服務(wù)端的同事說(shuō)明下)
cat apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem (這個(gè)命令是將 SSL 和私鑰 編譯為一個(gè)文件pem 命名可以自己改)
下面是從網(wǎng)上找到的其他資源,關(guān)于php服務(wù)器的設(shè)置
<?php $_POST['token'] = "fe28006a9d57b0727514cf42e9549446f0d4fc509cdexxxxxxxxxx"; $deviceToken = $_POST['token']; //取得設(shè)備的Token,獲取方法便見(jiàn)下文 $body = array("aps" => array("alert" => "message123gggg32323333", "badge" => 1, "sound"=>'default')); //推送方式,包括了提示內(nèi)容,提示方式和提示聲音。 $ctx = stream_context_create(); //如果在Windows的服務(wù)器上,尋找pem路徑會(huì)有問(wèn)題,路徑修改成這樣的方法: $pem = !empty($this->cfg['isga']) && $this->cfg['isga'] == 2?'apns-dev.pem':'apns-dev.pem'; //臨時(shí)全部為開(kāi)發(fā)狀態(tài) stream_context_set_option($ctx, 'ssl', 'local_cert', "/data/web/cert/".$pem); //linux 的服務(wù)器直接寫(xiě)pem的路徑即可 stream_context_set_option($ctx, 'ssl', 'local_cert', <pre name="code" html' target='_blank'>class="html">"/data/web/cert/".$pem);<pre name="code" class="html"><pre name="code" class="html"> //如果你的pem存有密碼,需要加一個(gè)密碼登陸語(yǔ)句 stream_context_set_option($ctx, 'ssl', 'passphrase', ''); //如果你的pem存有密碼,需要加一個(gè)密碼登陸語(yǔ)句 //$pass = ”123123“; //stream_context_set_option($ctx, ‘ssl’, ‘passphrase’, $pass); //此處有兩個(gè)服務(wù)器需要選擇,如果是開(kāi)發(fā)測(cè)試用,選擇第二名sandbox的服務(wù)器并使用Dev的pem證書(shū),如果是正是發(fā)布,使用Product的pem并選用正式的服務(wù)器 $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"); $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.""); fwrite($fp, $msg); fclose($fp);?>
當(dāng)然,你的
關(guān)于 和php 服務(wù)器交互這塊,到這里就結(jié)束了
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選