[英]Multiple Notification Service Extension in one app
是否可以在一個應用程序中添加多個通知服務擴展?如果是,那么如何識別將使用哪個以及如何使用?
基本上,我的應用程序有兩個服務提供者,它們都有自己的通知服務擴展有效負載,所以有什么方法可以添加兩個不同的通知服務擴展,並根據 serviceProvider ==“1”的有效負載中的值我可以告訴應用程序運行 serviceProvider 1 的擴展
文檔對此沒有任何說明。 在我的測試中它不起作用。 所有通知都通過單個NotificationServiceExtension
進行處理。
對於NotificationContentExtension
,文檔說:
您可以向項目中添加多個通知內容應用擴展,但每個擴展都必須支持一組獨特的通知類別。 您可以在其 Info.plist 文件中指定應用擴展的類別,如聲明支持的通知類型中所述。
我驗證了☝️並且它起作用了! FWIW 您可以為多個類別使用單個通知內容擴展。
UNNotificationExtensionCategory(必填)
一個字符串或一個字符串數組。 每個字符串都包含應用程序使用 UNNotificationCategory 類聲明的類別的標識符。
還值得一提的是NotificationServiceExtension
的默認 plist 設置如下所示:
它不會將自己與任何給定的類別相關聯。 我嘗試添加NSExtensionAttributes
以及UNNotificationCategoryExtension
鍵值。 但即使它編譯,它也沒有工作! 我認為 Apple 決定如何使用通知服務擴展的方式基於以下兩個字段:
apns-topic
com.apple.usernotifications.service
的NSExtensionPointIdentifer
字段。 這個值對於今天的擴展或內容通知擴展等是不同的。因此,如果您有兩個服務擴展,那么系統將無法決定應該顯示哪一個
但是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.