今天終于完完全全的搞明白了,APNs 推送前,客戶端的準備工作需要那一些。如果有錯誤的地方,歡迎大神指出來。
準備工作:
1.到開發者中心,創建app Id,選擇push notification 功能(game center 和另外一個是必選的)。
2.創建certificates
注意:內部開發,只能是用Develpment,producation是測試完了,準備發布到appstore的時候再弄的。
其中按照Develop 流程的介紹,會創建一個CSR文件(production版本也可以公用這個CSR文件),通過 鑰匙串(通用菜單里的某個應用)創建,詳情見官方
CertificateSigningRequest.certSigningRequest,這個是最終生產出的文件
3.創建cert 文件。根據第二步,會得到一個cert文件,cert文件分 dev和pro版本。注意我們用dev測試,pro是發布
4.導入cert 文件入 鑰匙串
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服務器的設置
<?php $_POST['token'] = "fe28006a9d57b0727514cf42e9549446f0d4fc509cdexxxxxxxxxx"; $deviceToken = $_POST['token']; //取得設備的Token,獲取方法便見下文 $body = array("aps" => 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', <pre name="code" html' target='_blank'>class="html">"/data/web/cert/".$pem);<pre name="code" class="html"><pre name="code" class="html"> //如果你的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"); $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);?>
當然,你的
關于 和php 服務器交互這塊,到這里就結束了
PHP編程鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
新聞熱點
疑難解答