當(dāng)iOS端寫好啦推送功能,而后臺的小伙伴騰不出時間幫忙配合的時候,我們只有自己動手來測試自己的推送功能了
- 關(guān)于如何創(chuàng)建推送證書,這里就不介紹了,直接從如何把p12轉(zhuǎn)為pem文件開始
1.p12轉(zhuǎn)pem (pem文件發(fā)給后臺來進(jìn)行推送)
- pem文件是服務(wù)器向蘋果服務(wù)器做推送時候需要的文件,主要是做服務(wù)器的小伙伴們要用,下面介紹一下pem文件的生成。
- 打開Keychain Access,在Certificates里面找到推送證書。分別將certificate和private key(私鑰)導(dǎo)出得到.p12文件。
例如:Apple Development Push Services > Export “Apple Development Push Services ID123”,保存為 apns-dev-cert.p12。
對“Private Key”做同樣操作,保存為 apns-dev-key.p12 文件。
- 需要通過終端命令將這些文件轉(zhuǎn)換為PEM格式:這里注意要用終端進(jìn)入p12文件的目錄中再執(zhí)行下面的操作 直接復(fù)制下面的命令
openssl pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12 (導(dǎo)出證書的pem)
openssl pkcs12 -nocerts -out apns-dev-key.pem -in apns-dev-key.p12 (導(dǎo)出私鑰的pem)
此處要求輸入一個密碼,輸入123456.
移除密碼(上面的123456)openssl rsa -in apns-dev-key.pem -out apns-dev-key.pem
最后,你需要將鍵和許可文件合成為apns-dev.pem文件,此文件在連接到APNS時需要使用:
cat apns-dev-cert.pem apns-dev-key.pem > apns-dev.pem
2.終端運(yùn)行php推送信息的代碼
- 新建文件粘貼下面的代碼在里面,命名文件為
push.php
代碼如下
<?php
$deviceToken= '7431d4f6e402b180fa37d5a0fbd0c8aed7b5acc0cf60bc81e58f9d707d5c556d'; //沒有空格
$body = array("aps" => array("alert" => 'helloHui',"badge" => 2,"sound"=>'warning.caf')); //推送方式,包含內(nèi)容和聲音
$ctx = stream_context_create();
//如果在Windows的服務(wù)器上,尋找pem路徑會有問題,路徑修改成這樣的方法:
//$pem = dirname(__FILE__) . '/' . 'apns-dev.pem';
//linux 的服務(wù)器直接寫pem的路徑即可
stream_context_set_option($ctx,"ssl","local_cert","apns-dis.pem");
$pass = "";
stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
//此處有兩個服務(wù)器需要選擇,如果是開發(fā)測試用,選擇第二名sandbox的服務(wù)器并使用Dev的pem證書,如果是正是發(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) {
echo "Failed to connect $err $errstrn";
return;
}
print "Connection OK\n";
$payload = json_encode($body);
$msg = chr(0) . pack("n",32) . pack("H*", str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
echo "sending message :" . $payload ."\n";
fwrite($fp, $msg);
fclose($fp);
?>
- 把pem(這里要把a(bǔ)pns-dev-cert.pem 和 apns-dev-key.pem 合成一個文件 apns-dev.pem) 文件和php文件放到一個目錄下
在終端執(zhí)行下面的方法
php push.php
在你推送功能沒有問題的情況下,就可以收到你剛剛推送的消息了
這個技巧是跟小伙伴學(xué)到的,有問題多多指教
解答小伙伴們的疑問
- 對“Private Key”做同樣操作,保存為 apns-dev-key.p12 文件。
你這個Private Key哪來的啊
這個Private key 是私鑰 可以在鑰匙串里找的到,我直接上截圖,你們就明白了 圖中的專用密鑰就是的
8817588F-B26C-4376-83F5-DFA2E413DE2A.png