WWDC2018-如何自定義分組通知

rsenjoyer發表於2018-06-07

最後更新: 2018-6-11 修正錯別字

祝願今年的高考考生超長髮揮。

WWDC2016年的時候, 蘋果釋出了 UNNotification.framework, 讓使用者體驗到了全新的通知檢視功能。 在今年WWDC的時候, Apple 對此功能進行了提升, 增加了通知訊息 Grouped 的功能。

試想, 如果你每天微信很繁忙, 有各種群組, 有好友等的, 每天通知一堆堆, 如果能將其進行分組顯示, 想想都很棒。 廢話不多說, 先附上今年的WWDC地址

這個視訊主要介紹了四個方面的內容:(翻譯不好, 就直接上原話了)

  • Notification groups
  • App grouping
  • Custom grouping
  • Group summaries

在我邊觀看邊看api的過程中, 實際上也就是 Custom groupingGroup summaries 需要開發者注意點, 實際用起來真的非常的簡單。

1. Notification groups

Notification groups 實際上說明, 每個應用的通知是可以按照組來區分的, 而且可以統一的管理(Manager、View、Clear All).

WWDC2018-如何自定義分組通知

WWDC2018-如何自定義分組通知

每個應用都可以 Grouped 起來, 當 View 某個 Grouped 的時候, 就可以展開檢視單個 Grouped 的詳細了。

2. App grouping

放兩張圖給你們看 你們就明白了。

WWDC2018-如何自定義分組通知

WWDC2018-如何自定義分組通知

3. Custom grouping

並不是所有的 App 只能定義在一個 Group 裡面, 開發者可以根據具體的需求來進行定製。 當然用的是 iOS10 之後推出的 UNNotification.framework 框架。 不熟悉這個框架的童鞋可前往這裡檢視。

通過設定 threadIdentifier 可以將通知進行分組, 當你對通知設定了同一個的 threadIdentifier 之後, 這一類的通知在一定數量後會自動的進行分組。預設為 nil。 如果你對不同的通知設定不同的 threadIdentifier 的話, 那麼這些不同的是不會被 Grouped 到一起的。。

// 簡單的迴圈新增通知分組, 測試使用
func localNotification() {
        
        for i in 0..<10 {
            let notificationContent = UNMutableNotificationContent()
            notificationContent.title = "標題 \(i)"
            notificationContent.subtitle = "副標題\(i)"
            notificationContent.body = "內容\(i)"
            notificationContent.threadIdentifier = "LocalNotification"
            notificationContent.launchImageName = ""
            notificationContent.sound = UNNotificationSound.default
            let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 60, repeats: true)
            let request = UNNotificationRequest(identifier: "localNotication\(i)", content: notificationContent, trigger: trigger)
            Thread.sleep(forTimeInterval: 0.5)
            UNUserNotificationCenter.current().add(request) { (error) in
            }
        }
        
        Thread.sleep(forTimeInterval: 300)        
        UNUserNotificationCenter.current().removeAllDeliveredNotifications()
    }

複製程式碼

當然, 你可以可以通過配置檔案來設定:

{
	"aps": {
		"alert": {
			"title": "標題",
			"body": "內容",
		}
		"thread-id": "notification-threadIdentifier"  // 配置這行
	}
}

複製程式碼

下午用模擬器跑,執行出錯,後面用真機跑, 發現了有bug: 我第二次刪除app 測試, 然後就通知就顯示不出來了, 在系統設定裡面也看不到我的App。 圖 後面補上。

4. Group summaries

WWDC2018-如何自定義分組通知

開發者可以通過如下方式配置:

let summaryFormat = "%u more messages"
        
UNNotificationCategory(identifier: "category-identifier",
                       actions: [],
                       intentIdentifiers: [],
                       hiddenPreviewsBodyPlaceholder: nil,
                       categorySummaryFormat: summaryFormat,
                       options: [])

複製程式碼

如果是 Grouped 的通知, 可以利用屬性 summaryArgument 來配置。

同樣, 你可以通過配置檔案來設定

{
	"aps": {
		"alert": {
			"title": "標題",
			"body": "內容",
			"summary-arg": "notification-summaryArgument" // 配置這行
			"summary-arg-count": 3 
		}
		...
	}
}

複製程式碼

最後提一個summaryArgumentCount。 這個也很有意思, 就等待你們自己去開發了。。。。。

相關文章