iOS App 程式開發

iOS 12 期待已久的功能:客製化通知分組 (Custom Notification Groups)

iOS 12 期待已久的功能:客製化通知分組 (Custom Notification Groups)
iOS 12 期待已久的功能:客製化通知分組 (Custom Notification Groups)
In: iOS App 程式開發, Swift 程式語言
本篇原文(標題:iOS 12: Custom Notification Groups )刊登於作者 Medium,由 Jesus Guerra 所著,並授權翻譯及轉載。

在最近一次的 WWDC 發佈會,Apple 發表了 iOS 12 的新功能,其中一個就是通知分組功能

今天,讓我們做一個導覽說明,去了解如何擁有屬於自己的客製通知分組,這非常容易上手,尤其如果你有一個像是聊天 App 或社群軟體 App,但首先要確定:

本篇教學是由 Xcode 10 Beta 第六版完成,所以官方版本釋出後,功能上或許會有一些改變。

通知分組

為你的 App 的通知功能分組,可以有效地幫助使用者一眼就得到更多資訊,並即時管理多個通知。

在 iOS 12,對於分組式的通知功能有三種設定方式:

  • 自動模式:這是初始設定,可以允許你在每個 App 可以有「聰明」的通知分組,分組可以基於標題、內容、或是其他方法,以 Mail App 為例就是郵件的發送者。
  • 以 App 為主:基本來說,所有通知都會以 App 分組,不論標題、內容、或發送者。
  • 關閉:這個代表你想要以最原本的方式獨立顯示單一訊息

Notification Groups-1
圖片從 Apple 官方網站擷取,版權由 Apple 所有

預設通知

這篇教學我將會使用 UNMutableNotificationContent,這樣一來我可以在模擬器執行本地通知功能。

首先,你需要有使用者同意權限,才可以向他發送通知。你可以在你的範例專案中的 viewDidLoad 方法,加入下列程式碼。

// Ask for Notification Permissions
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.sound, .alert, .badge]) { granted, _ in
    DispatchQueue.main.async {
        if granted {
            UIApplication.shared.registerForRemoteNotifications()
        } else {
            // Handle error or not granted scenario
        }
    }
}
注意:以上這些步驟都是為了本教學所寫,你應該在一個比 `viewDidLoad` 更好的地方實作要求授權的功能。

當得到授權通知功能的許可後,我們就加入下列程式碼:

func scheduleGroupedNotifications() {
    for i in 1...5 {
        let notificationContent = UNMutableNotificationContent()
        notificationContent.title = "Hello!"
        notificationContent.body = "Do not forget the pizza!"
        notificationContent.sound = UNNotificationSound.default

        // Deliver the notification in five seconds.
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
        // Schedule the notification.
        let request = UNNotificationRequest(identifier: "\(i)FiveSecond", content: notificationContent, trigger: trigger)
        let center = UNUserNotificationCenter.current()
        center.add(request) { (error: Error?) in
            if let theError = error {
                print(theError)
            }
        }
    }
}

上面這個方法是建立一組每 5 秒就會觸發一次的 UNMutableNotificationContent,這樣可以確保我們有足夠時間鎖上螢幕,然後看到通知彈出。我將這段程式碼加入到在範例專案中的 IBAction 中,因為 iOS 12 的版本可以用自動模式來分組,所以通知看起來應該像這樣:

Notification Groups-2

客製通知分組

在某些情況下,使用自動化的分組功能對你的 App 可能不太適合,這樣你就可能需要根據邏輯中的其他指標或變數來建立客製化的分組。

回到我們的示範專案中,假設我需要將所有來自 “your wife” 和 “your son” 的通知分組。要達到這個目的,我們將使用下列函數來更新我們的 notificationContent

  • threadIdentifier:與此通知請求相關的線程或對話的唯一識別符。這個識別符將會用於可視化的分組通知中。
  • 還要再加入一個資訊:

  • summaryArgument:為了達成這個通知,我們需要把這個函數插入到 summary。

現在我們的 scheduleGroupedNotifications 方法應該像這樣:

func scheduleGroupedNotifications() {
    for i in 1...6 {
        let notificationContent = UNMutableNotificationContent()
        notificationContent.title = "Hello!"
        notificationContent.body = "Do not forget the pizza!"
        notificationContent.sound = UNNotificationSound.default

        if i % 2 == 0 {
            notificationContent.threadIdentifier = "Guerrix-Wife"
            notificationContent.summaryArgument = "your wife"
        } else {
            notificationContent.threadIdentifier = "Guerrix-Son"
            notificationContent.summaryArgument = "your son"
        }

        // Deliver the notification in five seconds.
        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
        // Schedule the notification.
        let request = UNNotificationRequest(identifier: "\(i)FiveSecond", content: notificationContent, trigger: trigger)
        let center = UNUserNotificationCenter.current()
        center.add(request) { (error: Error?) in
            if let theError = error {
                print(theError)
            }
        }
    }
}

在模擬器上,通知看起來應該像這樣:

Notification Groups-3

請注意我們如何使用 threadIdentifiersummaryArgument 相應地把 “your wife” 和 “your son” 添加到 summary 內,最後製作成兩個通知分組。

現在,你就懂得如何客製化自己的通知分組了!

如果你需要這個示範專案的話,可以從這裡下載。

參考資料

感謝你閱讀此教學,希望你覺得本篇教學對你有幫助。如有任何想法和建議,歡迎留言或在 Twitter 上追蹤我。

本篇原文(標題:iOS 12: Custom Notification Groups )刊登於作者 Medium,由 Jesus Guerra 所著,並授權翻譯及轉載。
作者簡介:Jesus Guerra:我是一個著重家庭的人,我愛我的家庭。我也是一名自由 iOS 開發者,在娛樂、體育、社交媒體行業的 App 開發很有經驗。我喜歡學習 iOS 開發的新知識;像我最近開始使用 React-Native。我不定期在 Medium 上發表文章。

LinkedIn: https://www.linkedin.com/in/guerrix/
Instagram: https://www.instagram.com/guerrix/

譯者簡介:Oliver Chen-工程師,喜歡美麗的事物,所以也愛上 Apple,目前在 iOS 程式設計上仍是新手,正研讀 Swift 與 Sketch 中。生活另一個身份是兩個孩子的爸,喜歡和孩子一起玩樂高,幻想著某天自己開發的 App,可以讓孩子覺得老爸好棒!。聯絡方式:電郵 [email protected]
作者
AppCoda 編輯團隊
此文章為客座或轉載文章,由作者授權刊登,AppCoda編輯團隊編輯。有關文章詳情,請參考文首或文末的簡介。
評論
很好! 你已成功註冊。
歡迎回來! 你已成功登入。
你已成功訂閱 AppCoda 中文版 電子報。
你的連結已失效。
成功! 請檢查你的電子郵件以獲取用於登入的連結。
好! 你的付費資料已更新。
你的付費方式並未更新。