日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

WWDC 2018:iOS 12 通知的新特性

發(fā)布時(shí)間:2025/4/16 72 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WWDC 2018:iOS 12 通知的新特性 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Session 710 : What’s New in User Notifications

iOS 10 新增的 UserNotifications.framework 用一套易用的接口替換了之前版本雜亂的接口,是一次通知接口的大重構(gòu)。而 iOS 12 則從用戶體驗(yàn)的角度為通知帶來(lái)了諸如通知分類等便捷的新特性, 通知內(nèi)容擴(kuò)展也在此次更新中獲得了更強(qiáng)的交互能力。本文也從這兩個(gè)方面對(duì) iOS 12 通知特性的變更進(jìn)行介紹。

新增特性

1. 應(yīng)用通知分組( Grouped Notifications )

iOS 12 中同一類型的通知會(huì)被合成一個(gè)通知組,用戶可以通過(guò)點(diǎn)擊通知組展開組里的所有通知。

通知分組使用兩種分組方式:自動(dòng)分組( Automatic grouping ) 和線程標(biāo)識(shí)( Thread identifier )。開發(fā)者不需要對(duì)自動(dòng)分組做額外的操作,系統(tǒng)會(huì)根據(jù) App 的 bundle id 對(duì)推送進(jìn)行分組。如果需要對(duì)通知做更細(xì)致的分組就需要用上線程標(biāo)識(shí)了。

// 本地通知 let content = UNMutableNotificationContent() content.title = "New Photo" content.body = "Jane Doe posted a new photo" // 自定義標(biāo)識(shí) content.threadIdentifier = "thread-identifier"// 遠(yuǎn)程通知 {"aps" : {"alert" : {"title" : "New Photo","body" : "Jane Doe posted a new photo","thread-id" : "thread-identifier",}} } 復(fù)制代碼

用戶可以在通知管理頁(yè)面對(duì)通知分組進(jìn)行管理:

  • 自動(dòng)( Automatic )
  • 按應(yīng)用( By App )
  • 關(guān)閉( Off ) 注:如果用戶選擇了 按應(yīng)用 分組,系統(tǒng)會(huì)無(wú)視你設(shè)定的線程標(biāo)識(shí)只通過(guò) bundle id 對(duì)通知進(jìn)行分組。

2. 通知中心新增通知管理界面

由于現(xiàn)在的用戶管理單個(gè)應(yīng)用通知設(shè)置的入口太深,iOS 12 推出了全新的推送管理頁(yè)面以便用戶更快捷的操作。

在新的通知管理頁(yè)面中我們可以看到兩個(gè)明顯的按鈕:隱式推送( Deliver Quietly ) 和 關(guān)閉( Turn Off ) 。 隱式推送(根據(jù)用戶行為有時(shí)展示為顯式推送)是 iOS 12 為方便用戶對(duì)通知設(shè)置的兩種便捷模式之一:

  • 隱式推送(Deliver Quietly) 隱式推送只會(huì)顯示在通知中心,不會(huì)帶有聲音提醒,應(yīng)用角標(biāo)。
  • 顯式推送(Deliver Prominently) 顯示推送會(huì)開啟所有的通知選項(xiàng)。

展示管理頁(yè)面有 3 種方式:

  • 左滑通知,點(diǎn)擊 管理 按鈕
  • 進(jìn)入通知詳情頁(yè)面,點(diǎn)擊右上角的 更多 按鈕
  • 系統(tǒng)根據(jù)用戶行為自動(dòng)的給出提示,點(diǎn)擊 管理 按鈕

自定義通知設(shè)置頁(yè)面( Custom Settings )

由于新的通知管理頁(yè)面也支持用戶關(guān)閉通知提示,App 可以為通知提供更詳細(xì)的管理頁(yè)面引導(dǎo)用戶關(guān)閉部分他們不希望收到的推送而不是關(guān)閉所有。當(dāng)用戶點(diǎn)擊通知設(shè)置頁(yè)面對(duì)應(yīng)的按鈕時(shí),iOS 12 提供了新的代理方法獲取這個(gè)事件并處理。 注:代理中 notification 參數(shù)是個(gè) optional ,當(dāng)用戶從設(shè)置頁(yè)面點(diǎn)擊管理通知時(shí)這個(gè)參數(shù)會(huì)是 nil 。

import UIKit import UserNotificationsclass AppDelegate: UIApplicationDelegate, UNUserNotificationCenterDelegate {func userNotificationCenter(_ center: UNUserNotificationCenter, openSettingsFor notification: UNNotification? ) {}} 復(fù)制代碼

3. 無(wú)需用戶授權(quán)也能給用戶推送的新機(jī)制:臨時(shí)授權(quán)( Provisional Authorization )

iOS 12 提供了一種新的通知授權(quán)機(jī)制:臨時(shí)授權(quán)。這種機(jī)制不會(huì)給用戶授權(quán)的彈窗而直接嘗試給用戶推送,需要注意的是臨時(shí)授權(quán)推送的消息只會(huì)以隱式推送的方式展示給用戶。

在代碼中我們只需要設(shè)置參數(shù) provisional 就能使用這種機(jī)制。

let notificationCenter = UNUserNotificationCenter.current()notificationCenter.requestAuthorization(options:[.badge, .sound, .alert, .provisional]) {} 復(fù)制代碼

4. 勿擾模式下依然可以收到的通知:重要提醒( Critical Alerts )

當(dāng)我們?cè)陂_會(huì)或者參與一些很重要的活動(dòng)時(shí),通常會(huì)開啟勿擾模式或者關(guān)閉鈴聲,但這個(gè)操作有可能會(huì)讓我們錯(cuò)過(guò)一些關(guān)鍵的通知。 iOS 12 中加入的重要提醒能夠無(wú)視勿擾模式和鈴聲開關(guān)的限制,收到這類通知時(shí)會(huì)伴隨一個(gè)系統(tǒng)或 App 設(shè)定的提示音。需要推送重要提醒的應(yīng)用需要前往 developer.apple.com/contact/req… 獲得授權(quán)。

注:所謂的重要提醒是指那些需要用戶即刻做出反應(yīng)的通知,例如與醫(yī)療和健康相關(guān)的通知,與家庭安全相關(guān)的通知,與公共安全相關(guān)的通知等。

通知設(shè)置頁(yè)面重要提醒的開關(guān)區(qū)別于普通的通知開關(guān)

系統(tǒng)允許只接收重要提醒

在代碼中我們需要設(shè)置參數(shù) criticalAlert ,用戶會(huì)看到單獨(dú)的重要提醒授權(quán)

let notificationCenter = UNUserNotificationCenter.current()notificationCenter.requestAuthorization(options:[.badge, .sound, .alert, .criticalAlert]) {} 復(fù)制代碼

推送重要提醒通知和普通通知的區(qū)別在于提示音

// 本地重要提醒 let content = UNMutableNotificationContent() content.title = "WARNING: LOW BLOOD SUGAR" content.body = "Glucose level at 57." content.categoryIdentifier = "low-glucose—alert" // 使用系統(tǒng)默認(rèn)的重要提醒音 content.sound = UNNotificationSound.defaultCritical // 使用自定義的重要提醒音 content.sound = UNNotificationSound.criticalSoundNamed(@"warning-sound" withAudioVolume: 1.00)// 遠(yuǎn)程重要提醒 {"aps" : {"sound" : {"critical": 1,"name": "warning-sound.aiff","volume": 1.0}} } 復(fù)制代碼

舊有特性升級(jí)

1. 通知內(nèi)容擴(kuò)展升級(jí),更具交互性( Notification Content Extensions )

Notification Content Extensions 是 iOS 10 新增的通知擴(kuò)展之一,在 iOS 12 中得到了增強(qiáng),不熟悉的同學(xué)可以通過(guò)喵神的文章了解下: 活久見的重構(gòu) - iOS 10 UserNotifications 框架解析。

通知?jiǎng)幼?#xff08; notification actions )

iOS 12 提供了新的 API 來(lái)解決動(dòng)作當(dāng)前動(dòng)作存在的兩個(gè)問(wèn)題:

  • 無(wú)法動(dòng)態(tài)修改
  • 與 category 聯(lián)系緊密
extension NSExtensionContext {@available(iOS 12.0, *)var notificationActions: [UNNotificationAction]} 復(fù)制代碼

notificationActions 屬性允許你獲取當(dāng)前擴(kuò)展的動(dòng)作,更新新的動(dòng)作。

class NotificationViewController: UIViewController, UNNotificationContentExtension {func didReceive(_ response: UNNotificationResponse, completionHandler completion: (UNNotificationContentExtensionResponseOption) -> Void) {if response.actionIdentifier == "like-action" {// Update state...let unlikeAction = UNNotificationAction(identifier: "unlike-action", title: "Unlike", options: [])let currentActions = extensionContext?.notificationActionslet commentAction = currentActions![1]let newActions = [ unlikeAction, commentAction ]extensionContext?.notificationActions = newActions}} } 復(fù)制代碼

通知擴(kuò)展界面新增可交互狀態(tài)( User interaction )

Content view 是默認(rèn)不可交互的,iOS 12 想要將其設(shè)置為可交互的狀態(tài),只需要在 plist 中 將 UNNotificationExtensionUserInteractionEnabled 設(shè)置為 true 即可。

通過(guò) API 調(diào)用啟動(dòng) App( Launch application )

某些場(chǎng)景下我們會(huì)在通知內(nèi)容擴(kuò)展中加入展示所有評(píng)論的功能,并且展示操作只有在應(yīng)用內(nèi)才能完成,iOS 12 提供了一個(gè)新的 API 讓我們能通過(guò)代碼啟動(dòng) App 。

extension NSExtensionContext {@available(iOS 12.0, *)func performNotificationDefaultAction()}// Demo: 在 Notification Content Extension 中啟動(dòng) App import UserNotificationsUIclass NotificationViewController: UIViewController, UNNotificationContentExtension {@IBOutlet var allCommentsButton: UIButton?...allCommentsButton?.addTarget(self, action: #selector(launchApp), for: .touchUpInside)...@objc func launchApp() {extensionContext?.performNotificationDefaultAction()}} 復(fù)制代碼

當(dāng)這個(gè) API 被調(diào)用時(shí), App 會(huì)被啟動(dòng),并調(diào)用代理方法:

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: () -> Void) {// Handle action response } 復(fù)制代碼

通過(guò) API 調(diào)用隱藏通知內(nèi)容擴(kuò)展界面( Dismiss content extension view )

如果我們想在通知內(nèi)容擴(kuò)展上增加一個(gè)‘喜歡’按鈕,用戶點(diǎn)擊后自動(dòng)關(guān)閉當(dāng)前的擴(kuò)展,新增加的 API 能夠幫助你實(shí)現(xiàn)這一功能。

extension NSExtensionContext {@available(iOS 12.0, *)func dismissNotificationContentExtension()}// Demo: 在通知內(nèi)容擴(kuò)展中隱藏通知內(nèi)容擴(kuò)展頁(yè)面 import UserNotificationsUIclass NotificationViewController: UIViewController, UNNotificationContentExtension {@IBOutlet var likeButton: UIButton?...likeButton?.addTarget(self, action: #selector(likeButtonTapped), for: .touchUpInside)...@objc func likeButtonTapped() {likedPhoto()extensionContext?.dismissNotificationContentExtension()}} 復(fù)制代碼

需要注意的是,調(diào)用這個(gè) API 并不會(huì)移除那條通知,如果需要移除通知可以調(diào)用下面的 API

class UNUserNotificationCenter {func removeDeliveredNotifications(withIdentifiers identifiers: [String])} 復(fù)制代碼

總結(jié)

有 iOS 10 整體通知框架的打底,iOS 12 在通知的用戶體驗(yàn)上的提升還是挺顯著的,而通知關(guān)閉的成本降低勢(shì)必需要內(nèi)容生產(chǎn)方對(duì)推送內(nèi)容更加謹(jǐn)慎,或者為部分推送內(nèi)容提供關(guān)閉的選項(xiàng)。期待在 iOS 12 上看到利用新特性的有趣應(yīng)用。

查看更多 WWDC 18 相關(guān)文章請(qǐng)前往 老司機(jī)x知識(shí)小集xSwiftGG WWDC 18 專題目錄 - 簡(jiǎn)書

總結(jié)

以上是生活随笔為你收集整理的WWDC 2018:iOS 12 通知的新特性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。