在 PHP 的實作上透過 stream_context_create() 函式建立 SSL 連線,再利用 pack() 函式實作上述的規格來傳送 Bytes 資料 (Payload),以下是 PHP 最精簡的發送訊息程式碼,執行後可以順利與 APNS 溝通與發送訊息。各位可以依據需求修改程式來發送 Enhanced 或 Simple 訊息,或者切換 Sandbox 或 Production 環境。程式范例如下:
創新互聯聯系電話:18982081108,為您提供成都網站建設網頁設計及定制高端網站建設服務,創新互聯網頁制作領域十多年,包括成都崗亭等多個行業擁有豐富的網站營銷經驗,選擇創新互聯,為網站錦上添花!
?php
// Production mode
$certificateFile = 'apns-dis.pem';
$pushServer = 'ssl://gateway.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.push.apple.com:2196';
// Sandbox mode
$certificateFile = 'apns-dev.pem';
$pushServer = 'ssl://gateway.sandbox.push.apple.com:2195';
$feedbackServer = 'ssl://feedback.sandbox.push.apple.com:2196';
// push notification
$streamContext = stream_context_create();
stream_context_set_option($streamContext, 'ssl', 'local_cert', $certificateFile);
$fp = stream_socket_client(
$pushServer,
$error,
$errorStr,
100,
STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT,
$streamContext
);
// make payload
$payloadObject = array(
'aps' = array(
'alert' = 'Server Time:'.date('Y-m-d H:i:s'),
'sound' = 'default',
'badge' = 3
),
'custom_key' = 'custom_value'
);
$payload = json_encode($payloadObject);
$deviceToken = 'aa3b045415034b96da5e98f57e35735a8ed8b842506f770ee769de32c6305ed7';
$expire = time() + 3600;
$id = time();
if ($expire) {
// Enhanced mode
$binary??= pack('CNNnH*n', 1, $id, $expire, 32, $deviceToken, strlen($payload)).$payload;
} else {
// Simple mode
$binary??= pack('CnH*n', 0, 32, $deviceToken, strlen($payload)).$payload;
}
$result = fwrite($fp, $binary);
fclose($fp);
?
這個先說原理!就是PHP返回一個URL給IOS端。然后IOS端接收并下載緩存顯示!OK
第一種情況:程序未啟動(也不在后臺)。點擊通知欄里的消息會觸發以下方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
可在這個方法里處理通知,代碼如下:
NSDictionary* pushNotification = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
如果用戶點擊桌面app的圖標打開程序,只會觸發這個方法
- (void)applicationDidBecomeActive:(UIApplication *)application
這時候是沒辦法得到推送的通知的。
第二種情況:程序運行中(包括在后臺),點擊通知欄里的通知,會觸發以下方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary*)userInfo{
可在這個方法做相應的處理。
信息量太少,收不到消息的原因,我隨口能說出來一百種可能,你有沒有參與調試?
push消息連接是否暢通?別的數據是否可以正常還是專有數據無法接收?
是否網絡不暢造成的?等等,需要技術人員去調試才能得到更進一步的解決方法
你這問題問成個表面原因了,這是該用戶提出來的原因,而非出自技術人員之口。
請問你的客戶端是將數據流編碼了之后傳遞的么?
客戶端可以直接使用流上傳,不需要進行編碼,然后php獲取后直接保存就可以了,如:
$byte = file_get_contents('php://input');
file_put_contents($filename,$byte);
這樣客戶端不用進行處理,直接向服務器端寫入數據流就可以了。
php實現ios推送的方法:首先把要發送的消息以及iPhone標識打包,并發送給APNS;然后查找有相應標識的iPhone,并把消息發送到iPhone;最后把發來的消息傳遞給相應的應用程序,并且按照設定彈出Push通知即可。
可以分為三個階段:
第一階段:應用程序把要發送的消息、目的iPhone的標識打包,發給APNS。
第二階段:APNS在自身的已注冊Push服務的iPhone列表中,查找有相應標識的iPhone,并把消息發送到iPhone。
第三階段:iPhone把發來的消息傳遞給相應的應用程序,并且按照設定彈出Push通知。
推送服務極光還不錯,極光多種消息類型,開發者可以輕松地通過極光發送各個移動平臺的系統通知,還可以在控制臺編輯多種富文本展示模板; 極光還提供自定義消息的透傳,客戶端接到消息內容后根據自己的邏輯自由處理。
網頁標題:php發送數據流給ios,php 數據流
本文路徑:http://vcdvsql.cn/article20/hsocco.html
成都網站建設公司_創新互聯,為您提供、網站排名、用戶體驗、虛擬主機、外貿網站建設、自適應網站
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯