ios 10通知新特性(UserNotifications)

一:簡(jiǎn)單描述

iOS 10 新增了一個(gè)框架 UserNotifications.framework 辅柴,即“用戶通知框架”只锻,該框架允許開發(fā)者對(duì)通知進(jìn)行自定義,推送 "Push" 只是「通知」觸發(fā)的一種方式粹胯,而「通知」是操作系統(tǒng)層面的一種UI展示棠笑。蘋果官方文檔中 Notification 分為兩類: - Remote (遠(yuǎn)程销部,即 Push 方式) - Local (本地缴饭,通知由本地事件觸發(fā)),本文所述建立在遠(yuǎn)程推送基礎(chǔ)上介紹自定義通知(Object-C版).

二:用 UserNotifications Framework 實(shí)現(xiàn)通知(遠(yuǎn)程推送)


1. 在 Xcode 中啟用推送通知

要使用 UserNotifications Framework 需在 Xcode 項(xiàng)目中開啟推送通知: Project Target --> Capabilities --> Push Notifications

2.導(dǎo)入框架#import<UserNotifications/UserNotifications.h>


3.注冊(cè)推送

同樣的在didFinishLaunchingWithOptions方法中注冊(cè),ios 10及之下系統(tǒng)可以有不同的注冊(cè)方式殿如,相同的效果就是用戶第一次打開app會(huì)彈出通知授權(quán)框,若采用ios10注冊(cè)方式贡珊,則應(yīng)遵守<UNUserNotificationCenterDelegate>代理協(xié)議

ios 10
ios8

到這一步最爬,第一次運(yùn)行app會(huì)彈出通知授權(quán)框

不過即使現(xiàn)在給用戶推送消息,用戶依舊不會(huì)接收到推送门岔,原因是沒有向apple注冊(cè)deviceToken,應(yīng)該在appDelegate中注冊(cè)deviceToken

關(guān)于是否注冊(cè)deviceToken成功可在代理方法中判斷:

到這一步爱致,依舊不能接收到推送消息,因?yàn)闆]有配置推送證書,可參考環(huán)信提供資料推送證書配置

4.推送消息

證書配置完成后可以進(jìn)行推送操作了,想要模擬apple給用戶推送消息寒随,有一個(gè)很實(shí)用的工具pusher,下載pusher,該工具可以運(yùn)行在mac或者iphone上就可以給設(shè)備推送消息糠悯,是不是很方便

這里針對(duì)pusher界面做點(diǎn)說(shuō)明,com.boru.nibook為推送證書所歸屬的蘋果開發(fā)者證書在該項(xiàng)目所配置的appID,即項(xiàng)目的bundle id,一長(zhǎng)串的64位字符串為推送目標(biāo)設(shè)備的deviceToken,最下面的內(nèi)容為推送內(nèi)容,關(guān)于推送內(nèi)容具體字段可參考apple官方文檔推送內(nèi)容字段

我們先在pusher輸入內(nèi)容:

然后點(diǎn)擊push,會(huì)在設(shè)備上彈出

5.ServiceExtension

假如想遠(yuǎn)程推送圖片給用戶妻往,可以使用ios10推出的ServiceExtension,它可以在消息到達(dá)用戶設(shè)備還未展示彈出框前對(duì)推送消息進(jìn)行修改互艾,然后在顯示出來(lái),不過使用它需要一定的條件? 1:遠(yuǎn)程通知展示alert給用戶? 2:遠(yuǎn)程通知aps json字段中必須包含mutable-content鍵,并且值為1,下面介紹如何創(chuàng)建ServiceExtension

創(chuàng)建完成后會(huì)發(fā)現(xiàn)項(xiàng)目里多了個(gè)文件夾,這是我取的名字

在ServiceExtension里的主要函數(shù)方法(可在推送消息到達(dá)用戶設(shè)備沒有顯示出來(lái)前對(duì)消息進(jìn)行修改讯泣,修改后再顯示):

開發(fā)者可在該方法中給推送消息加上圖片纫普,視頻等附件,不得不提一個(gè)UNNotificationAttachment好渠,UNNotificationAttachment支持圖片昨稼,音頻,視頻拳锚,系統(tǒng)會(huì)自動(dòng)提供一套可自定義化的UI假栓,專門針對(duì)這3種內(nèi)容.本文只做給推送消息加上圖片,設(shè)置推送字段:{"aps":

? ? ? ? ? ? ? ? ? ? ?{"alert":

? ? ? ? ? ? ? ? ? ? ? ? ? {"title":"hello",

? ? ? ? ? ? ? ? ? ? ? ? ? "subtitle":"子標(biāo)題",

? ? ? ? ? ? ? ? ? ? ? ? ?"body":"it is a beautiful day"},

? ? ? ? ? ? ? ? ? ? ? ? ?"badge":1,

? ? ? ? ? ? ? ? ? ? ? ? "sound":"default",

? ? ? ? ? ? ? ? ? ? ? ?"mutable-content":1,

? ? ? ? ? ? ? ? ? ? ? ?"image":"https://picjumbo.imgix.net/HNCK8461.jpg?q=40&w=200&sharp=30",

? ? ? ? ? ? ? ? ? ? ? ? "category":"helloIdentifier"

? ? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? }

可在didReceiveNotificationRequest方法中獲取到aps中的"image"字段(aps中不一定非要image字段霍掺,命名自己取匾荆,只要能取出圖片url字段即可),在該方法中拿到圖片下載完成后重新顯示推送消息杆烁,效果如下:

6.NotificationContentExtention

要想創(chuàng)建一個(gè)自定義的用戶界面牙丽,需要用到Notification content extension,接下來(lái)我們就來(lái)說(shuō)說(shuō)如何自定義界面:

一個(gè)推送分四段,

開發(fā)者可以在custom content區(qū)域進(jìn)行自定義界面,下面介紹如何創(chuàng)建Notification content extension,和創(chuàng)建serviceExtension類似

創(chuàng)建完成后,在項(xiàng)目中又多了一個(gè)文件夾

在MainInterface.storyboard中對(duì)通知自定義區(qū)域進(jìn)行界面描述,info.plist文件三個(gè)重要的參數(shù)连躏,第一個(gè)就是不使用系統(tǒng)默認(rèn)的界面剩岳,可以省略贞滨,默認(rèn)為NO入热。第二個(gè)參數(shù)指明響應(yīng)的category,這就是簽名創(chuàng)建cateogry時(shí)的那個(gè)categoryIdentifier了晓铆, 可以指定很多個(gè)(如果該參數(shù)沒有設(shè)置對(duì)勺良,則不會(huì)顯示自定義區(qū)域的界面,創(chuàng)建cateogry文章末尾講訴),第三個(gè)參數(shù)content size ratio,這個(gè)屬性定義了寬和高的比例骄噪。這個(gè)比例不能很好的適配通知所要展示的內(nèi)容尚困,因?yàn)閮?nèi)容可多可少,開發(fā)者最好的做法是在通知顯示前計(jì)算好需要展示內(nèi)容的尺寸链蕊,這樣界面就會(huì)更美觀事甜。

針對(duì)每個(gè)參數(shù)進(jìn)行不同的設(shè)置區(qū)分效果,

UNNotificationExtensionDefaultContentHidden=NO(不隱藏默認(rèn)內(nèi)容)
UNNotificationExtensionDefaultContentHidden=YES(隱藏默認(rèn)內(nèi)容)

在自定義的NotificationContentExtention中谬泌,控制器會(huì)走didReceiveNotification方法來(lái)跟新自定義界面UI,有趣的是在該方法中設(shè)置imageView,即使給imageView設(shè)置圖片也無(wú)法正常顯示出來(lái),不過可以用以下方法來(lái)給imageView設(shè)置圖片逻谦,

到這里自定義通知界面就完成了

7.UNUserNotificationCenterDelegate

講完了自定義通知界面掌实,接下來(lái)介紹如何處理用戶行為,兩個(gè)代理方法:

第一個(gè)方法為app處在前臺(tái)時(shí)收到推送消息調(diào)用邦马,第二個(gè)方法嚴(yán)格來(lái)說(shuō)只要用戶點(diǎn)擊消息推送彈出框就會(huì)調(diào)用贱鼻。有趣的是另外兩個(gè)方法也有相似的功能

雖然都有相似功能,不過還是有差別滋将,如果以上四個(gè)方法全部打開會(huì)出現(xiàn)什么情況呢邻悬,上面兩個(gè)方法會(huì)“覆蓋”下面兩個(gè)方法,即走上面的方法随闽。不過我建議使用上面的兩個(gè)方法,因?yàn)樵赿idReceiveNotificationResponse中可以拿到對(duì)應(yīng)的actionWithIdentifier來(lái)做對(duì)應(yīng)的操作父丰,下面我們先來(lái)注冊(cè)一個(gè)UNNotificationCategory(在didFinishLaunchingWithOptions中進(jìn)行),一個(gè)UNNotificationCategory可以包含若干個(gè)UNNotificationAction掘宪,其中UNNotificationAction可分為UNNotificationActionOptionAuthenticationRequired,UNNotificationActionOptionDestructive,UNNotificationActionOptionForeground幾種類型.

值得注意的是如果注冊(cè)category的categoryIdentifier如果和上面介紹的Notification content extension中plist中的UNNotificationExtensionCategory字段不相同础米,則一定不會(huì)顯示辛辛苦苦設(shè)置的通知界面自定義區(qū)域.設(shè)置后看下效果:

點(diǎn)擊第一項(xiàng)"輸入你的信息"會(huì)彈出文本編輯

點(diǎn)擊第二項(xiàng)"忽略",系統(tǒng)則會(huì)將該條通知從界面上清除掉.點(diǎn)擊第三項(xiàng)則會(huì)進(jìn)入前臺(tái)


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末添诉,一起剝皮案震驚了整個(gè)濱河市屁桑,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌栏赴,老刑警劉巖蘑斧,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異须眷,居然都是意外死亡竖瘾,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門花颗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捕传,“玉大人,你說(shuō)我怎么就攤上這事扩劝∮孤郏” “怎么了?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵棒呛,是天一觀的道長(zhǎng)聂示。 經(jīng)常有香客問我,道長(zhǎng)簇秒,這世上最難降的妖魔是什么萝嘁? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任肺缕,我火速辦了婚禮努潘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锋边。我一直安慰自己,他們只是感情好编曼,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布宠默。 她就那樣靜靜地躺著,像睡著了一般灵巧。 火紅的嫁衣襯著肌膚如雪搀矫。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天刻肄,我揣著相機(jī)與錄音瓤球,去河邊找鬼。 笑死敏弃,一個(gè)胖子當(dāng)著我的面吹牛卦羡,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播麦到,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼绿饵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了瓶颠?” 一聲冷哼從身側(cè)響起拟赊,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎粹淋,沒想到半個(gè)月后吸祟,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡桃移,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年屋匕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片借杰。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡过吻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔗衡,到底是詐尸還是另有隱情纤虽,我是刑警寧澤,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布粘都,位于F島的核電站廓推,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏翩隧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望堆生。 院中可真熱鬧专缠,春花似錦、人聲如沸淑仆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔗怠。三九已至墩弯,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寞射,已是汗流浹背渔工。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留桥温,地道東北人引矩。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像侵浸,于是被迫代替她去往敵國(guó)和親旺韭。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

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

  • 點(diǎn)擊查看原文 Web SDK 開發(fā)手冊(cè) SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個(gè)完善的 IM 系統(tǒng)...
    layjoy閱讀 13,791評(píng)論 0 15
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,348評(píng)論 25 707
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2掏觉,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐区端,SD...
    Isspace閱讀 6,725評(píng)論 10 16
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)澳腹,斷路器珊燎,智...
    卡卡羅2017閱讀 134,720評(píng)論 18 139
  • to兒子:昨天吃晚飯前,我想和你先做一個(gè)計(jì)劃遵湖,于是問“哥哥悔政,一會(huì)我們吃完飯你想干什么呀?”“去球場(chǎng)玩”“哦延旧,可以谋国,...
    百花爭(zhēng)妍CQ閱讀 163評(píng)論 0 0