天天看點

ios入門之消息推送詳解前言UserNotitfication

在去年的蘋果大會上,蘋果帶來的ios 10 系統中将之前繁雜的推送通知統一成usernotifications.framework 來集中管理和使用通知功能,還增加一些實用的功能——撤回單條通知、更新已展示通知、中途修改通知内容、在通知中顯示多媒體資源、自定義ui等功能。

那麼在ios10之前,ios的消息推送是怎麼分類的呢?

在ios之前,ios推送分為local notifications(本地推送) 和 remote notifications(遠端推送)。

不需要伺服器支援(無需聯網)就能發出的推送通知,app本地建立通知,加入到系統的schedule裡,如果觸發器條件達成時會推送相應的消息内容,如常見的定時任務鬧鐘等。

ios入門之消息推送詳解前言UserNotitfication

使用上也是非常簡單。

ios入門之消息推送詳解前言UserNotitfication

當使用者點選本地推送通知的時候,會自動打開app,這裡有2種情況:app在背景運作,或者被系統程序殺死,對于這兩種情況,我們怎麼處理呢?

ios入門之消息推送詳解前言UserNotitfication

這時候我們隻需要調用下appdelegate方法即可。代碼實作

ios入門之消息推送詳解前言UserNotitfication

對于app被殺死的情況,要先啟動app,啟動完畢會調用appdelegate方法。

需要特别注意的是:在ios8.0以後本地通知有了一些變化,如果要使用本地通知,需要得到使用者的許可。

部分代碼實作:

遠端推送指從遠端伺服器推送給用戶端的通知(需要聯網),遠端推送服務一般采用蘋果的apns (apple push notification service)。

ios入門之消息推送詳解前言UserNotitfication

要實作遠端推送,一般會涉及到三個階段:

apns pusher應用程式把要發送的消息、目的iphone的辨別打包,發給apns。

apns在自身的已注冊push服務的iphone清單中,查找有相應辨別的iphone,并把消息發到iphone。

iphone把發來的消息傳遞給相應的應用程式, 并且按照設定彈出push通知。

條件:建立一個對應你bundle的push 證書,打開push notifications 開關(xcode7不打開也可以正常使用,xcode8以後必須打開)。

ios入門之消息推送詳解前言UserNotitfication
ios入門之消息推送詳解前言UserNotitfication

代碼實作:

注冊接受apns通知。

調用appdelegate方法,擷取到使用者的devicetoken。

推送通知,和本地通知一樣有兩種狀況。

蘋果建議使用方法

ios10 中統一了本地推送和遠端推送的 api,在 usernotifications.framework 來統一處理與推送相關任務,并增加了圖檔、音頻、視訊,自定義通知 ui 等新特性。

ios入門之消息推送詳解前言UserNotitfication

在此次版本中,ios10 不僅新增消息的3dtouch等,還對圖檔、音頻、視訊等多媒體做了改進和優化。

類型

限制大小

圖檔

10m

音頻

5m

視訊

50m

多媒體推送代碼:

通常在做多媒體自定義推送的時候,一般會用到unnotificationserviceextension應用擴充,通過在 payload 中增加 mutable-content 字段來觸發擴充。

當推送達到 app 時,會啟動擴充并回調 didreceive 方法。在該方法裡面可以對推送的 unmutablenotificationcontent 做出相應的修改。在 didreceive 回調方法中的 request 包含了推送的具體資訊,可以通過其 userinfo 屬性來解析出多媒體的 url。

值得注意的是這裡 bundle 指的是擴充的沙盒,不是 app 的沙盒,是以資源的路徑要正确。

而讀取遠端資源比讀取本地資源一般要多一步儲存操作。

得到本地的 url 之後操作就一樣了,都是通過 url 來生成一個 unnotificationattachment 對象。一切都操作完之後将這個 unmutablenotificationcontent 對象返還 contenthandler(bestattemptcontent)。

除了上述功能外,蘋果還新增了自定義界面,這個絕對是大招。

ios入門之消息推送詳解前言UserNotitfication

其中上面的黃色區域可以了解成一個 viewcontroller 操作,下面綠色部分就是 title 之類的顯示内容。這部分是可以隐藏的。在擴充的目錄下的 info.plist 編輯一些界面相關的東西。

ios入門之消息推送詳解前言UserNotitfication

說明:

unnotificationextensioncategory 觸發 extension 的 category

這裡需要在注冊才能有效的觸發 字元串類型

unnotificationextensioninitialcontentsizeratio 上圖黃色區域的長寬比,float 類型

unnotificationextensiondefaultcontenthidden 預設内容是否隐藏,bool 類型

繼續閱讀