IOS本地消息推送(UILocalNotification)

  IOS本地的Notification由iOS下NotificationManager统一管理,只需要将封装好的本地Notification对象加入到系统Notification管理机制队列中,系统会在指定的时间激发将本地Notification,应用只需设计好处理Notification的方法就完成了整个Notification流程了。

 IOS本地的Notification有UILocalNotification对象完成。它包括的主要属性有:fireDate、timeZone、repeatInterval、repeatCalendar、alertBody、 alertAction、hasAction、alertLaunchImage、applicationIconBadgeNumber、 soundName和userInfo。

   UILocalNotification的调度

  fireDate UILocalNotification的激发的确切时间。

 timeZone:确定UILocalNotification激发时间是否根据时区改变而改变,如果设置为nil的话,那么UILocalNotification将在一段时候后被激发,而不是某一个确切时间被激发。

 repeatInterval:是UILocalNotification被重复激发之间的时间差,不过时间差是完全根据日历单位(NSCalendarUnit)的,例如每周激发的单位,NSWeekCalendarUnit,如果不设置的话,将不会重复激发。

 repeatCalendar:是UILocalNotification重复激发所使用的日历单位需要参考的日历,如果不设置的话,系统默认的日历将被作为参考日历。

soundName:设置UILocalNotification消息推送时的声音,例如:UILocalNotificationDefaultSoundName,也可指定

UILocalNotification的提醒内容

 alertBody、alertAction、hasAction、alertLaunchImage

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)];

          }

posted @ 2015-06-25 15:10  奈何船夫  阅读(1008)  评论(0编辑  收藏  举报