iOS10以前本地通知(UILocalNotification)
使用步驟:
- 創建一個UILocalNotification對象
- 設置觸發時間及標題、內容
- 註冊並安排通知
// 1. 創建一個UILocalNotification對象
let localNotification = UILocalNotification()
// 2. 設置觸發時間及標題、內容
localNotification.fireDate = Date(timeIntervalSinceNow: 3)
localNotification.alertTitle = "Title"
localNotification.alertBody = "alertBodyalertBodyalertBodyalertBody"
// 0. 註冊通知(一般在程序剛啓動時註冊通知)
UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .alert, .sound], categories: nil))
// 3. 安排通知
UIApplication.shared.scheduleLocalNotification(localNotification)
-
UILocalNotification的其他屬性
-
applicationIconBadgeNumber
:應用程序圖標上的數字標記 -
repeatInterval
:重複間隔(按照年、月、日、時、分重複) -
soundName
:發出通知時的提示音,使用UILocalNotificationDefaultSoundName或者指定的音頻文件名 -
userInfo
:與通知相關的額外的字典,用戶在通知上看不到此數據
-
應用程序處理收到的通知
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// ......
// 點擊通知啓動程序(程序不在前臺也不在後臺,即程序退出時),在此可獲取被點擊的通知並處理
if let localNotification = launchOptions?[.localNotification] {
print(localNotification)
}
return true
}
// 應用程序收到通知時,在此方法中處理收到的通知
func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
print(notification)
}
iOS10+使用通知請求(UNNotificationRequest)創建本地通知
使用步驟
- 請求授權
- 創建通知內容
- 創建通知觸發時間
- 使用唯一標識字符串、內容、觸發器創建通知請求
- 將通知請求加到通知中心
// 1. 創建通知內容
let content = UNMutableNotificationContent()
// 標題
content.title = NSString.localizedUserNotificationString(forKey: "Hello!", arguments: nil)
// 內容
content.body = NSString.localizedUserNotificationString(forKey: "Hello_message_body", arguments: nil)
// 通知提示音
content.sound = .default
// 2. 創建通知觸發器
// Deliver the notification in five seconds.
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
// 3. 使用唯一標識字符串、內容、觸發器創建通知請求
let uuidString = UUID().uuidString
let request = UNNotificationRequest(identifier: uuidString, content: content, trigger: trigger)
// 獲取當前程序的通知中心
let notificationCenter = UNUserNotificationCenter.current()
// 設置代理,用來處理收到的通知
notificationCenter.delegate = self
// 0. 請求授權(一般在程序剛啓動時請求通知授權)
notificationCenter.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
}
// 4. 將通知請求加到通知中心
notificationCenter.add(request) { (error) in
if error != nil {
// Handle any errors.
}
}
-
UNMutableNotificationContent
的其他常用屬性-
subtitle
:子標題 -
badge
:應用程序圖標上的數字標記 -
userInfo
:與通知相關的額外的字典,用戶在通知上看不到此數據
-
-
UNNotificationTrigger
常見的通知觸發器-
UNTimeIntervalNotificationTrigger
: 幾秒後觸發,如果要設置可重複觸發需要大於60 -
UNCalendarNotificationTrigger
:某年某月某日某天某時某分某秒觸發 -
UNLocationNotificationTrigger
:在某個位置觸發
-
- 處理接收到的通知(使用UNUserNotificationCenterDelegate中的兩個方法)
// Asks the delegate to process the user's response to a delivered notification.
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
// 處理代碼
......
completionHandler()
}
// 應用程序運行在前臺時,此方法處理收到的通知
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
// 處理代碼
......
completionHandler(.sound)
}