IOS push推送PHP 實現

用PHP為iOS做推送服務

首先,需要一個pem的證書,該證書需要與開發時簽名用的一致。具體生成pem證書方法如下:

1.登錄到iPhone Developer Connection Portal(http://developer.apple.com/iphone/manage/overview/index.action)并點擊App IDs

2.創建一個不使用通配符的App ID。通配符ID不能用于推送通知服務。例如,com.itotem.iphone

3.點擊App ID旁的“Configure”,然后按下按鈕生產推送通知許可證。根據“向導”的步驟生成一個簽名并上傳,最后下載生成的許可證。

4.通過雙擊.cer文件將你的aps_developer_identity.cer引入Keychain中。

5.在Mac上啟動Keychain助手,然后在login keychain中選擇Certificates分類。你將看到一個可擴展選項“Apple Development Push Services”

6.擴展此選項然后右擊“Apple Development Push Services” >

Export “Apple Development Push Services ID123”。保存為apns-dev-cert.p12文件。

7.擴展“Apple Development Push Services”對“Private Key”做同樣操作,保存為apns-dev-key.p12文件。

8.需要通過終端命令將這些文件轉換為PEM格式:openssl

pkcs12 -clcerts -nokeys -out apns-dev-cert.pem -in apns-dev-cert.p12

openssl pkcs12

-nocerts -out apns-dev-key.pem -in apns-dev-key.p12

9.如果你想要移除密碼,要么在導出/轉換時不要設定或者執行:

openssl rsa -in

apns-dev-key.pem -out apns-dev-key-noenc.pem

10.最后,你需要將鍵和許可文件合成為apns-dev.pem文件,此文件在連接到APNS時需要使用:

cat

apns-dev-cert.pem apns-dev-key-noenc.pem > apns-dev.pem

PHP代碼如下:

$deviceToken = $_POST['token']; //取得設備的Token,獲取方法便見下文

$body= array(“aps” => array(“alert” => ‘message’, “badge” => 2,“sound”=>’default’));//推送方式,包括了提示內容,提示方式和提示聲音。

$ctx =

stream_context_create();

//如果在Windows的服務器上,尋找pem路徑會有問題,路徑修改成這樣的方法:

//$pem =

dirname(__FILE__) . ‘/’ . ‘apns-dev.pem’;

//linux的服務器直接寫pem的路徑即可

stream_context_set_option($ctx,

“ssl”, “local_cert”, “apns-dev.pem”);

//如果你的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 “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;

print “sending

message :” . $payload . “\n”;

fwrite($fp, $msg);

fclose($fp);

?>

講apns-dev.pem和php.php文件放到一個目錄下。

進入終端,進入php.php目錄下。鍵入命令php php.phpcategory

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

推薦閱讀更多精彩內容