簡體   English   中英

一個應用程序中的多個通知服務擴展

[英]Multiple Notification Service Extension in one app

是否可以在一個應用程序中添加多個通知服務擴展?如果是,那么如何識別將使用哪個以及如何使用?

基本上,我的應用程序有兩個服務提供者,它們都有自己的通知服務擴展有效負載,所以有什么方法可以添加兩個不同的通知服務擴展,並根據 serviceProvider ==“1”的有效負載中的值我可以告訴應用程序運行 serviceProvider 1 的擴展

通知服務擴展

文檔對此沒有任何說明。 在我的測試中它不起作用。 所有通知都通過單個NotificationServiceExtension進行處理。

通知內容擴展

對於NotificationContentExtension ,文檔說:

您可以向項目中添加多個通知內容應用擴展,但每個擴展都必須支持一組獨特的通知類別。 您可以在其 Info.plist 文件中指定應用擴展的類別,如聲明支持的通知類型中所述。

自定義通知文檔的外觀

我驗證了☝️並且它起作用了! FWIW 您可以為多個類別使用單個通知內容擴展。

UNNotificationExtensionCategory(必填)

一個字符串或一個字符串數組 每個字符串都包含應用程序使用 UNNotificationCategory 類聲明的類別的標識符。

還值得一提的是NotificationServiceExtension的默認 plist 設置如下所示:

在此處輸入圖片說明

它不會將自己與任何給定的類別相關聯。 我嘗試添加NSExtensionAttributes以及UNNotificationCategoryExtension鍵值。 但即使它編譯,它也沒有工作! 我認為 Apple 決定如何使用通知服務擴展的方式基於以下兩個字段:

  • 其 bundleID 前綴為apns-topic
  • 必須始終設置為com.apple.usernotifications.serviceNSExtensionPointIdentifer字段。 這個值對於今天的擴展或內容通知擴展等是不同的。

因此,如果您有兩個服務擴展,那么系統將無法決定應該顯示哪一個

但是NotificationContentExtension的默認 plist 設置確實具有UNNotificationCategoryExtension鍵,值包括:

在此處輸入圖片說明


還要考慮更多,如果一個應用程序有 5 個不同的類別,並且每個類別都有一個服務擴展並同時接收它們,那么它將啟動 5 個不同的進程(想想 5 個並行的didFinishLaunchingWithOptions回調。每個類別一個和進程),這對操作系統不利。

雖然不確定,但Signal 的 NotificationService 類文檔支持這一理論。

 // Note that the NSE does *not* always spawn a new process to // handle a new notification and will also try and process notifications // in parallel. `didReceive` could be called twice for the same process, // but will always be called on different threads. To deal with this we // ensure that we only do setup *once* per process and we dispatch to // the main queue to make sure the calls to the message fetcher job // run serially.

NotificationContentExtension情況並非如此。 它不能一次處理 5 個 contentExtensions。 因為它是一個由主線程門控的 UI 特色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM