iOS 跳過服務(wù)器自己測試推送功能

當(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容