iOS 8以前Local Notification的坑

這兩天借著排查“添加的Local Notification到點(diǎn)沒有提醒”的機(jī)會(huì)衡怀,對Local Notification, Remote Notification以及相關(guān)API做了一個(gè)梳理,發(fā)現(xiàn)“別有洞天”。

在iOS 8以前裁眯,蘋果只提供了一個(gè)API來獲取關(guān)于通知相關(guān)的東東,[[UIApplication sharedApplication] enabledRemoteNotificationTypes]冰悠,

The values in the returned bit mask indicate the types of notifications currently enabled for the app. These types are first set when the app calls the registerForRemoteNotificationTypes: method to register itself with Apple Push Notification service. Thereafter, the user may modify these accepted notification types in the Notifications preference of the Settings app. This method returns those initial or modified values.

官方文檔中說姓惑,它的值取決于之前用registerForRemoteNotificationTypes注冊Remote Notification時(shí)所設(shè)定的types,同時(shí)也會(huì)根據(jù)用戶通知中心中的設(shè)定而變更按脚,也就是說于毙,enabledRemoteNotificationTypes同時(shí)會(huì)反映這兩種情況。但在實(shí)際測試中辅搬,發(fā)現(xiàn)只要registerForRemoteNotificationTypes注冊成功并生成用于發(fā)送PUSH的token唯沮,不論通知中心中app的設(shè)置如何變化(開啟通知、關(guān)閉通知堪遂、單獨(dú)開啟聲音介蛉、單獨(dú)關(guān)閉提醒等),enabledRemoteNotificationTypes的值都不會(huì)改變溶褪,嚴(yán)格等同于之前調(diào)用registerForRemoteNotificationTypes時(shí)設(shè)定的入?yún)⒈揖伞_@就意味著,只要注冊成功過Remote Notification一次猿妈,后續(xù)無論用戶如何調(diào)整app的通知設(shè)定吹菱,enabledRemoteNotificationTypes的返回值都是一樣的。

這個(gè)“特性”彭则,對于Remote Notification可能還好鳍刷,因?yàn)楫吘褂|發(fā)PUSH是在服務(wù)端,在發(fā)送的時(shí)候俯抖,也無法得知本地客戶端的用戶設(shè)置输瓜,但對于Local Notification來說,這就是“致命”的芬萍,因?yàn)楦鶕?jù)它開發(fā)者無法判斷用戶是否允許Local Notification尤揣,這也就是文章開頭“添加的Local Notification到點(diǎn)沒有提醒”的原因,因?yàn)楝F(xiàn)有的判斷是根據(jù)enabledRemoteNotificationTypes柬祠,而它又返回了全部3個(gè)type芹缔,但其實(shí)這時(shí)用戶已經(jīng)關(guān)閉了app的通知。

幸好蘋果在iOS 8上解決了這個(gè)問題瓶盛,引入了新的機(jī)制最欠,把用戶授權(quán)App使用本地/遠(yuǎn)程通知與Remote Notification成功注冊并生成token分離開來示罗,前者用[[UIApplication sharedApplication] registerUserNotificationSettings:]來實(shí)現(xiàn),后者通過[[UIApplication sharedApplication] registerForRemoteNotifications]與AppDelegate的[application:didRegisterUserNotificationSettings:]回調(diào)來達(dá)到芝硬,并引入了[[UIApplication sharedApplication] currentUserNotificationSettings]蚜点,來同步返回用戶在通知中心中的設(shè)定狀態(tài)。

最后拌阴,很有意思的是绍绘,在兩個(gè)版本中,當(dāng)App在后臺時(shí)迟赃,通知中心中此App的設(shè)定值都會(huì)影響到Local Notification是否以及如何被顯示陪拘,而當(dāng)在App在前臺時(shí),無論通知中心中的設(shè)置如何纤壁,Local Notification總是同樣地進(jìn)行顯示左刽。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市酌媒,隨后出現(xiàn)的幾起案子欠痴,更是在濱河造成了極大的恐慌,老刑警劉巖秒咨,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件喇辽,死亡現(xiàn)場離奇詭異,居然都是意外死亡雨席,警方通過查閱死者的電腦和手機(jī)菩咨,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陡厘,“玉大人旦委,你說我怎么就攤上這事〕牵” “怎么了缨硝?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長罢低。 經(jīng)常有香客問我查辩,道長,這世上最難降的妖魔是什么网持? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任宜岛,我火速辦了婚禮,結(jié)果婚禮上功舀,老公的妹妹穿的比我還像新娘萍倡。我一直安慰自己,他們只是感情好辟汰,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布列敲。 她就那樣靜靜地躺著阱佛,像睡著了一般。 火紅的嫁衣襯著肌膚如雪戴而。 梳的紋絲不亂的頭發(fā)上凑术,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天,我揣著相機(jī)與錄音所意,去河邊找鬼淮逊。 笑死,一個(gè)胖子當(dāng)著我的面吹牛扶踊,可吹牛的內(nèi)容都是我干的泄鹏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼秧耗,長吁一口氣:“原來是場噩夢啊……” “哼备籽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起绣版,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎歼疮,沒想到半個(gè)月后杂抽,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡韩脏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年缩麸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赡矢。...
    茶點(diǎn)故事閱讀 40,115評論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡杭朱,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出吹散,到底是詐尸還是另有隱情弧械,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布空民,位于F島的核電站刃唐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏界轩。R本人自食惡果不足惜画饥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望浊猾。 院中可真熱鬧抖甘,春花似錦、人聲如沸葫慎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至米奸,卻和暖如春昼接,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背悴晰。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工慢睡, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人铡溪。 一個(gè)月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓漂辐,卻偏偏與公主長得像,于是被迫代替她去往敵國和親棕硫。 傳聞我的和親對象是個(gè)殘疾皇子髓涯,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評論 2 355

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

  • 許多集成的步驟個(gè)推官網(wǎng)都有了,這里只寫關(guān)于推送的遠(yuǎn)程推送和本地通知的步驟和代碼哈扮。APP在后臺時(shí):走蘋果的APNS通...
    AllureJM閱讀 2,725評論 1 9
  • 極光推送: 1.JPush當(dāng)前版本是1.8.2纬纪,其SDK的開發(fā)除了正常的功能完善和擴(kuò)展外也緊隨蘋果官方的步伐,SD...
    Isspace閱讀 6,719評論 10 16
  • 推送通知注意:這里說的推送通知跟NSNotification有所區(qū)別NSNotification是抽象的滑肉,不可見的...
    醉葉惜秋閱讀 1,515評論 0 3
  • 推送通知 注意:這里說的推送通知跟NSNotification有所區(qū)別 NSNotification是抽象的包各,不可...
    iOS開發(fā)攻城獅閱讀 4,229評論 1 13
  • 平日里问畅,我是個(gè)頑皮的孩子,時(shí)不時(shí)在家里蹦噠六荒,讓家里亂七八糟的护姆,大人們都說我淘氣。 可沒事做的時(shí)候掏击,我就是個(gè)安靜的美...
    黃軒勵(lì)閱讀 460評論 0 7