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