iOS LocalNotification 相关

iOS 10 以下系统:

1. 添加通知:

几种触发方式:
UNPushNotificationTrigger 通过 APNs 服务发来的推送自动创建 
UNTimeIntervalNotificationTrigger 定时触发 
UNCalendarNotificationTrigger 定期触发 
UNLocationNotificationTrigger 定位触发 
// 设置每一周的某一天弹出通知
  let notification = UILocalNotification()
            notification.alertBody = R.string.localize.heyItSTimeToWorkout()
            notification.timeZone = NSTimeZone.default
    
            let calendar = NSCalendar.autoupdatingCurrent
            var components = calendar.dateComponents([ .year, .weekOfYear], from: Date())
            components.hour = localNotificationModel.hour
            components.minute = localNotificationModel.minute
            components.weekday = localNotificationModel.weekday
            
            notification.repeatInterval = .weekOfYear
            
            let date = NSCalendar.current.date(from: components)
            print("localNotificationModel.weekday___\(localNotificationModel.weekday)____fireDate________\(String(describing: date))")
            notification.fireDate = date
            notification.userInfo = ["identifier": localNotificationModel.recordID]
            UIApplication.shared.scheduleLocalNotification(notification)

2. 移除通知:

            guard let notifications = UIApplication.shared.scheduledLocalNotifications else {
                return
            }

            for notification in notifications {
                guard let userInfo = notification.userInfo else {
                    continue
                }
                
                if (userInfo["identifier"] as? String ) ?? "" == identifer {
                    UIApplication.shared.cancelLocalNotification(notification)
                    break
                }
            }

3. 移除全部还未触发的通知:

UIApplication.shared.cancelAllLocalNotifications()

iOS 10以上版本系统

1. 添加通知:

if #available(iOS 10.0, *) {
            var components = DateComponents()
            components.hour = localNotificationModel.hour
            components.minute = localNotificationModel.minute
            components.weekday = localNotificationModel.weekday
            let trigger = UNCalendarNotificationTrigger(dateMatching: components, repeats: true)
            let content = UNMutableNotificationContent()

            content.body = R.string.localize.heyItSTimeToWorkout()
            let request = UNNotificationRequest(identifier: localNotificationModel.recordID, content: content, trigger: trigger)
            UNUserNotificationCenter.current().add(request) { (error) in
                print("error==\(error.debugDescription)" )
            }
        }

2. 移除通知:

 if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().removePendingNotificationRequests(withIdentifiers: [identifer])
        }

3. 移除全部还未触发的通知:

UNUserNotificationCenter.current().removeAllPendingNotificationRequests()

需要注意的问题:

1. 通知的添加一定要设置 alertBody,不然通知无法显示
2. 在iOS 10中,用同一个 identifier 添加多次通知,这时候永远是最后一个有效,也就是说后面添加的会覆盖前面添加的; 但是 在 iOS 10以下,同一个 identifier 添加多次通知,只要 Notification触发的时间设置的不一样,后面添加的就不会覆盖前面添加的,所以会添加多个通知。这是一个坑.
3.一个坑点: APP可以删除,但是设置的通知并不会被删除

APP设置通知之后,如果你没有把通知移除掉,这时候你把APP删除,重新安装之后,你之前设置的通知依旧会出现在新安装的APP之中,系统保留了这些通知的信息。

调试:

//获取已添加的通知队列中,待触发的通知信息
func getPendingNotificationRequests(){
        #if DEBUG
            if #available(iOS 10.0, *) {
                UNUserNotificationCenter.current().getPendingNotificationRequests { (notificationReqeusts) in
                    print("notificationReqeusts.count____\(notificationReqeusts.count)")
                    for request in notificationReqeusts {
                        let trigger = request.trigger as! UNCalendarNotificationTrigger
                        let nextTriggerDate = trigger.nextTriggerDate()
                        print("nextTriggerDate____\(String(describing: nextTriggerDate))")
                        
                    }
                }
            } else {
                
               let  notifications = UIApplication.shared.scheduledLocalNotifications
                print("notifications.count_______\(String(describing: notifications?.count))")
                for notification in notifications! {
                    print("nextTriggerDate______\(notification.fireDate)")
                }
            }
        #endif
    }

我 18:49 添加了7个通知打印输出如下:

nextTriggerDate____2017-05-21 10:49:00 +0000
nextTriggerDate____2017-05-22 10:49:00 +0000
nextTriggerDate____2017-05-16 10:49:00 +0000
nextTriggerDate____2017-05-17 10:49:00 +0000
nextTriggerDate____2017-05-18 10:49:00 +0000
nextTriggerDate____2017-05-19 10:49:00 +0000
nextTriggerDate____2017-05-20 10:49:00 +0000

发现输出的通知触发时间和我添加通知的时间刚好相差8h,这是时区的问题,那么应该如何解决这个问题呢?答案是不需要处理,经过验证发现,通知触发时间依然会是你添加通知的时间,而不是你打印的通知信息的那个时间,原因估计是系统做过处理了

其他在查资料的过程中的一些零碎有用信息:

更新和取消通知

1.取消已展示的推送
[notificationCenter removeDeliveredNotificationsWithIdentifiers:@[requestIdentifier]];

2.取消未展示的推送

[notificationCenter removePendingNotificationRequestsWithIdentifiers:@[requestIdentifier]];

3.更新

// 无论显示还是未显示的通知想要更新只需要新建一个 UNNotificationRequest 将 requestIdentifier 设置成想替换的通知标识就可以完成替换

DeviceToken变化

DeviceToken不仅仅系统升级的时候会改变,系统重刷,应用删除再安装,DeviceToken都会改变

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容