iOS有两种用户提醒(user notification):本地notification和远程notification。
广播提醒(broadcast notification)和key-value观察提醒不属于用户提醒
本地notification和远程notification是一样,但使用场景有所不同。
- 本地notification,app自己定期发送的,不需要一个网络环境;
- 远程notification,就是我们常说的远程推送啦;
附上推送的原理:app的provider推送消息到APNs(Apple Push Notification service),APNs再推送到手机上。
提醒的形式包括:
- 屏幕上的alert或者banner
- icon上的小红点(见下图)
- 有声音伴随的alert、banner或icon上的小红点
注意
- 事实上除了Alert、Badge和Sound这几种方式,我们可以自定义通知形式。
- 如果用户的手机不允许某种形式,则该形式即使被注册了,也会被忽略(比如,静音的手机怎能显示提示音呢?)。
下面进入本文重点:local notification(本地提醒)
- 注册local notification的用户交互形式。 可以在didFinishLaunchingWithOptions方法中调用:
let mySetting = UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil) UIApplication.sharedApplication().registerUserNotificationSettings(mySetting)
- 发送通知 可以在触发推送发送条件的地方调用:
func sendLocalNotification(_ body: String, fireDate: Date, dict: [AnyHashable: Any]) { let notification = UILocalNotification() notification.fireDate = fireDate notification.alertBody = body notification.userInfo = dict if let notifications = UIApplication.sharedApplication().scheduledLocalNotifications { notification.applicationIconBadgeNumber = notifications.count + 1 }else{ notification.applicationIconBadgeNumber = 1 } UIApplication.shared.scheduleLocalNotification(notification) }
- 取消通知(根据情况,不是必须的) 当需要发送本地通知的前提不存在时,可以取消本地通知:
func cancelLocalNotification(_ key: String, value: NSNumber) { let notifications = UIApplication.shared.scheduledLocalNotifications for notification in notifications! { if let userinfo = notification.userInfo { let dict = userinfo if dict[key] as! NSNumber == value { UIApplication.shared.cancelLocalNotification(notification) } } } }
注意
找到该Notification的方法是识别其userInfo的键值对。