當前位置:首頁 » 編程語言 » ios推送php

ios推送php

發布時間: 2022-05-05 23:38:42

Ⅰ ios遠程推送消息時運行在前台怎麼處理

當你的iPhone收到推送信息後到底會發生什麼呢?總共有三種可能性:

app在前台運行. 接收到推送信息時屏幕上不會有任何顯示,也不會有提示音,但你的appdelegate會收到這個推送信息。你可以在這里加入代碼來處理接收到的信息。
app不在前台運行。iPhone可能停留在主界面或者另一個app正在運行.一個提示窗口會彈出,可能伴隨著提示音。用戶可以點擊Close按鈕來關閉這個窗口或者點擊View按鈕來打開你的app。如果用戶點擊的時Close按鈕,那你的app不會處理這個推送的信息。
iPhone在鎖屏狀態下. 同樣一個提示窗口彈出,並伴隨著提示音,但是這個窗口不會有Close和View按鈕。屏幕解鎖後會自動進入你的app。
因為appdelegate是接收推送信息的地方,我們對app的最後改動都是在AppDelegate.m文件中。我們需要修改兩處:

application:didFinishLaunchingWithOptions:函數.如果推送信息到達時你的app不在前台運行,而用戶在彈出窗口點擊了「View」按鈕,你的app會重新運行然後這個信息會作為參數注入到application:didFinishLaunchingWithOptions:函數中。
application:didReceiveRemoteNotification:函數.如果信息到達時你的app正在前台運行,那這個函數就會被調用。在iOS4.0或更新的版本,如果你的app從暫停狀態進入前台,這個函數也會被調用。你可以用UIApplication的applicationState屬性來檢查你的app是否是從暫停狀態蘇醒。
上述的兩個函數都會有一個字典參數其中包含了JSON格式的推送信息內容。OS已經幫我們把JSON格式的信息轉換成Objective-C字典了。將下面的代碼加到didFinishLaunchingWithOptions:函數的return語句前:if (launchOptions != nil)
{
NSDictionary* dictionary = [launchOptions objectForKey:];
if (dictionary != nil)
{
NSLog(@"Launched from push notification: %@", dictionary);
[self :dictionary updateUI:NO];
}
}

我們先確保launchOptions參數不是nil以及launchOptions中包含了推送信息。然後調用函數來處理這個信息。
把下面的函數加到AppDelegate.m文件中:- (void)application:(UIApplication*)application didReceiveRemoteNotification:(NSDictionary*)userInfo
{
NSLog(@"Received notification: %@", userInfo);
[self :userInfo updateUI:YES];
}

這個函數同樣依靠來完成處理信息的工作。
將下面這個函數復制粘貼到didFinishLaunchingWithOptions:函數上面:- (void):(NSDictionary*)userInfo updateUI:(BOOL)updateUI
{
Message* message = [[Message alloc] init];
message.date = [NSDate date];

NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];

NSMutableArray* parts = [NSMutableArray arrayWithArray:[alertValue componentsSeparatedByString:@": "]];
message.senderName = [parts objectAtIndex:0];
[parts removeObjectAtIndex:0];
message.text = [parts componentsJoinedByString:@": "];

int index = [dataModel addMessage:message];

if (updateUI)
[self.chatViewController didSaveMessage:message atIndex:index];

[message release];
}

我保證這是最後一點代碼了。然我們解釋一下這段代碼。Message* message = [[Message alloc] init];
message.date = [NSDate date];

首先我們創建一個Message對象。我們會把推送信息的內容提取出來,填入到這個對象中然後將這個對象加入到DataModel中。NSString* alertValue = [[userInfo valueForKey:@"aps"] valueForKey:@"alert"];

上面的代碼從推送信息中獲取了信息的內容。推送信息的JSON的格式看起來是這樣的:{
"aps":
{
"alert": "SENDER_NAME: MESSAGE_TEXT",
"sound": "default"
},
}

伺服器把信息內容以及信息作者的昵稱放到了「alert」欄中。我們對這個字典中的其他內容並不感興趣。NSMutableArray* parts = [NSMutableArray arrayWithArray:[alertValue componentsSeparatedByString:@": "]];
message.senderName = [parts objectAtIndex:0];
[parts removeObjectAtIndex:0];
message.text = [parts componentsJoinedByString:@": "];

上面的代碼將發送者的昵稱和信息內容分解出來放入到Message對象中。發送者昵稱是分號和空格之前的字元串。int index = [dataModel addMessage:message];

現在我們可以把這個Message對象加入到DataModel中了。if (updateUI)
[self.chatViewController didSaveMessage:message atIndex:index];

最後,我們讓ChatViewController加入這個新的信息。但是,如果推送信息是在didFinishLaunchingWithOptions函數中收到的,那我們就不能刷新這個視圖,因為那時ChatViewController的表格還沒有載入。視圖加入這個信息會導致系統崩潰的。
就這些了。編譯並運行現有的程序。用test_message.html中的表格來發送一些信息。你應該在app的聊天視圖中看到這些信息氣泡出現。自定義提示信息
你應該還記得我們之前在介紹推送信息時曾說過你可以自定義提示設置。比如你可以在有信息時播放一個自定義的提示音。我在app的resources文件夾中放了一個音頻文件叫做beep.caf。
打開api.php文件並在makePayload()函數中將下面這行代碼:$payload = '{"aps":{"alert":"' . $nameJson . ': ' . $textJson . '","sound":"default"}}';

改為:$payload = '{"aps":{"alert":"' . $nameJson . ': ' . $textJson . '","sound":"beep.caf"}}';

你不需要改變app本身的任何代碼,甚至不用重新編譯。但你還是應該在設備上關閉打開了的app。因為如果我們的app正在前台運行,那提示音是不會響的。現在用test_message.html給app發一個信息。當提示窗口出現時,提示音是不是不同了?
你也可以實驗修改其他的選項。比如提供自定義按鈕,或者給app設定數量小圖標。(如果你想實驗數量小圖標,別忘了讓app注冊接收數量圖標。現在我們的app只會有提示音和提示窗口。)

Ⅱ PHP的iOS推送通知(沒有許可權)問題,怎麼解決

信息量太少,收不到消息的原因,我隨口能說出來一百種可能,你有沒有參與調試?
push消息連接是否暢通?別的數據是否可以正常還是專有數據無法接收?
是否網路不暢造成的?等等,需要技術人員去調試才能得到更進一步的解決方法
你這問題問成個表面原因了,這是該用戶提出來的原因,而非出自技術人員之口。

Ⅲ iOS 和 Android 的後台推送原理各是什麼有什麼區別

先說原理。

iOS 的推送:就是 Apple 官方的 APNs (Apple Push Notification service)。
Android 的推送:Google 官方的是 GCM (Google Cloud Messaging)。

本質上,APNs 與 GCM 是類似的技術實現原理:即系統層有一個常駐的 TCP 長連接,一直保持的長連接,即使手機休眠的時候也在保持的長連接。

這里對於大部分人來說,最不理解的就是,休眠時候都保持在那裡的 TCP 長連接,不會耗電很厲害么?
答案是:不會。這是手機的設計來做到的。TCP長連接有個心跳的時間,在國外可以很長比如30分鍾,在國內則因為網路環境復雜一般10分鍾。客戶端發起的心跳,會短暫地消耗手機電能,但在這個心跳間隔期間,則消耗電能是很少的。當在心跳期間伺服器端有推送信息過來時,客戶端可以收到並做處理。
這里有篇文章以 Android 為例做原理解釋:http://blog.jpush.cn/index.php/jpush_wireless_push_principle/

再說 APNs 的設計成功處。

iOS 為了真正地為用戶體驗負責,不允許應用在後台活動。有了這個限制,但是對於終端設備,應用又是有必要「通知」到達用戶的,隨時與用戶主動溝通起來的(典型的如聊天應用)。

這就是 APNs 的邏輯所在:iOS 自己做個長駐後台保持連接。所有應用,有必要(申請)並且被允許(用戶可以改設置)的話,可以通過 APNs 中轉到達用戶。

這樣就完善了!

有可能很多人沒有真正地體會到 iOS 不允許後台應用的好處。我是 Android 開發人員,Android 手機上一般只保留幾個常用的應用,不常用就卸載。但是我的 iPhone / iPad 上則是,除非空間不足,一般不會刪除應用。
Android 就像 Windows,你要真的很費心去維護:有軟體在干背後干壞事么?設備又給拖慢了,要清理。要考慮殺毒了。。。

Android 因為後台可以長駐,尤其是國內的 Android 的手機上 Google自家的推送服務 GCM 處於基本不可用的狀態。所以,各App各顯神通。聊天類應用的話,大多數直接借用 XMPP 規范里的一些成果。少量如微信有IM底子的,自己開發協議。這些在實現原理上與 APNs / GCM 沒有本質的區別,但有一定的技術門檻。而大多數普遍應用,要使用推送的話,則使用輪詢的方式簡單實現。

其實,國外如 Urban Airship 自己實現了 Android 上的第三方提供的推送平台。近期國內如極光推送也實現了第三方的推送平台(技術與微信、GCM、APNs類似)。理論上,如果一個 Android 設備上多款應用都使用極光推送這種第三方推送平台的話,也可以如 APNs 一樣達到節省電量、流量消耗的效果。

Ⅳ php ios 推送 可以使用curl嗎

<?php
02//
03ini_set('display_errors','on');
04error_reporting(E_ALL);
05
06
07//Apnsconfig
08
09//true-useapnsinproctionmode
10//false-useapnsindevmode
11define("PRODUCTION_MODE",false);
12
13$serverId=1;
14$serverName='my-server-domain.com';
15
16if(PRODUCTION_MODE){
17$apnsHost='gateway.sandbox.push.apple.com';
18}else{
19$apnsHost='gateway.push.apple.com';
20}
21
22$apnsPort=2195;
23if(PRODUCTION_MODE){
24//
25$apnsCert=$_SERVER['DOCUMENT_ROOT'].'/apns/apns-dominos-development.pem';
26}else{
27//Useaproctionpushcertificate
28$apnsCert=$_SERVER['DOCUMENT_ROOT'].'/apns/apns-dominos-proction.pem';
29}
30
31
32//---Sendingpushnotification---
33
34//Insertyourdevicetokenhere
35$device_token="<>";//SomeDeviceToken
36
37
38//Notificationcontent
39
40$payload=array();
41
42//Basicmessage
43$payload['aps']=array(
44'alert'=>'testing1,2,3..',
45'badge'=>1,
46'sound'=>'default',
47);
48$payload['server']=array(
49'serverId'=>$serverId,
50'name'=>$serverName
51);
52//
53$payload['data']=array(
54'foo'=>"bar"
55);
56$payload=json_encode($payload);
57
58$streamContext=stream_context_create();
59stream_context_set_option($streamContext,'ssl','local_cert',$apnsCert);
60stream_context_set_option($streamContext,'ssl','passphrase',"");
61
62
63$apns=stream_socket_client('ssl://'.$apnsHost.':'.$apnsPort,$error,$errorString,2,STREAM_CLIENT_CONNECT,$streamContext);
64
65
66$deviceToken=str_replace("","",substr($device_token,1,-1));
67echo$deviceToken;
68$apnsMessage=chr(0).chr(0).chr(32).pack('H*',str_replace('','',$deviceToken)).chr(0).chr(mb_strlen($payload)).$payload;
69fwrite($apns,$apnsMessage);
70
71
72//socket_close($apns);
73fclose($apns);
74
75?>

Ⅳ 極光推送php伺服器端怎麼修改ios生產或開發平台

你需要用自己的開發者證書生成一個推送證書,然後上傳到極光推送.然後集成極光SDK就可以實現推送了.推送是伺服器那邊的工作,極光就是減少了你們伺服器開發人員的工作量.

Ⅵ ios推送消息 用php推送怎麼實現

php實現ios推送的方法:首先把要發送的消息以及iPhone標識打包,並發送給APNS;然後查找有相應標識的iPhone,並把消息發送到iPhone;最後把發來的消息傳遞給相應的應用程序,並且按照設定彈出Push通知即可。 可以分為三個階段:
第一階段:應用程序把要發送的消息、目的iPhone的標識打包,發給APNS。
第二階段:APNS在自身的已注冊Push服務的iPhone列表中,查找有相應標識的iPhone,並把消息發送到iPhone。
第三階段:iPhone把發來的消息傳遞給相應的應用程序,並且按照設定彈出Push通知。
推送服務極光還不錯,極光多種消息類型,開發者可以輕松地通過極光發送各個移動平台的系統通知,還可以在控制台編輯多種富文本展示模板; 極光還提供自定義消息的透傳,客戶端接到消息內容後根據自己的邏輯自由處理。

Ⅶ ios為什麼php推送成功手機上收不到推送消息

如果你確認 appKey 在 SDK 客戶端與 Portal 上設置是一致,其他環節也按照文檔正確地操作。但還是收不到推送消息。那麼,有一定的可能性,是你在 Portal 上上傳的證書,不是 APNs (Push) 證書。 請參考iOS 證書設置指南再次檢查證書選擇是否正確...

Ⅷ ios app 通知角標+1 php該怎麼做

這個是你app跟後端通信的操作,php無法直接操作ios,你可以隨便推送一個數據給你的app,讓你的app來實現

熱點內容
ftppro特效復制方法 發布:2024-05-08 04:06:05 瀏覽:925
平板電腦編譯軟體 發布:2024-05-08 04:05:46 瀏覽:477
榮耀v6平板擴展存儲 發布:2024-05-08 03:41:12 瀏覽:422
安卓手機為什麼半年一更新 發布:2024-05-08 03:36:52 瀏覽:660
存儲設備報價 發布:2024-05-08 02:22:01 瀏覽:554
定步長的演算法 發布:2024-05-08 02:16:18 瀏覽:110
怎麼使用pe口袋伺服器 發布:2024-05-08 02:02:18 瀏覽:471
xml資料庫c 發布:2024-05-08 02:01:46 瀏覽:456
仿知乎android 發布:2024-05-08 01:56:00 瀏覽:904
mysql編譯參數 發布:2024-05-08 01:53:46 瀏覽:194