IOS本地的Notification由iOS下NotificationManager统一管理,只须要将封装好的本地Notification对象加入到系统Notification管理机制队列中,系统会在指定的时间激发将本地Notification,应用只需设计好处理Notification的方法就完成了整个Notification流程了。数组
IOS本地的Notification有UILocalNotification对象完成。它包括的主要属性有:fireDate、timeZone、repeatInterval、repeatCalendar、alertBody、 alertAction、hasAction、alertLaunchImage、applicationIconBadgeNumber、 soundName和userInfo。app
UILocalNotification的调度ui
fireDate: UILocalNotification的激发的确切时间。spa
timeZone:肯定UILocalNotification激发时间是否根据时区改变而改变,若是设置为nil的话,那么UILocalNotification将在一段时候后被激发,而不是某一个确切时间被激发。设计
repeatInterval:是UILocalNotification被重复激发之间的时间差,不过期间差是彻底根据日历单位(NSCalendarUnit)的,例如每周激发的单位,NSWeekCalendarUnit,若是不设置的话,将不会重复激发。对象
repeatCalendar:是UILocalNotification重复激发所使用的日历单位须要参考的日历,若是不设置的话,系统默认的日历将被做为参考日历。队列
soundName:设置UILocalNotification消息推送时的声音,例如:UILocalNotificationDefaultSoundName,也可指定开发
UILocalNotification的提醒内容it
alertBody、alertAction、hasAction、alertLaunchImage。io
alertBody:推送内容。
applicationIconBadgeNumber:角标数字。
alertAction:待机界面的滑动动做提示
//设置userinfo 方便在以后须要撤销的时候使用
userinfo同时也是:绑定到通知上的其余附加信息
NSDictionary *infoDic = [NSDictionary dictionaryWithObject:@"name" forKey:@"key"];
noti.userInfo = infoDic;
添加一个本地推送
//添加推送到uiapplication
UIApplication *app = [UIApplication sharedApplication];
[app scheduleLocalNotification:noti];
取消一个本地推送
UIApplication *app = [UIApplication sharedApplication];
//获取本地推送数组
NSArray *localArr = [app scheduledLocalNotifications];
//声明本地通知对象
UILocalNotification *localNoti;
if (localArr) {
for (UILocalNotification *noti in localArr) {
NSDictionary *dict = noti.userInfo;
if (dict) {
NSString *inKey = [dict objectForKey:@"key"];
if ([inKey isEqualToString:key]) {
if (localNoti){
[localNoti release];
localNoti = nil;
}
localNoti = [noti retain];
break;
}
}
}
//判断是否找到已经存在的相同key的推送
if (!localNoti) {
//不存在 初始化
localNoti = [[UILocalNotification alloc] init];
}
if (localNoti && !state) {
//不推送 取消推送
[app cancelLocalNotification:localNoti];
[localNoti release];
return;
}
}
设置提醒角标
[UIApplication sharedApplication].applicationIconBadgeNumber=0;
这个0能够随意设置。开发人员根据状况去处理。
两种方式取消注册的本地通知,一种是取消指定的通知,第二种是取消全部的注册通知:
[[UIApplication sharedApplication] cancelLocalNotification:localNotification];
[[UIApplication sharedApplication] cancelAllLocalNotification];
注册消息通知:
if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0)
{
// iOS 8 Notifications
[application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
[application registerForRemoteNotifications];
}
else
{
// iOS < 8 Notifications
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];
}