{eyou:include file='banner.htm'/}
了解iOS消息推送一文就夠(史上最全iOS Push技術(shù)詳解)
2026-05-05 04:30:00
955
[摘要] 天津九安特機電工程有限公司(www.hunqingrc.com)了解iOS消息推送一文就夠史上最全iOS Push技術(shù)詳解)1、引言開(kāi)發(fā)iOS系統中的Push推送,通常有以下3種情況:1)在線(xiàn)Push:比如QQ、微信等IM界面處于前臺時(shí),聊天消息和指令都會(huì )通過(guò)IM

了解iOS消息推送一文就夠(史上最全iOS Push技術(shù)詳解)

1、解ih技解引言

開(kāi)發(fā)iOS系統中的消息Push推送,通常有以下3種情況:

1)在線(xiàn)Push:比如QQ、推送微信等IM界面處于前臺時(shí),文夠聊天消息和指令都會(huì )通過(guò)IM自建的史上術(shù)詳網(wǎng)絡(luò )長(cháng)連接通道推送過(guò)來(lái),這種(′▽?zhuān)?Push在本文(wen)中暫且稱(chēng)??為“在線(xiàn)Push”;2)本地Push:這種就是最全最常見(jiàn)的iOS系統通??知(作(zuo)用相當于傳統PC端的提示窗口,在iOS10以后全部整合到UserNoti???fications.framework框架(′?ω?`)了),解ih技解不涉及任何網(wǎng)絡(luò )數據,消息僅僅是推送讓APP擁有一個(gè)統一系統通知方式而已,比如:鬧鐘的文夠定時(shí)提醒等;3)離線(xiàn)/遠程Push:這就是iOS程序員最熟悉的APNs這一套東西了,它(ta)使得APP處于后臺或者被kill的史上術(shù)詳情況下仍能收到網(wǎng)絡(luò )通知,最常見(jiàn)的最全應場(chǎng)景就是IM聊天工具了。

本文將對iOS Push的解ih技解在線(xiàn)push、本地p??ush及離線(xiàn)(遠程)push進(jìn)??行了詳細梳理,消息介??紹相關(guān)邏輯、推(???)送測試時(shí)要注意的要點(diǎn)以及相關(guān)工具的使用。小小的Push背后蘊藏著(zhù)大大的邏輯,我們一起來(lái)學(xué)習吧?。ū疚耐桨l(fā)布于:http??://www.52im.net(?_?;)/thread-1762-1-1.h??tml)

2、相關(guān)文章

《移動(dòng)端實(shí)時(shí)消息推送技ヽ(′ー`)ノ術(shù)淺析》

《iOS的推送服務(wù)APNs詳解:??設計思路、技術(shù)原理及缺陷等》

《信鴿團隊原創(chuàng ):一起走過(guò) iOS10 上消息推送(APNS)的坑??》

《掃盲貼:淺談iOS和Android后臺實(shí)時(shí)消息推送的原理和區別》

3、iOS的Push種類(lèi)

3.1在線(xiàn)pus(′?`)h

在線(xiàn)push:當用戶(hù)在線(xiàn)(APP在前臺)時(shí),收到的狀態(tài)欄的消??息提醒,稱(chēng)為在線(xiàn)push。這個(gè)功能與蘋(píng)果系統無(wú)關(guān),是我們自己的APP開(kāi)發(fā)的一種功能,該push與設置中是否打開(kāi)“通知”無(wú)關(guān)。

這里以iOS?? Qzone為例,當APP在前臺時(shí),自己發(fā)的說(shuō)說(shuō)被點(diǎn)贊了,收到的在線(xiàn)push如下:

3.2離線(xiàn)/遠程pヽ(′?`)ノush

離線(xiàn)push:當APP在??離線(xiàn)(kill掉進(jìn)程、切到后臺、鎖屏)時(shí),收到的消息提醒,稱(chēng)為離線(xiàn)push。離線(xiàn)push是需要經(jīng)過(guò)蘋(píng)果的APNs服務(wù)器才可以推送到某臺設備的某個(gè)APP上的,這是和本地push的本質(zhì)區別。push與設置中是否打開(kāi)“通知”有關(guān)。

這里最簡(jiǎn)單的以大家常( ?° ?? ?°)用的手機QQ為例,當APP在后臺、鎖屏???或者被??kiil了進(jìn)程時(shí),收到了消息:

一種特殊的遠程push:靜??默push

嚴格來(lái)說(shuō),靜默push屬于遠程push的一種特殊??情況,靜默push用的場(chǎng)景不較少,這里只做簡(jiǎn)要介紹。

首先我們看看??離線(xiàn)(遠??程)push與靜默pu??sh的區別:

【普通離線(xiàn)(遠程)push】:收到推送后(有文字有聲音),點(diǎn)開(kāi)通知,進(jìn)入APP后,才執( ?ω?)行– (voi(⊙_⊙)d)application:(UIApplication didReceiveRemoteNotification:ヾ(′ω`)?(NSDictionary fetc(╯°□°)╯hヾ(′▽?zhuān)??CompletionHandler:(void result))handler *)application *)userInfo (^)(UIBackgroundFetchResult

【靜默push】:(′?`*)收到推送(沒(méi)有文字沒(méi)有聲音),不用點(diǎn)開(kāi)通知,不用打(′▽?zhuān)?開(kāi)APP,就能執行(void)application:(UIApplication )application)userInfo didReceiveRemoteNotification:(??NSDictionary fetchCompletio??nHan??dler:(void (^)(UIBackgroundFetchResultresult))handler,用戶(hù)完全感覺(jué)不到。

所以靜默push又被我們稱(chēng)做 Background Remote Notification(后臺遠程推送)。靜默推送是在iOS7之后推出的一種推送方式。它與其他推送的區別在于允許應用收到通知后在后臺(ヽ(′ー`)ノbackground)狀態(tài)下運行一段代碼ヽ(′▽?zhuān)?ノ,可用于從ヽ(′?`)ノ服務(wù)器獲取內容更新。

3.3本地push

本地push:本地推送和遠程??推送的功能是一樣的,都是要提醒用戶(hù)去做某些事情。但是和遠程推送不同的就是本地推送是不需要設備聯(lián)網(wǎng)的,而遠程推送是必需要設備聯(lián)網(wǎng)的,因為只有聯(lián)網(wǎng)狀態(tài)下,才能和蘋(píng)果的APNs服務(wù)器建立長(cháng)連接,從而推送消息。本地推送是由App自己設定的,并且發(fā)送給安裝此App的這臺設備,屬于一對一的對應關(guān)系。比較典型的應用??是鬧鐘類(lèi)似的場(chǎng)景。該push與設置中是否打開(kāi)“通知”有關(guān)。

最容易看到本地push的場(chǎng)景,可以直接在手機設置一個(gè)計時(shí)器,計時(shí)器時(shí)間到了就會(huì )彈出(′ω`)本地push:

由于本地p(′?_?`)ush原理和作用相對于在線(xiàn)push和離線(xiàn)push都更為簡(jiǎn)單明了,下文主要介紹在線(xiàn)push和離線(xiàn)push。

4、本地push實(shí)現

4.1iOS10以前本地push彈出方式

試驗??過(guò)iOS10以前的本地push方法在iOS10+的系統也能使用,不過(guò)可能有些參數不生效。

1)立即展示( iOS10以前)

本地p(?????)ush稍微簡(jiǎn)單,有兩種方式可以調用,一種是presentLoca??lNotificationNow方法,立???即展示本地push:

2)延遲展示( iOS10以前)

另一種是用scheduleLocalNotification方法按計劃來(lái)??彈本地推送:

如果使(shi)用這種方法,需要對推送??的時(shí)間ヾ(?■_■)ノ進(jìn)行設置,舉個(gè)例子,設為5秒后:

4.2(′ω`)設置本地push內容( iOS10以前)

其中alertBody是消息內容鎖屏與不鎖屏時(shí)效果如下:

applicationIconBadgeNumber是消息數量,我們可以看到這里設置為66:

4.3處理(╯°□°)╯本地pusヾ(′▽?zhuān)??h ( iOS10以前)

1)App沒(méi)有啟動(dòng)情況下處理本地push

這種情況下,當點(diǎn)擊通知時(shí),會(huì )啟動(dòng)App,而在A(yíng)pp中,開(kāi)發(fā)人員可以通(′▽?zhuān)?過(guò)實(shí)現AppDelegat(′;ω;`)e中的方法:- (BOOL)application:(′▽?zhuān)?)UIApplication)application didFinishLaunchingWithOptions:NSDictionary *)launchOptions,然后從l??auchOptions中獲取App啟動(dòng)的原因,若是因為本地通知??,則可以App啟動(dòng)時(shí)(shi)對App做對應的操作(′▽?zhuān)?,比方說(shuō)跳轉到某個(gè)畫(huà)面等等。

2)App運行在后臺及前臺

上面的2種情況的處理基本一致, 不同點(diǎn)只有當運行再后( ???)臺的時(shí)候,會(huì )有彈窗提示用戶(hù)另外一個(gè)App有通知,對于本地通知單的處理都是通過(guò)AppDelegate的方法:- (void)application:UIApplication )application didReceiveLocalNotification:UILocalNotification *)notification來(lái)處理的。

4.4iOS10以后本地push彈出方式

iOS10以后,本地通知可以由使用(yong) UNUserNotificati??onCenter來(lái)管理。

創(chuàng )建方法:

接下來(lái)需要需創(chuàng )建一個(gè)包含待通知內容的 UNMu??tableNotificaヽ(′▽?zhuān)?ノtionContent 對象ヽ(′?`)ノ:

在iOS上可以通過(guò)以下幾種觸發(fā)器來(lái)觸發(fā)??本地push:

1)UNCalendarNotificationTrigger 傳送本地通知的日期和時(shí)間;2)UNTimeIntervalNotificat(′_ゝ`)ionTrigger 傳遞本地通知之前必須過(guò)期的時(shí)間;3)UNLocationNotificationTrigger 用戶(hù)必須達到的地理位置才能(neng)提供本地通知;4)UNPushNotificationTrigger 表示通知是從Apple推送通知服務(wù)發(fā)送的對象。

假如以時(shí)間(jian)間隔(TimeInterval)來(lái)觸發(fā),則設置觸發(fā)器代碼為:

推送本地push的代碼為:

5、在線(xiàn)、離線(xiàn)(遠程)pushヽ(′ー`)ノ流程

在線(xiàn)push相對簡(jiǎn)單,因為是內部實(shí)現,具體流程如上面所示。

1)判斷??app是否在線(xiàn):??

此處可以根據APP自身的后臺策略如上一次與后臺交互的時(shí)間等??方法來(lái)判斷APP是否在線(xiàn)或者離線(xiàn)。認┐(′д`)┌為在線(xiàn),會(huì )發(fā)送在線(xiàn)push,否則(ze),發(fā)送離線(xiàn)push。

2)在線(xiàn)pヽ(′ー`)ノush有以下幾個(gè)特點(diǎn):

不需要經(jīng)過(guò)蘋(píng)果APNs;需要(yao)自己實(shí)現長(cháng)ヽ(′?`)ノ鏈接;代碼在app內部實(shí)??現。

5.2離線(xiàn)(遠程)push流程

主要流程為:

1)服務(wù)器端將消息先發(fā)送到蘋(píng)果的APNs;2)由蘋(píng)果的APNs將消息推送到客戶(hù)的設備端;3)由iOS系統將接收到的消息傳遞給相應的App。

簡(jiǎn)而言之離線(xiàn)push是蘋(píng)果系統ヽ(′?`)ノ的行為,與app狀態(tài)無(wú)關(guān),能夠直接推送到指定手機ヽ(′▽?zhuān)?/的指定app。

在進(jìn)一步了解離線(xiàn)pus(′?`*)h前,我們有必要先了解幾個(gè)名詞。

【離線(xiàn)push名詞解釋】:

(1)名詞解釋之APNs

APNs:Apple Push No(O_O)tification service(蘋(píng)果推送通知服務(wù))。

APNs主要用于以下場(chǎng)景:當用戶(hù)主動(dòng)殺掉 APP,或者 APP 進(jìn)入后臺??超過(guò)約定時(shí)長(cháng)時(shí),APP(′Д` )會(huì )被kill,這??樣保障了前臺 APP 的流暢性,也延長(cháng)了手機的使用時(shí)長(cháng),獲得了較好的用戶(hù)體驗(′ω`),但是這也意味著(zhù),服務(wù)器無(wú)法主動(dòng)和用戶(hù)交互(如推送實(shí)時(shí)消息等),所以蘋(píng)果推出了 APNs,允許設備和服務(wù)器分別與蘋(píng)果的推送通知服務(wù)器保持長(cháng)連接狀態(tài)。

關(guān)??于A(yíng)PNs的更新有以下幾點(diǎn):

iOS 8以后,APNs推送的字節是2k,iOS8以前是256字節;iOS 9以后APNs支持HTTP/2協(xié)議棧,優(yōu)化長(cháng)連接,具有標準的HTTP返回和管道復用技術(shù);iOS 10以后,推送的字節(jie)是4k,APNs可根據推送消息(′▽?zhuān)?的唯一標示符查詢(xún)某條消息是否被用戶(hù)閱讀,可更新某一推送消ヽ(′▽?zhuān)?/息,而不用發(fā)重讀的多?條消息。

關(guān)于A(yíng)P??Ns更全(quan)面的介紹可以看官方文檔:點(diǎn)此進(jìn)入。

什么是paylo┐(′ー`)┌ad?對于每一條發(fā)送給APNs的推送消息,都(dou)包含一個(gè)payload,通常是組成了一個(gè)JSON的Dictionary,這其中必??不可少的是aps屬性,它對應的value也是一個(gè)Dictionary,包含一些但不限于以下內容:標題(ti)、副標題、內容(rong)、附件、category等,如

(3)名詞解釋之device token

什么是device token?我們看一下官方的簡(jiǎn)介:

device token: APNs uses device tokens to identify each uniqu(′?`)e app and device combination. It also uses them to authenticate the routing of remote notifications sen??t to a device.(dev(′?`)ic??e token是APNs用于區分識別每個(gè)iOS設備和設備上不同app的一個(gè)標識符,還(hai)可以用于A(yíng)PNs通過(guò)它將推送消息路由到指定設備上)

即:device token里包含了device id和bundle id的信息,但是device id和bundle id不會(huì )確定唯一的device token。

但是,這里有個(gè)坑,查資料得知,iOS8及之前的iOS系統,對于(yu)同一部手機,如果卸載后重裝APP的話(huà),device toke(′?_?`)n是不會(huì )變(′ω`)的,在token變了以后,老的token,就被認為是無(wú)效了,蘋(píng)果不會(huì )對這部分無(wú)效的token推送┐(′ー`)┌。但(dan)是,對iOS9及以后的iOS系統,對于同一部手機,卸載后重裝APP的device token是會(huì )發(fā)生變化的,而且老的token不會(huì )無(wú)效,還可以正常推送,這應該是蘋(píng)果的一個(gè)bug,但是蘋(píng)果也沒(méi)有修復這個(gè)問(wèn)題,所以這個(gè)需要開(kāi)發(fā)者自己來(lái)解決,否則容易出現一個(gè)(ge)app收到多個(gè)push的問(wèn)題。

官方的說(shuō)法是:

To protect user privacy, do not use device tokens to identify user devices. Device tokens change when the user updates the operating system and wh??en a device’s data and settings are erased. As a result, apps should always reques??t the current device token at launch time.(即此舉為了保護用戶(hù)隱私,devi??c(′-ι_-`)e token會(huì )在更新系統、擦除設置重置后變化,在一定時(shí)間(jian)后會(huì )過(guò)期)

【離線(xiàn)push詳細流程】

知道了以上概念后我們重新來(lái)看一下離線(xiàn)(遠程)push的詳細流程:

1) 首先(xian)是應用程序注冊消息推送;2) iOS跟A??PNS Server要deviceToken。應用程序接受deviceToken;3) 應用程序將deviceToken發(fā)送( ?▽?)給PUSH服務(wù)端程序;4) 服務(wù)端程序向APNS服務(wù)發(fā)送消息;5) APNS服務(wù)將消息??發(fā)送給iPhone應用程序。

值得注意的是,當由于用戶(hù)反復卸載重裝程序(雖然概率很?。┑仍驅е露鄠€(gè)device Token指向同一臺設備的同一個(gè)app,又把多個(gè)device Token發(fā)給APNs時(shí),用戶(hù)就會(huì )收到多條push??。蘋(píng)果APNs是不會(huì )對多個(gè)device Token是否指向同一臺設備的同一??個(gè)app做校驗??的,所以需要后臺來(lái)做去重等處理保證用戶(hù)不會(huì )收到多條push。

5.3對離線(xiàn)(遠程)push的響應

1)iOS 7以上對離線(xiàn)(遠程)push時(shí)的響應

iOS 7以上關(guān)于接受離線(xiàn)push有兩個(gè)函數:

那么這兩個(gè)函??數有什么區別呢?其實(shí)這兩個(gè)方法都是用來(lái)處??理離線(xiàn)push的。

差別就(jiu)是,如果app在前臺是收到離線(xiàn)(遠程)push,那么就會(huì )調用:

相對的,如果在后臺或者殺進(jìn)程情況下┐(′?`)┌,點(diǎn)擊收到的離線(xiàn)push,那么就會(huì )調用,如果沒(méi)有實(shí)現:

則會(huì )調用:

若實(shí)現了前者,就(⊙_⊙)只調用前者。

2)iOS 10以上對離線(xiàn)(遠程)push的響應

iOS10對push的處理主要增加了兩個(gè)方法:

其中前者是對A(????)PP在前臺時(shí)收到push時(shí)的處理,后者是點(diǎn)( ?° ?? ?°)擊push進(jìn)??入(ru)APP執行的??函數。

用得比較多的是后者,我們可以舉個(gè)例子,點(diǎn)擊push進(jìn)入APP后如何獲取push的消(xiao)息、角標、標題等內容:

6、iOS 10關(guān)于push的一些新特性

iOS10新增的UserNotifications框架,主要有了這樣幾方面的更新:

1)用UserNotific??ations框架替換了原先與通知相關(guān)的接口,通知文字可分為title、subtitle和body三部???分,通知可攜帶附件;2)系統在展示通知之前,可以喚起app附帶的service exten┐(′?`)┌sion,并且允許它改動(dòng)通知的內容;3)用戶(hù)在對通ヽ(′ー`)ノ知右滑查看、下拉或者3d touch的時(shí)候,通知會(huì )展開(kāi),展開(kāi)后頁(yè)面的布局可以由app附帶的content extension來(lái)決定。

6.1push的多樣性

iOS10以前的push只有文字,甚至沒(méi)有標題。iOS10以后的push更加多樣化,可以有主標題,(′▽?zhuān)?副標題,甚至還有附件。

這里以我司的騰訊新(xin)聞為例(有標題,內容,和附件):

3D touch點(diǎn)??入詳情以后:

這里我們驚奇的發(fā)現,除了可以攜帶圖片這ヾ(′ω`)?樣的附件、push還能展開(kāi)詳情以外,進(jìn)入詳情以后,(′;ω;`)下面還多了“打開(kāi)”、“收藏”、“不感興趣”這些選項,這里就涉及到以下iOS10的新特性。

6.2push攜帶附件

因為payload有大小限制,所以如果remote notificat???ion想要攜帶附件,那么payload上只能帶上如附件下載地址之類(lèi)的信息,等通知到達客戶(hù)端后由servヽ(′ー`)ノice extension下載附件到本地,然后在初始化UNNotificationAttachment對象時(shí)傳入附件在本地的URL。

初始化UNNotificationAttachment對象時(shí),可以傳入option參數。這里的option參(can)數可以強制指定附件的類(lèi)型,可以選擇是否展(???)示縮略圖,以及縮略圖截取自附件的哪??一幀、哪一部分。

目前iOS10通知只將幾種格式的圖片、音頻和視頻作為附件,附件的大小也有一定限制,具體可以看官方文檔中??的限制說(shuō)明。

關(guān)于附件的更加詳細的說(shuō)明,可以參考官方文檔:點(diǎn)此進(jìn)入。

6.3攜帶action的通知

上面提到的“打開(kāi)”、“收藏”、“不感興趣”這些選項其實(shí)就是push攜帶的action,其實(shí)從iOS8開(kāi)始,通知已經(jīng)可以攜帶action了。而在iOS10中,通知的action被放在了更明顯的位置,與action相關(guān)的接口也有了很大變化。

決定一個(gè)通知應該有哪些action呢?在payload中,這是由category字段決定的。如果我們希望一個(gè)通知能攜帶若干個(gè)action,我們就需要將若干個(gè)action和一個(gè)category綁定起來(lái)。通知到達前端后,系統會(huì )根據category的名字來(lái)決定要給這個(gè)通知展示哪些action:

怎么得知用戶(hù)選了哪個(gè)(′;ω;`)acti(/ω\)on并做出相應操作呢?這需要給U(⊙_⊙)NU??serNotificationCenter指定一個(gè)delegat??e:

然后在dヾ(′ω`)?elegate的類(lèi)中實(shí)現:

方法:(′?_?`)通過(guò)resヽ(′ー`)ノponse.notification.request.content.categoryIdentifier和(he)response.??actionIdentifier就可以得知用戶(hù)選擇的action了。

6.4改變push內容

這里主要講應用的比較多的離線(xiàn)(遠程)push的改變push方法。

1)改變本地push內容:

本地push,只要request的id一樣,那么就可以更新推送。

更新的例??子:

此外,還有刪除所有推送等,都在UNUserNotificationCenter.h中實(shí)現。

2)改變(bian)離線(xiàn)(遠程)push內容:

目前遠程p??ush只支持更新push內容,更新需要(?????)通過(guò)新的字段apps-collapse-id來(lái)作為唯一標ヽ(′ー`)ノ示。方法是在HTTP/2 請求頭中使用相同的apns-collapse-id,這樣收到(?⊿?)同樣的ap(╯‵□′)╯ns-collapse-id的push時(shí),push內容便會(huì )更新。

使用場(chǎng)景:比較容??易理解的一個(gè)場(chǎng)景就是球賽比分,比如現在是1:0,如果變成1:1的話(huà),只需要刷新原來(lái)的新聞,這樣用戶(hù)就不會(huì )因為同一場(chǎng)比賽收到多條push。

6.5兩個(gè)extension

有??兩個(gè)與push相關(guān)的extension,可能我們會(huì )好奇這兩個(gè)extension有什么不同,為什么(′?`)需要兩個(gè)?它們分別實(shí)現什么功能呢?

【1)notification service extensi??on】

給app添加notification service?? extension后,系統會(huì )在收到通知后喚醒它,并允許它修改通知的內容,之后再展示這個(gè)通知。

servi??ce extension只對remote notification起作用,local notヽ(′ー`)ノification是無(wú)法喚起它的。

如果想要讓系統喚起service extension的話(huà),payload必須符合這樣幾個(gè)條件:

1)必須增加mutable-content(???)字段并為1,這表示允許客戶(hù)端修改這個(gè)通知:payload(舉例)如下:2)這個(gè)通知必須展示一個(gè)alert,如果只是一個(gè)修改badge的通知的話(huà),是不會(huì )喚起service extension的;3)靜默(′?`*)推送是不能喚起service extension的,所以payload中不能有”content-available” : 1字段。??

所以,通過(guò)這個(gè)notification service extension,你可以在接收到(?Д?)推送之后、展示推送之前處理一些事情,比如說(shuō)更新一下推送內容,或者在后臺做一些其他事情。

【2)notification content extension】

另一項notification content extension用于完全自定義推送展開(kāi)后的視圖。上面騰訊新聞的展開(kāi)后的視圖就是通過(guò)這個(gè)notification(′▽?zhuān)? content extension實(shí)現的。

依然以騰訊新聞為例子:

這里Notification Content Extension大展拳腳的地方,在這里??可以自定義繪制不同的內容,將希望展現給用戶(hù)的額外信息可以加載這里。

下半部分的notification action的實(shí)現就是在上面提到的“攜帶action的通知”。

7、iOS Push的測試要(yao)點(diǎn)羅列

另外注意一點(diǎn):測試Push的時(shí)候,區( ?° ?? ?°)分好Appstore證書(shū)和開(kāi)發(fā)證書(shū)。兩者不能相互發(fā)Push。

8、有關(guān)iOS Push的常見(jiàn)疑問(wèn)匯總

Q:離線(xiàn)push,支持角標(???)(badge)在本地角標數值上+1這樣的操作嗎?

A:不支持。如果是自己實(shí)現push服務(wù)的話(huà),需要自己的后臺將角標值badg??e(′?`)發(fā)送個(gè)APNs服務(wù)器,有些APP使用第三方push SDK除外。

Q:如果重復收到離線(xiàn)push,可能是什么情況?

A:

1)iOS9之后卸載重裝后生成新的deviceToken,后臺對多個(gè)deviceToken都發(fā)送了push2)后臺對注銷(xiāo)了的賬號也發(fā)送了push。

總而言之一般是后臺的ヽ(′?`)ノ邏輯出現了問(wèn)題,而不是APNs服務(wù)器出現問(wèn)題。(?????)

Q:直接卸載APP,還能收到離線(xiàn)push嗎?

A:不會(huì )收到。直接卸載APP,雖然后臺不知道APP被卸載了,仍然會(huì )對之前的賬號發(fā)送push,但是由于手機上沒(méi)(′_`)有對應APP,所以并不會(huì )收到push。

Q:為什么有時(shí)候全(quan)新安裝APP就立馬有紅點(diǎn)角標?

A:這是(shi)因為卸載該APP時(shí)有紅點(diǎn)角標。每個(gè) APP 的角標都是存在 iOS 手機系統里(li)的,開(kāi)發(fā)無(wú)法修改,所以此時(shí)卸載前有角標,重新安裝也會(huì )有角標。但是,APP 卸載之后超過(guò)一天的時(shí)間再重裝,那么角標就會(huì )被系統清空,屆時(shí)也不會(huì )有新安裝的 APP 就有角標的情況存在。

Q:自己Server通過(guò)APNs發(fā)的每一條Push,客戶(hù)端都會(huì )收到么?

答案是否定的,Push是不可靠???的,push通知是fire-and-forget,┐(′д`)┌比如手機關(guān)機,那么自然就收不到ヽ(′?`)ノ,雖然Apple會(huì )嘗試幾次。

Q:Push消息的大小是多少?

iOS8發(fā)的時(shí)間點(diǎn)起,無(wú)論那個(gè)iOS系統,push消息的body大小調整為2k,注意這里是iOS8的時(shí)間點(diǎn),也就(′?ω?`)是2014年秋,就目前來(lái)說(shuō)push的限制應該??是2k不再是256了。

9、相關(guān)工具推薦

Knuff離線(xiàn)push工具下載鏈接:https://g??ithub.com/Knu??ffApp/Knuff/releases

使用方法也比較簡(jiǎn)單:

比如我的payload輸入如下:

得到的應該是有“Knuff測試”文字,和角標數變?yōu)?99,我們可以看下結果,與預料??是一致的:

有了這個(gè)工具也更加方便了我們的iOS push的(′?_?`)調試。


推薦閱讀

亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费

亚洲女同成aV人片在线观看|亚洲www啪成人一区二区麻豆|亚洲国产中日韩精品综合|亚洲国产成人精品一级片|亚洲无码在线视频免费 大石桥市| 伊吾县| 平远县| 云安县| 罗定市| 抚顺县| 六枝特区| 枣阳市| 新河县| 昌宁县| 颍上县| 乐东| 南平市| 都兰县| 洞口县| 专栏| 胶州市| 波密县| 苏尼特左旗| 卢龙县| 东阿县| 武功县| 黄大仙区| 新乐市| 科技| 鄂托克前旗| 彭泽县| 资兴市| 南乐县| 泌阳县| 罗源县| 永州市| 潜山县| 保德县| 成安县| 都匀市| 东方市| 汨罗市| 集安市| 吉隆县| 衡阳县| http://444 http://444 http://444 http://444 http://444 http://444