在 PHP 的實(shí)作上透過(guò) stream_context_create() 函式建立 SSL 連線(xiàn),再利用 pack() 函式實(shí)作上述的規(guī)格來(lái)傳送 Bytes 資料 (Payload),以下是 PHP 最精簡(jiǎn)的發(fā)送訊息程式碼,執(zhí)行後可以順利與 APNS 溝通與發(fā)送訊息。各位可以依據(jù)需求修改程式來(lái)發(fā)送 Enhanced 或 Simple 訊息,或者切換 Sandbox 或 Production 環(huán)境。程式范例如下:
創(chuàng)新互聯(lián)聯(lián)系電話(huà):18982081108,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)網(wǎng)頁(yè)制作領(lǐng)域十多年,包括成都崗?fù)?/a>等多個(gè)行業(yè)擁有豐富的網(wǎng)站營(yíng)銷(xiāo)經(jīng)驗(yàn),選擇創(chuàng)新互聯(lián),為網(wǎng)站錦上添花!
?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);
?
這個(gè)先說(shuō)原理!就是PHP返回一個(gè)URL給IOS端。然后IOS端接收并下載緩存顯示!OK
第一種情況:程序未啟動(dòng)(也不在后臺(tái))。點(diǎn)擊通知欄里的消息會(huì)觸發(fā)以下方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
可在這個(gè)方法里處理通知,代碼如下:
NSDictionary* pushNotification = [launchOptionsobjectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
如果用戶(hù)點(diǎn)擊桌面app的圖標(biāo)打開(kāi)程序,只會(huì)觸發(fā)這個(gè)方法
- (void)applicationDidBecomeActive:(UIApplication *)application
這時(shí)候是沒(méi)辦法得到推送的通知的。
第二種情況:程序運(yùn)行中(包括在后臺(tái)),點(diǎn)擊通知欄里的通知,會(huì)觸發(fā)以下方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary*)userInfo{
可在這個(gè)方法做相應(yīng)的處理。
信息量太少,收不到消息的原因,我隨口能說(shuō)出來(lái)一百種可能,你有沒(méi)有參與調(diào)試?
push消息連接是否暢通?別的數(shù)據(jù)是否可以正常還是專(zhuān)有數(shù)據(jù)無(wú)法接收?
是否網(wǎng)絡(luò)不暢造成的?等等,需要技術(shù)人員去調(diào)試才能得到更進(jìn)一步的解決方法
你這問(wèn)題問(wèn)成個(gè)表面原因了,這是該用戶(hù)提出來(lái)的原因,而非出自技術(shù)人員之口。
請(qǐng)問(wèn)你的客戶(hù)端是將數(shù)據(jù)流編碼了之后傳遞的么?
客戶(hù)端可以直接使用流上傳,不需要進(jìn)行編碼,然后php獲取后直接保存就可以了,如:
$byte = file_get_contents('php://input');
file_put_contents($filename,$byte);
這樣客戶(hù)端不用進(jìn)行處理,直接向服務(wù)器端寫(xiě)入數(shù)據(jù)流就可以了。
php實(shí)現(xiàn)ios推送的方法:首先把要發(fā)送的消息以及iPhone標(biāo)識(shí)打包,并發(fā)送給APNS;然后查找有相應(yīng)標(biāo)識(shí)的iPhone,并把消息發(fā)送到iPhone;最后把發(fā)來(lái)的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知即可。
可以分為三個(gè)階段:
第一階段:應(yīng)用程序把要發(fā)送的消息、目的iPhone的標(biāo)識(shí)打包,發(fā)給APNS。
第二階段:APNS在自身的已注冊(cè)Push服務(wù)的iPhone列表中,查找有相應(yīng)標(biāo)識(shí)的iPhone,并把消息發(fā)送到iPhone。
第三階段:iPhone把發(fā)來(lái)的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知。
推送服務(wù)極光還不錯(cuò),極光多種消息類(lèi)型,開(kāi)發(fā)者可以輕松地通過(guò)極光發(fā)送各個(gè)移動(dòng)平臺(tái)的系統(tǒng)通知,還可以在控制臺(tái)編輯多種富文本展示模板; 極光還提供自定義消息的透?jìng)?,客?hù)端接到消息內(nèi)容后根據(jù)自己的邏輯自由處理。
網(wǎng)頁(yè)標(biāo)題:php發(fā)送數(shù)據(jù)流給ios,php 數(shù)據(jù)流
本文路徑:http://aaarwkj.com/article20/hsocco.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、網(wǎng)站排名、用戶(hù)體驗(yàn)、虛擬主機(jī)、外貿(mào)網(wǎng)站建設(shè)、自適應(yīng)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容