推送四種方式

文章引用自博客 :http://blog.jiguang.cn/4-push-ios/

極光推送是為 App 提供第三方推送服務的平臺之一,它提供四種消息形式:通知,自定義消息喊崖,富媒體和本地通知鸡捐。

筆者將基于官方說明與個人理解來談一下這四種消息牙肝。本篇為 iOS 篇焰情,Android 篇入口

1.通知

Push Notification嗓蘑,即指在手機的通知欄(狀態(tài)欄)上會顯示的一條通知信息须肆。

iOS :JPush 代理 Apple 官方的 APNs 通知。

特別說明

使用 JPush 中的通知桩皿,相當于使用蘋果官方的通知推送豌汇。

iOS 10 新增了 delegate 協(xié)議方法,極光新版 SDK 封裝了這兩個方法來適配泄隔,有開發(fā)者想同時使用 JPush 的通知和蘋果的通知來實現(xiàn)他們不同的需求拒贱,然后會發(fā)現(xiàn),在 iOS 10 客戶端只會走其中的一個方法梅尤,互相有沖突柜思。

這里需要說明的是:

極光就是封裝的蘋果的 APNs ,如果我們自己再封裝 APNs 巷燥,兩個地方封裝的是相同東西的時候赡盘,肯定只有一個地方有效了。

如果你想同時使用 Apple 官方的推送和極光的推送缰揪,在客戶端只需要用極光代理的方法即可陨享,來自 Apple 官方的推送,極光的代理方法也是可以正常處理的钝腺。

APNs 通知的流程是這樣的

我們可以調(diào)用極光的 API 發(fā)起推送請求抛姑,也可以通過極光官網(wǎng)控制臺推送。

請求在參數(shù)要求上基本正確——請求成功艳狐,返回 msgid (這條消息的 ID 標識)定硝,返回 200(成功)或由極光判斷的推送失敗(一般是?1011 找不到目標的錯誤)毫目;參數(shù)錯誤蔬啡,有返回錯誤碼诲侮。

極光處理該條請求,將這條請求發(fā)給蘋果 APNs 服務器箱蟆,一般都是秒內(nèi)處理(非 VIP 通道偶爾可能會發(fā)生堵塞)沟绪。

APNs 服務器將這條消息推送到 iOS 設(shè)備上,這期間空猜,可能會產(chǎn)生延遲绽慈;可能會因為證書問題、已卸載辈毯、token 失效坝疼、推送環(huán)境與設(shè)備環(huán)境不一致等情況由 Apple 判斷為錯誤;沒有問題時則會被設(shè)備收到漓摩,由 iOS 系統(tǒng)控制進行展示裙士。

注:我們測試時若收不到消息入客,極光社區(qū)有總結(jié)一個完整的排查步驟管毙,基本可以解決問題;如果自己排查不出桌硫,可以直接找官方幫忙查詢夭咬,這里設(shè)備的 registrationID?和消息的 msgid 就是必須提供的信息。

APNs 通知的幾個特點

通知欄的展示完全由 iOS 系統(tǒng)控制铆隘,左側(cè)圖片是自動獲取的 App 圖標卓舵,是不可動態(tài)改變的。

iOS 10 以下系統(tǒng):

APNs 通知是?只能在 App 處于后臺或殺死時才能展示的膀钠。

iOS 10 系統(tǒng):

可以實現(xiàn)在前臺展示 APNs 通知掏湾,實現(xiàn)willPresentNotification方法,前臺收到 APNs 通知后就會走這個方法肿嘲。

在前臺點擊通知消息后也走didReceiveNotificationResponse方法(即后臺收到通知后融击,點擊通知的回調(diào)方法)。

獲取通知內(nèi)容

推送一般的 APNs 通知雳窟,客戶端在?點擊了通知欄消息之后才會調(diào)用對應的方法去獲取到消息的內(nèi)容尊浪,?點擊圖標進入 App 是無法獲取到消息的

如果需要在不點擊通知欄的情況下封救,可以獲取到消息內(nèi)容拇涤,可以推送?Background Remote Notification,這類消息的規(guī)則是:

客戶端需要處于Background 或 Suspended 狀態(tài)誉结,被殺死后無法調(diào)起該方法鹅士。

該類消息被收到后,Background 方法就會被調(diào)用惩坑,獲得信息內(nèi)容掉盅。

點擊了展示該消息的通知欄嘱朽,會再次調(diào)用 Background 方法。

點擊了圖標 這個操作并不會 再次調(diào)用 Background 方法怔接。

手機斷網(wǎng)后搪泳,根據(jù) Apple 的邏輯,是?只保存 1 條離線消息

此處判斷手機斷網(wǎng)扼脐,是指手機無法與 Apple 服務器進行連接岸军。

可能情況有:網(wǎng)絡(luò)斷開、網(wǎng)絡(luò)環(huán)境有限制(內(nèi)網(wǎng))瓦侮、某網(wǎng)絡(luò)運營商連接不通暢艰赞。

測試時可嘗試切換網(wǎng)絡(luò)。

與證書和環(huán)境有關(guān):

推送的環(huán)境?必須與 App 的打包環(huán)境?一致肚吏。

蘋果官網(wǎng)的證書方妖、極光官網(wǎng)上傳的證書、 App 打包的證書?必須完全一致罚攀。

JPush 無法控制 APNs 通知的展示與否党觅,不過如果你想實現(xiàn)關(guān)閉 APNs 通知,有如下方法:

一般是給一個文字說明:請在手機[設(shè)置]-[通知]-[XX App]選擇打開或關(guān)閉通知斋泄;

也可以調(diào)用反注冊代碼[[UIApplication sharedApplication] unregisterForRemoteNotifications]杯瞻;進行關(guān)閉。

但有一個影響是:iOS9 設(shè)備使用代碼反注冊 APNs 炫掐,再調(diào)用代碼注冊 APNs 魁莉,需要殺死應用后,再重新開啟應用才會有 APNs 提示(這里可能與系統(tǒng)本身 bug 有關(guān))募胃。

也可以用極光的置空別名/標簽的方法去達到關(guān)閉通知的效果旗唁,相應的,置空期間的消息將不會收到痹束。具體參見?Android 篇

推送時检疫,如果通知內(nèi)容( alert )為空,那么收到推送時是默認不展示橫幅的参袱。

iOS 10 的 alert 里面包括了 body 电谣、title 、subtitle抹蚀,后兩者是可選的剿牺, body 為空則不展示。兩種方式:

"alert" : "hello, JPush!",或者

"alert" : {

"title" : "JPush Title",

"subtitle" : "JPush Subtitle" ,

"body" : "JPush Body"

},

這里要注意的是?iOS 10 前臺展示的代碼方法?里面也有三種展示(alert环壤、badge晒来、sound)的選擇,如果沒有寫 alert 郑现,那么也是不會有橫幅提醒的湃崩。

completionHandler(UNNotificationPresentationOptionBadge|UNNotificationPresentationOptionSound|UNNotificationPresentationOptionAlert);

2.自定義消息

由 JPush iOS SDK 提供的應用內(nèi)消息功能荧降,此消息不經(jīng)過 APNs 服務器,完全由 JPush 提供功能支持攒读。

幾個特點

只接收朵诫,不展示,需要我們自己做接收處理薄扁,并且自己代碼實現(xiàn) 消息的展示剪返,或者轉(zhuǎn)為本地通知來展示。

怎么讓 App 收到自定義消息后邓梅,也顯示橫幅彈框脱盲,并顯示在蘋果手機的通知列表里呢?

自己寫的通知欄只能在 App 內(nèi)部進行展示日缨,只有 APNs 通知才可以展示在通知列表中钱反。

間接實現(xiàn)的方法:

同時發(fā)內(nèi)容一樣的自定義消息和 APNs 通知消息(APNs 用來展示,自定義消息用來取數(shù)據(jù))

自定義消息中攜帶定義好的 extras 匣距,客戶端收到后根據(jù)事先設(shè)定的規(guī)則去設(shè)置一個本地通知面哥,用本地通知來展示這條消息

需要依靠 App 與極光服務器建立的長連接,所以?iOS 必須當 App 處于前臺時才能接收到墨礁。

iOS 需要在 delegate 類中注冊通知并實現(xiàn)回調(diào)方法?networkDidReceiveMessage幢竹,詳細看官方文檔說明耳峦。

對 iOS 推送自定義消息無需考慮環(huán)境和證書問題恩静。

如果我只需要用極光的自定義消息,還需要配置證書嗎蹲坷?畢竟制作證書需要付費參加 Apple 的開發(fā)者計劃驶乾。

首先了解極光這邊的 2 個要求:

1.極光要集成成功,要獲得 registrationID 循签,需要 device token 级乐。

2.極光控制臺,必須要上傳證書县匠,推送時 iOS 才可以被點擊风科。

兩個辦法:

1.iOS 端,我們可以自己隨便的拼接一個合乎規(guī)范的 token 并給 JPush 乞旦,以注冊成功,獲得registrationID故痊。要推送消息,則采取調(diào)用 API 推送的方式進行符喝。

2.找朋友用付費賬號生成一個生產(chǎn)環(huán)境證書课蔬,按照配置要求集成成功二跋,在控制臺上傳好證書吞获。那么在極光控制臺或自行調(diào)用 API 都可以推送。

iOS 在手機端關(guān)閉通知和調(diào)用反注冊代碼對自定義消息的接收有影響嗎?

有必要勾選 background modes >remote Notification的選項,通知設(shè)置會增加 后臺應用刷新按鈕,這是 iOS 不點擊通知欄依舊可以獲取消息的必要選項唉锌,也是建立長連接的基礎(chǔ)议双。

沒有影響伍纫。

自定義消息是應用內(nèi)消息,跟apns無關(guān)

只要 Jpush 這邊注冊 ok了,獲取到了registrationID,長鏈接建立起來,就可以收到。

什么時候使用它篙挽?

推送保證不會丟失的消息邑闲。

APNs 一般只做為通知提醒,譬如 IM儡陨,退到后臺褪子,收到消息提醒,點擊進去后還是走應用內(nèi)消息收取骗村,確保不丟嫌褪。(在極光這邊也有提供?JMessage 即時通訊

JPush 的應用內(nèi)消息,會免費保留 5 條離線消息

iOS 需要在前臺展示消息時(iOS 10 新增接口之前)胚股。

在 App 項目內(nèi)的消息提醒笼痛。

有條件的消息提醒(譬如只讓處在某一頁面的用戶看到該條消息)。

3.富媒體

可以推送 Web頁面、圖片缨伊、聲音等除普通文本之外更豐富的內(nèi)容摘刑。

僅支持 Android ,需要JPush Android SDK 1.8.0 及以上刻坊。

4.本地通知

適用于在特定時間發(fā)出的通知枷恕,如一些 Todo 和鬧鐘類的應用,在每周谭胚、每月固定時間提醒用戶回到應用查看任務徐块。

不依賴于網(wǎng)絡(luò),無網(wǎng)也可以觸發(fā)灾而。

定時時間是自發(fā)送時算起胡控,不受中間關(guān)機等操作的影響。

iOS?中也和 遠程 APNs 通知一樣旁趟,在不同的狀態(tài)铜犬,不同的系統(tǒng)下,對應有幾種獲取消息的方法轻庆,App 被殺死也是可觸發(fā)的癣猾。

本地通知里面的 body 不寫也是沒有橫幅展示的,官方示例里面的這一句?content.body = @"This is a test code";

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末余爆,一起剝皮案震驚了整個濱河市纷宇,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌蛾方,老刑警劉巖像捶,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異桩砰,居然都是意外死亡拓春,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門亚隅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來硼莽,“玉大人,你說我怎么就攤上這事煮纵《遥” “怎么了?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵行疏,是天一觀的道長匆光。 經(jīng)常有香客問我,道長酿联,這世上最難降的妖魔是什么终息? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任夺巩,我火速辦了婚禮,結(jié)果婚禮上周崭,老公的妹妹穿的比我還像新娘柳譬。我一直安慰自己,他們只是感情好休傍,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布征绎。 她就那樣靜靜地躺著,像睡著了一般磨取。 火紅的嫁衣襯著肌膚如雪人柿。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天忙厌,我揣著相機與錄音凫岖,去河邊找鬼。 笑死逢净,一個胖子當著我的面吹牛哥放,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播爹土,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼甥雕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了胀茵?” 一聲冷哼從身側(cè)響起社露,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎琼娘,沒想到半個月后峭弟,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡脱拼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年瞒瘸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片熄浓。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡情臭,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出玉组,到底是詐尸還是另有隱情谎柄,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布惯雳,位于F島的核電站,受9級特大地震影響鸿摇,放射性物質(zhì)發(fā)生泄漏石景。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望潮孽。 院中可真熱鬧揪荣,春花似錦、人聲如沸往史。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽椎例。三九已至挨决,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間订歪,已是汗流浹背脖祈。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留刷晋,地道東北人盖高。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像眼虱,于是被迫代替她去往敵國和親喻奥。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容