iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 20
0


Description:
App 中常會透過通知來告訴使用者某些特定訊息(e.g.行事曆提醒、收到新訊息),在 iOS 上的通知共分成兩種 local 及 remote。本篇是實作 Local 端的 UserNotifications。


Component:

  1. UserNotifications

Highlight function:
要能夠傳送通知之前需要跟使用者要求允許通知的權限。

// request user authorization
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { (success, error) in
  if error == nil {
    print("Require Authorization success.")
  }
}

在 requestAuthorization() 中 options 參數是用來表示顯示通知的方式,有圖文、聲音,以及在 App Icon 顯示數字或是carPlay。

建立通知的顯示內容(content)及觸發條件(trigger)和用來識別此通知的 uniqued ID:

let request = UNNotificationRequest(identifier: notificationId,
                                    content: content,
                                    trigger: trigger)

顯示內容除了文字之外,也可以帶入圖片或是檔案,在這個 demo 中帶入了一個 gif 檔:

let content = UNMutableNotificationContent()
let attachment = try! UNNotificationAttachment(identifier: "NickYoung", url: imgURL, options: .none)
content.title = "New notification"
content.subtitle = "Hello!"
content.body = "Content body."
content.attachments = [attachment]
content.sound = UNNotificationSound.default()
content.badge = (UIApplication.shared.applicationIconBadgeNumber + 1) as NSNumber

觸發的條件可設定多少時間後觸發及是否重複觸發:

let notifyInSecond = 10
let repeatNotify: Bool = false
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: inSeconds, repeats: repeatNotify)

若是設定為重複觸發, timeInterval 最短的時間區間是 60 秒。

將欲發送之通知加入 NotificationCenter 即可完成:

UNUserNotificationCenter.current().add(request) { (error) in
  if error == nil {
    completion(true)
  } else {
    completion(false)
  }
}

Additional:
點擊 App 或是通知訊息後 App Icon 數字(badge)的清除方式:

func applicationDidBecomeActive(_ application: UIApplication) {
  application.applicationIconBadgeNumber = 0 // clear badge count
}

Reference:
UserNotifications
Source code on Github


上一篇
Protocol-Oriented Programming
下一篇
iOS App 實作(16) Side-in Menu
系列文
30天Swift入門學習30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言