iOS 12 通知新特性 —— 自定義 App 通知的外觀

ALVIN君發表於2019-03-01

自定義 App 通知的外觀

原文連結:Customizing the Appearance of Notifications

使用通知內容應用擴充套件程式來自定義 iOS 應用的通知提醒的外觀。

框架

  • UserNotificationsUI

目錄

概述

當 iOS 裝置收到包含提醒的通知時,系統將分兩個階段顯示提醒內容。一開始的時候,它會顯示帶有標題,副標題和來自通知的兩到四行正文文字的縮寫的橫幅。如果使用者按下橫幅,iOS 會顯示完整的通知介面,包括任何與通知相關的操作。系統為縮略橫幅提供介面,但你可以使用通知內容應用擴充套件程式自定義完整介面。

Screenshots showing the abbreviated banner and the full notification.

通知內容應用擴充套件管理可以顯示你的自定義通知介面的檢視控制器。該檢視控制器可以補充或替換你的通知的預設系統介面。你可以使用你的檢視控制器來:

  • 自定義各項的位置,包括提醒的標題、副標題和正文。

  • 用不同的字型或樣式替換介面元素。

  • 顯示特定於應用的資料(例如,儲存在通知有效內容的特定鍵中的資料。)

  • 包含自定義圖片或品牌。

應用擴充套件必須使用現有的資料來配置其檢視控制器,例如通知的內容和應用擴充套件包中存在的檔案。如果使用應用程式組在應用和擴充套件之間共享資料,那麼還可以使用在應用程式組中的任何檔案。為了確保能夠及時提交通知,需要儘可能早地佈局檢視。請不要執行任何長期執行的任務,比如嘗試通過網路檢索資料。

注意:
通知內容附加應用資訊僅支援 iOS 應用。有關如何自定義 watchOS 中的通知外觀的資訊,請參見 watchOS 的應用程式程式設計指南.

將通知內容應用擴充套件新增到你自己的專案

向 iOS 應用新增通知內容應用程式

  1. 在 Xcode 選擇 File > New > Target

  2. 從 iOS 應用擴充套件中選擇通知內容擴充套件。

  3. 點選 Next

  4. 命名。

  5. 點選 Finish

注意:
你可以向專案同時新增多個通知內容應用擴充套件,但每個擴充套件都必須支援一組唯一的通知類別。你可以在其 Info.plist 檔案中指定應用擴充套件的類別,如宣告支援的通知型別中所述。

將檢視新增到檢視控制器中

Xcode 提供的模板包含一個 storyboard 和一個檢視控制器供你配置。通過向檢視控制器新增檢視來構建自定義通知介面。例如,使用 label 顯示通知的標題,副標題和正文。你還可以新增顯示非互動式內容的 ImageViewView。你無需為檢視提供任何初始內容。

你可以在 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。識別符號字串會區分大小寫。

圖 2Info.plist 檔案中顯示了兩種不同通知型別的通知內容應用擴充套件。由於它支援兩種型別,UNNotificationExtensionCategory 鍵的值由一個陣列組成,其中字串為 GENERALPLANE_AVAILABLE。如果收到任何一種型別的通知,系統都將顯示來自此通知內容應用擴充套件的介面。

圖 2

配置通知內容應用擴充套件的 Info.plist檔案

A screenshot of the plist editor, showing the UNNotificaitonExtensionCategory for two notification types.

注意
UNNotificationExtensionClass 鍵的值預設是一個字串,它允許你的通知內容應用擴充套件只支援一種通知型別。若要支援多種型別,請將字串型別更改為字串陣列。

對於本地通知,請將其類別字串放入 UNMutableNotificationContent 物件的categoryIdentifier 屬性中。對於遠端通知,將字串放入 JSON 的 category 鍵中。有關宣告應用程式的通知型別的資訊,請參閱宣告可操作的通知型別

有關 Info.plist 檔案中鍵的更多資訊,請參閱 UNNotificationContentExtension

隱藏預設通知介面

系統會在每個通知中顯示一些預設資訊,包括自定義介面的資訊。系統始終顯示包含應用名稱和圖示。系統還會顯示帶有標題,副標題和通知正文的介面,但如果你願意,可以隱藏該介面的這一部分。

例如,如果你自定義的介面顯示來相同的資訊,則可能會隱藏預設通知介面。圖 3 說明了包含和不包含預設內容的通知介面的佈局。

圖 3

通知介面的佈局

The default interface displays a header, followed by your custom content, followed by the default system content. If you hide the default system content, only the header and your custom interface are displayed.

若要刪除預設系統內容,請將 UNNotificationExtensionDefaultContentHidden 鍵新增到擴充套件的 Info.plist 檔案中,並將該鍵的值設定為 true。有關此鍵的更多資訊,請參見 UNNotificationContentExtension

將媒體融入到你的介面中

為了支援從自定義通知介面播放音訊或視訊,請實現以下操作:

系統為您繪製媒體按鈕,並且處理所有使用者互動。當按下按鈕時,它會呼叫 mediaPlaymediaPause 方法,這樣一來,你就可以控制開始和停止播放了。

若要以程式設計方式來啟動或停止播放媒體檔案,請呼叫當前的 NSExtensionContext 物件的 mediaPlayingStartedmediaPlayingPaused 方法。使用檢視控制器的 extensionContext 屬性來訪問擴充套件上下文。

支援互動式控制元件

在 iOS 12及更高版本中,你可以在自定義通知中啟用使用者互動。你可以將互動式控制元件(如按鈕和開關)新增到自定義介面中。

若要啟用使用者互動:

  1. 開啟你的通知內容擴充套件的 info.plist 檔案。

  2. UNNotificationExtensionUserInteractionEnabled 鍵新增到你的擴充套件屬性中。給它一個布林值,設定為 YES

圖 4 展示了 info.plist 檔案,並啟用通知。

圖 4

在通知擴充套件的 info.plist 檔案中啟用用用互動功能

A screenshot of the plist editor, showing the UNNotificationExtensionUserInteractionEnabled key added to the NSExtensionAttributes dictionary.

瞭解更多

通知內容應用擴充套件

UNNotificationContentExtension :為傳遞本地或遠端的通知提供自定義介面的物件。

相關文章