IOS推送

推送:

用戶被動的接收消息移迫,是程序在后臺的一種通知機制推送通知跟NSNotification不同
1.NSNotification是抽象的旺嬉,不可見的
2.推送通知是可見的

IOS中提供了兩種推送通知

1.本地推送通知(Local Notification)
2.遠程推送通知(Remote Notification)

源生和極光

推送的作用:可以讓不在前臺運行的app,告知客戶app內部發(fā)生的事情厨埋。(QQ消息推送邪媳,微信消息推送等)

推送通知的呈現(xiàn)效果:

1.在屏幕頂部顯示的一條橫幅
2.在屏幕中間彈出一個UIAlertView
3.在鎖屏界面顯示一塊橫幅
4.更新app圖標的數(shù)字
5.播放提示音

PS:工作常用、面試必問

推送

源生方法

  • 推送原理
    1.應用程序注冊消息推送荡陷。
    2.IOS從APNS Server獲取device token雨效,應用程序接收device token.
    3.應用程序將device token發(fā)送給PUSH服務端程序
    4.服務端向APNS發(fā)送推送消息
    5.APNS服務將消息發(fā)送給iPhone應用程序
Paste_Image.png

一、推送證書

二废赞、配置工程

三设易、需要實現(xiàn)的代碼

首先由應用注冊遠程通知。注冊成功之后APNS會返回一個唯一標識的設備令牌碼deviceToken蛹头,應用拿到分配的設備令牌碼之后顿肺,需要將該設備的設備令牌碼連同其他設備以及賬戶相關信息(如果有必要的話)傳遞給該應用對應的后臺服務器。當后臺服務器需要推送消息時渣蜗,就將消息以及需要推送設備對應的deviceToken傳遞給APNS屠尊,由APNS完成推送工作
建立我們的推送的項目(注意Bundleldentifier必須和我們推送應用的App id一致
在AppDelegate里didiFinishLaunchingWithOptions函數(shù)里寫

- (BOOL)application:(UIApplication *)applicationdidFinishLaunchingWithOptions:(NSdicionary *)launchOptions {
......
//推送的形式:標記,聲音耕拷,提示
[[UIApplication sharedApplication] registerForRemoteNotificationTypes: UIRemoteNotificationTypeBadge |UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert];
   return YES;
}
 
- (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)pToken {
   NSLog(@"regisger success:%@",pToken);
   //注冊成功讼昆,將deviceToken保存到應用服務器數(shù)據(jù)庫中
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    // 處理推送消息
    NSLog(@"userinfo:%@",userInfo);
   
    NSLog(@"收到推送消息:%@",[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]);
 //Icon推送數(shù)量設為0  
//    application.applicationIconBadgeNumber=0;  

}
- (void)application:(UIApplication *)applicationdidFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
   NSLog(@"Registfail%@",error);
}

我們運行程序的時候會有提示,說我們的程序要發(fā)送推送通知骚烧。
應用程序不出在后臺浸赫,且通過推送通知打開的時候闰围,如果需要推送下來相關的信息可以在

- (**BOOL**)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  

方法中加入

 ///應用程序不處在后臺,并且是通過推送打開應用的時候  
** ****if** (launchOptions) {  
     ///獲取到推送相關的信息  
     NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];  
 }  

第三方
極光推送既峡、友盟等
詳見官網(wǎng)
https://www.jpush.cn/

什么是遠程推送羡榴?
遠程:從遠程服務器推送給客戶端的通知(需要聯(lián)網(wǎng))
從服務器發(fā)送了一個通知,接收到通知以后做的和本地通知類似的事情运敢,這個通知只不過是從遠方的服務器傳過來的校仑,要做的這個遠程推送通知是由遠程推送服務,又稱為APNS(Apple Push Notification Services:蘋果推送通知服務)传惠,蘋果給我們提供了這個服務就可以做遠程推送服務了迄沫。
為什么要用蘋果的服務器?-->我們都知道卦方,程序在或者的時候是可以跟自己的服務器進行交互的(程序或著可以執(zhí)行代碼)羊瘩,但只要用戶關閉了app,就無法跟app的服務器溝通盼砍,無法從服務器上獲得最新的數(shù)據(jù)內容尘吗。我們在使用QQ的時候,即使沒有登錄QQ也能收到信息衬廷,這就是用遠程推送通知做的摇予,不管登錄還是沒有登錄QQ,都可以接收到信息(前提是聯(lián)網(wǎng)狀態(tài)下)

  • 遠程推送通知使用須知
    所有的蘋果設備在聯(lián)網(wǎng)的狀態(tài)下吗跋,都會與蘋果的設備建立長連接(只要建立連接侧戴,想發(fā)送數(shù)據(jù),隨時都可以發(fā)送跌宛,始終保持連接)蘋果有一個服務器集群酗宋,跟所有的蘋果設備建立長連接
  • 長連接的作用
    時間校準、系統(tǒng)升級疆拘、查找我的iPhone
  • 長連接的好處
    數(shù)據(jù)保持最新狀態(tài)蜕猫,數(shù)據(jù)傳輸快(以前的連接需要根據(jù)協(xié)議多次進行連接,蘋果的直接就是已經(jīng)連接上的了)哎迄。只要和蘋果的設備保持長連接就可以享受蘋果的APNS服務回右,舉個例子:

比如說我AgentLXJ現(xiàn)在有一部IPhone手機,手機里面有很多應用比如QQ,QQ有服務器吧,我的手機現(xiàn)在聯(lián)網(wǎng)并且QQ軟件要打開,陌陌的服務器就可以和我交互,我想傳遞消息,或者我接收到了消息,陌陌服務器金額以直接的告訴我.如果退出了QQ(不是卸載),但我的手機還在聯(lián)網(wǎng),這時QQ就不能給我推送消息,這時候蘋果的服務就可以,只要我的手機在聯(lián)網(wǎng)狀態(tài)下(蘋果建立的就是長連接),蘋果要給我推送消息要是知道是哪個設備,怎么區(qū)分是哪一臺設備呢?我們的手機都有自己的唯一標識,有了設備的唯一標識就知道推送給哪一臺設備,但是還有一個問題,我的手機上不可能只有QQ這么一個軟件,比如還有微信,陌陌等軟件,所以蘋果還要知道軟件的BundleID(應用程序的唯一標識),有了設備和程序的唯一標識,就知道了推送給哪個設備的哪個應用程序.現(xiàn)在又有了一個問題,蘋果不知道要推送什么消息內容.這里說明一個概念:消息體(來源:是誰發(fā)給我的,比如是:小媳婦.消息內容:比如給我說的是:吃飯了么?),蘋果不知道這個消息體,但這個消息QQ知道,我的小媳婦發(fā)的這個消息體先到QQ服務器(告訴QQ我要給他發(fā)送一條消息),QQ服務器先看看被接受的人(我)在線沒有,在線了直接發(fā)過去就完了,如果我不在線,這時蘋果服務器可以發(fā)送,所以要發(fā)給蘋果服務器,但是發(fā)給蘋果服務器是有要求的1:交99美元成為開發(fā)者才能享受此服務.2:消息體 3目標的DeviceToken,QQ的服務器沒有資格保存每一個設備的唯一標識和BundleID,蘋果想了一個辦法,叫做DeviceToken(APPID(應用位置標識)和UUID(設備唯一標識)).告訴我這三點蘋果就可以幫我們做事情,怎么解析DeviceToken蘋果知道,所以QQ有一個數(shù)據(jù)庫,一旦有人注冊或者是登陸(因為手機和蘋果是長連接,一旦登陸或注冊之前就會發(fā)送設備ID和軟件ID,并在蘋果服務器獲得DeviceToken)QQ數(shù)據(jù)庫就會存用戶的信息,比如ID,名字,性別,DeviceToken(假如我的DeviceToken經(jīng)蘋果的加密生成的是ApentLXJ)等等信息,DeviceToken在每次登陸的時候保存,因為用戶有可能換手機,一旦換手機用戶的UUID就換了,這時需要重新生成一個DeviceToken,然后把最新的Devicetoken保存到服務器中,小媳婦我發(fā)消息的時候就去找蘋果,看是否符合上面你的三條(交過錢了,有消息體,有目標的DeviceToken:ApentLXJ)),一看都符合就發(fā)給我了
補充的:一個手機有多少個應用程序就有多少個DeviceToken,
如果QQ同時推送給多臺設備?比如我的QQ手機上登了,IPAD上也登了,這時候取決于QQ服務器的發(fā)給蘋果的APNS的DeviceToken,發(fā)一個就發(fā)給一臺設備,兩個DeviceToken,就發(fā)給兩臺設備.*

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市漱挚,隨后出現(xiàn)的幾起案子翔烁,更是在濱河造成了極大的恐慌,老刑警劉巖旨涝,帶你破解...
    沈念sama閱讀 216,402評論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蹬屹,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機慨默,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評論 3 392
  • 文/潘曉璐 我一進店門贩耐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人厦取,你說我怎么就攤上這事潮太。” “怎么了蒜胖?”我有些...
    開封第一講書人閱讀 162,483評論 0 353
  • 文/不壞的土叔 我叫張陵消别,是天一觀的道長搓蚪。 經(jīng)常有香客問我凌净,道長莽龟,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評論 1 292
  • 正文 為了忘掉前任朋沮,我火速辦了婚禮,結果婚禮上缀壤,老公的妹妹穿的比我還像新娘樊拓。我一直安慰自己,他們只是感情好塘慕,可當我...
    茶點故事閱讀 67,176評論 6 388
  • 文/花漫 我一把揭開白布筋夏。 她就那樣靜靜地躺著,像睡著了一般图呢。 火紅的嫁衣襯著肌膚如雪条篷。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,146評論 1 297
  • 那天蛤织,我揣著相機與錄音赴叹,去河邊找鬼。 笑死指蚜,一個胖子當著我的面吹牛乞巧,可吹牛的內容都是我干的。 我是一名探鬼主播摊鸡,決...
    沈念sama閱讀 40,032評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼绽媒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了免猾?” 一聲冷哼從身側響起是辕,我...
    開封第一講書人閱讀 38,896評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掸刊,沒想到半個月后免糕,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,311評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,536評論 2 332
  • 正文 我和宋清朗相戀三年石窑,在試婚紗的時候發(fā)現(xiàn)自己被綠了牌芋。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,696評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡松逊,死狀恐怖躺屁,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情经宏,我是刑警寧澤犀暑,帶...
    沈念sama閱讀 35,413評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站烁兰,受9級特大地震影響耐亏,放射性物質發(fā)生泄漏。R本人自食惡果不足惜沪斟,卻給世界環(huán)境...
    茶點故事閱讀 41,008評論 3 325
  • 文/蒙蒙 一广辰、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧主之,春花似錦择吊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至粤攒,卻和暖如春所森,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背琼讽。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評論 1 269
  • 我被黑心中介騙來泰國打工必峰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人钻蹬。 一個月前我還...
    沈念sama閱讀 47,698評論 2 368
  • 正文 我出身青樓吼蚁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親问欠。 傳聞我的和親對象是個殘疾皇子肝匆,可洞房花燭夜當晚...
    茶點故事閱讀 44,592評論 2 353

推薦閱讀更多精彩內容