使用通知內容應用擴展程序來自定義 iOS 應用的通知提醒的外觀。編程
框架數組
目錄網絡
當 iOS 設備收到包含提醒的通知時,系統將分兩個階段顯示提醒內容。一開始的時候,它會顯示帶有標題,副標題和來自通知的兩到四行正文文本的縮寫的橫幅。若是用戶按下橫幅,iOS 會顯示完整的通知界面,包括任何與通知相關的操做。系統爲縮略橫幅提供界面,但你可使用通知內容應用擴展程序自定義完整界面。app
通知內容應用擴展管理能夠顯示你的自定義通知界面的視圖控制器。該視圖控制器能夠補充或替換你的通知的默認系統界面。你可使用你的視圖控制器來:框架
自定義各項的位置,包括提醒的標題、副標題和正文。iview
用不一樣的字體或樣式替換界面元素。ide
顯示特定於應用的數據(例如,存儲在通知有效內容的特定鍵中的數據。)佈局
包含自定義圖片或品牌。字體
應用擴展必須使用現有的數據來配置其視圖控制器,例如通知的內容和應用擴展包中存在的文件。若是使用應用程序組在應用和擴展之間共享數據,那麼還可使用在應用程序組中的任何文件。爲了確保可以及時提交通知,須要儘量早地佈局視圖。請不要執行任何長期運行的任務,好比嘗試經過網絡檢索數據。
注意: 通知內容附加應用信息僅支持 iOS 應用。有關如何自定義 watchOS 中的通知外觀的信息,請參見 watchOS 的應用程序編程指南.
向 iOS 應用添加通知內容應用程序
在 Xcode 選擇 File > New > Target
。
從 iOS 應用擴展中選擇通知內容擴展。
點擊 Next
。
命名。
點擊 Finish
。
注意: 你能夠向項目同時添加多個通知內容應用擴展,但每一個擴展都必須支持一組惟一的通知類別。你能夠在其
Info.plist
文件中指定應用擴展的類別,如聲明支持的通知類型中所述。
Xcode 提供的模板包含一個 storyboard
和一個視圖控制器供你配置。經過向視圖控制器添加視圖來構建自定義通知界面。例如,使用 label
顯示通知的標題,副標題和正文。你還能夠添加顯示非交互式內容的 ImageView
和 View
。你無需爲視圖提供任何初始內容。
你能夠在 iOS 12 及更高的版本中添加交互式控件(例如按鈕或開關)。有關更多信息,請參閱支持交互式控件。
重要提醒: 千萬不要將其餘視圖控制器添加到你的應用擴展或
storyboard
文件。你的應用擴展必須只包含一個視圖控制器。
你可使用視圖控制器的 didReceiveNotification:
方法來更新其 label
和其餘視圖。通知的有效內容中包含了配置視圖控制器時所須要使用的數據。你還可使用應用擴展中的其餘文件的數據。列表 1 展現了這個方法的一個版本,它從通知內容中檢索標題和正文,並將字符串賦給兩個 UILabel
控件,這些控件會做爲輸出存儲在視圖控制器上。
列表 1
在運行時配置通知接口:
func didReceive(_ notification: UNNotification) {
self.bodyText?.text = notification.request.content.body
self.headlineText?.text = notification.request.content.title
}
複製代碼
若是在視圖控制器已經可見的狀況下,收到第二次通知,那麼系統會再次使用新的通知內容來調用 didReceiveNotification:
方法。
你須要指定通知內容的應用擴展爲其提供界面的通知類型。當它收到通知時,系統會將通知的類別值(類型)與你的應用中任何通知內容應用擴展的聲明類別進行匹配。若是找到匹配項,系統將加載相應的應用程序擴展。
在通知內容應用擴展的 Info.plist
文件中,使用你的擴展所支持的通知的類別字符串來配置 UNNotificationExtensionCategory
鍵。類別字符串是你從 iOS 應用註冊的 UNNotificationCategory
對象中包含的標識符。你可使用這些字符串來區分應用能夠接收的通知類型。例如,能夠在任何指定收到新會議邀請的通知中包含字符串 MEETING_INVITE
。標識符字符串會區分大小寫。
圖 2 的Info.plist
文件中顯示了兩種不一樣通知類型的通知內容應用擴展。因爲它支持兩種類型,UNNotificationExtensionCategory
鍵的值由一個數組組成,其中字符串爲 GENERAL
和 PLANE_AVAILABLE
。若是收到任何一種類型的通知,系統都將顯示來自此通知內容應用擴展的界面。
圖 2
配置通知內容應用擴展的 Info.plist
文件
注意
UNNotificationExtensionClass
鍵的值默認是一個字符串,它容許你的通知內容應用擴展只支持一種通知類型。若要支持多種類型,請將字符串類型更改成字符串數組。
對於本地通知,請將其類別字符串放入 UNMutableNotificationContent
對象的categoryIdentifier
屬性中。對於遠程通知,將字符串放入 JSON 的 category
鍵中。有關聲明應用程序的通知類型的信息,請參閱聲明可操做的通知類型。
有關 Info.plist
文件中鍵的更多信息,請參閱 UNNotificationContentExtension
。
系統會在每一個通知中顯示一些默認信息,包括自定義界面的信息。系統始終顯示包含應用名稱和圖標。系統還會顯示帶有標題,副標題和通知正文的界面,但若是你願意,能夠隱藏該界面的這一部分。
例如,若是你自定義的界面顯示來相同的信息,則可能會隱藏默認通知界面。圖 3 說明了包含和不包含默認內容的通知界面的佈局。
圖 3
通知界面的佈局
若要刪除默認系統內容,請將 UNNotificationExtensionDefaultContentHidden
鍵添加到擴展的 Info.plist
文件中,並將該鍵的值設置爲 true
。有關此鍵的更多信息,請參見 UNNotificationContentExtension
。
爲了支持從自定義通知接口播放音頻或視頻,請實現如下操做:
在視圖控制器的 mediaPlayPauseButtonType
屬性中,返回所需的按鈕類型。
在視圖控制器的 mediaPlayPauseButtonFrame
屬性中,返回所需的按鈕大小。
在 mediaPlay
方法中,開始播放媒體文件。
在 mediaPause
方法中,中止播放媒體文件。
系統爲您繪製媒體按鈕,而且處理全部用戶交互。當按下按鈕時,它會調用 mediaPlay
和 mediaPause
方法,這樣一來,你就能夠控制開始和中止播放了。
若要以編程方式來啓動或中止播放媒體文件,請調用當前的 NSExtensionContext
對象的 mediaPlayingStarted
和 mediaPlayingPaused
方法。使用視圖控制器的 extensionContext
屬性來訪問擴展上下文。
在 iOS 12及更高版本中,你能夠在自定義通知中啓用用戶交互。你能夠將交互式控件(如按鈕和開關)添加到自定義界面中。
若要啓用用戶交互:
打開你的通知內容擴展的 info.plist
文件。
將 UNNotificationExtensionUserInteractionEnabled
鍵添加到你的擴展屬性中。給它一個布爾值,設置爲 YES
。
圖 4 展現了 info.plist
文件,並啓用通知。
圖 4
在通知擴展的 info.plist
文件中啓用用用交互功能
UNNotificationContentExtension
:爲傳遞本地或遠程的通知提供自定義接口的對象。