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

自定義 App 通知的外觀

原文連接:Customizing the Appearance of Notificationshtml

使用通知內容應用擴展程序來自定義 iOS 應用的通知提醒的外觀。編程

框架數組

  • UserNotificationsUI

目錄網絡

概述

當 iOS 設備收到包含提醒的通知時,系統將分兩個階段顯示提醒內容。一開始的時候,它會顯示帶有標題,副標題和來自通知的兩到四行正文文本的縮寫的橫幅。若是用戶按下橫幅,iOS 會顯示完整的通知界面,包括任何與通知相關的操做。系統爲縮略橫幅提供界面,但你可使用通知內容應用擴展程序自定義完整界面。app

Screenshots showing the abbreviated banner and the full notification.

通知內容應用擴展管理能夠顯示你的自定義通知界面的視圖控制器。該視圖控制器能夠補充或替換你的通知的默認系統界面。你可使用你的視圖控制器來:框架

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

  • 用不一樣的字體或樣式替換界面元素。ide

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

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

應用擴展必須使用現有的數據來配置其視圖控制器,例如通知的內容和應用擴展包中存在的文件。若是使用應用程序組在應用和擴展之間共享數據,那麼還可使用在應用程序組中的任何文件。爲了確保可以及時提交通知,須要儘量早地佈局視圖。請不要執行任何長期運行的任務,好比嘗試經過網絡檢索數據。

注意: 通知內容附加應用信息僅支持 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 :爲傳遞本地或遠程的通知提供自定義接口的對象。

相關文章
相關標籤/搜索