關于iOS推送

關于推送,要說好像也沒太多東西,但要細說,又是有很多可以說。如何配置,今天就不說了,各個平臺不一樣,每個平臺都會有自己的配置文檔,像友盟的,看它的官方文檔就行。今天主要說一下接收跟一些業(yè)務邏輯。留個記錄,方便自己以后查閱。蘋果官方文檔通知部分

1.數(shù)據(jù)格式

可能有很多人都沒注意到這一點,蘋果推送通知的格式是固定的,甚至還規(guī)定了特定字段的數(shù)據(jù)格式,如下是一般APP接收到的推送的數(shù)據(jù)格式,其中alert字段下的數(shù)據(jù),是直接顯示在設備通知欄的,iOS開發(fā)者并不能像安卓那樣,先讀取到數(shù)據(jù),再處理選擇性展示,所以title,body等字段的數(shù)據(jù)格式,都是規(guī)定死。開發(fā)者如果需要更多的數(shù)據(jù),一般都是放payload字段下,或者自定義的key,如gameID等。如有敏感數(shù)據(jù),最好加密傳輸。

{
   “aps” : {
      “alert” : {//APP直接展示的內(nèi)容
         “title” : “Game Request”,
         “subtitle” : “Five Card Draw”
         “body” : “Bob wants to play poker”,
         “title-loc-key” : “國際化多語言用到的字段”,
         “title-loc-args” : “國際化,用以替換本地string文件的內(nèi)容”,
         “mutable-content” : “判斷是否富文本推送的標志”,
      },
      “category” : “GAME_INVITATION”//標志通知樣式
   },
   “gameID” : “12345678”
   “payload” :“服務器給APP的數(shù)據(jù)”
}

具體各個字段的數(shù)據(jù)格式,可以看官方文檔,這里貼出一部分

alert數(shù)據(jù)格式

以上便是一般推送通知所需注意的,本來想寫的挺多的,后來看了一天官方文檔,不知道要寫些什么了,先放一個前人的連接,總結(jié)的較為詳細關于推送的文章。

2.富文本推送通知

這個,上面那篇文章也有說到,我這里記一下自己的總結(jié)。富文本,就是大家平時看到的在通知欄顯示圖片,播放視頻,甚至可以玩小游戲 widget game。富文本推送通知,主要是用到兩個擴展類,NotificationContentExtension, NotificationServiceExtension。

創(chuàng)建擴展類

關于這兩個擴展類,網(wǎng)上也有很多資料,這里就不再贅述,可自行搜索一下,我主要記一下我覺得比較關鍵的點。

富文本,主要用的在推送消息里的兩個key,category ,mutable-content,
  • category,用來標志通知類型,你可以添加多個擴展類以展示不同類型的通知,從而配置不同UI,代碼中,就是用category去區(qū)分選擇用哪一個擴展類去展示;
  • mutable-content,只有當mutable-content為1時,NotificationServiceExtension才能成功攔截消息;

補一句,多看官方文檔。

3.點擊推送消息后的頁面跳轉(zhuǎn)

這里要分3種情況

  • APP在前臺或APP在后臺但已啟動
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;

此時消息處理,頁面跳轉(zhuǎn)等邏輯就可以在這里處理

  • APP在后臺且未啟動
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;

此時通知的內(nèi)容為,UIApplicationLaunchOptionsRemoteNotificationKey

NSDictionary *pushNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

注意當用戶之間點擊APP圖標進入APP時,pushNotification為nil,也就獲取不到推送消息的內(nèi)容了,只有用戶點擊推送消息進入APP,才能獲取推送內(nèi)容。且,此時程序還是會跑"didReceiveRemoteNotification"方法的。按道理這時候??(他人的結(jié)論)

這個時候會走didReceiveRemoteNotification這些的方法(有很多人認為不會走,經(jīng)過測試這個是會走的),但是這這里面寫跳轉(zhuǎn)什么的 ,就有點比較難處理了,因為didFinishLaunchingWithOptions這個方法沒有走,先走的didReceiveRemoteNotification再走的 didFinishLaunchingWithOptions 。這時候很多app的基本設置,比如做的跟視圖,自動登陸,等等很多的注冊什么的都還沒執(zhí)行,就直接跳轉(zhuǎn)這個是很麻煩的處理起來,所以一般是在“ didFinishLaunchingWithOptions”方法下去處理頁面跳轉(zhuǎn)邏輯

但是我也試過不在“ didFinishLaunchingWithOptions”做任何處理,直接都是在“didFinishLaunchingWithOptions”處理,APP也是能完美運行。如果有遇到不能直接在“didFinishLaunchingWithOptions”處理的,可以留個評論,有知道的大神也麻煩告知一下,謝謝了。
以上,簡單的總結(jié)。不全面,有錯誤煩請指正。

參考文章

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的,不可...
    iOS開發(fā)攻城獅閱讀 4,415評論 1 13
  • 遠程推送不錯的文章,寫的很詳細 本地推送文章 蘋果推送的原理 app 向APNS發(fā)請求獲取 device-toke...
    Rui哥閱讀 700評論 0 3
  • 坑先寫在前面: 鑒于網(wǎng)上對于iOS推送支持的教程已經(jīng)很多了。這里就不再啰嗦,先把一些項目中遇到過的坑寫在下面供參考...
    我是江小白閱讀 1,807評論 0 1
  • 推送通知注意:這里說的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的,不可見的...
    醉葉惜秋閱讀 1,611評論 0 3
  • 1.先打開鑰匙串(應用程序-實用工具-鑰匙串訪問-證書助理-從證書頒發(fā)機構(gòu)請求證書),CA電子郵件地址填寫開發(fā)者賬...
    一夢十年ya閱讀 4,326評論 0 3

友情鏈接更多精彩內(nèi)容