iOS 本地通知

若是用戶長時間沒有使用咱們的APP,咱們就須要提醒用戶來使用。這個本地通知就能夠作到。java

先說明一下個人解決思路:在AppDelegate裏面寫app

1,當用戶退出app時建立一個通知,必定時間後調用,好比10秒。spa

 
//進入後臺響應的方法 - (void)applicationDidEnterBackground:(UIApplication *)application { // 初始化本地通知對象 UILocalNotification *notification = [[UILocalNotification alloc] init]; if (notification) { // 設置通知的提醒時間 NSDate *currentDate = [NSDate date]; notification.timeZone = [NSTimeZone defaultTimeZone]; // 使用本地時區 notification.fireDate = [currentDate dateByAddingTimeInterval:10]; // 設置提醒的文字內容 notification.alertBody = @"您一週都沒有關注寶寶了,快來看看!"; notification.alertAction = NSLocalizedString(@"關心寶寶", nil); // 通知提示音 使用默認的 notification.soundName= UILocalNotificationDefaultSoundName; // 設置應用程序右上角的提醒個數 notification.applicationIconBadgeNumber++; // 設定通知的userInfo,用來標識該通知  NSDictionary *dict =[NSDictionary dictionaryWithObjectsAndKeys:@"notification",@"nfkey",nil]; [notification setUserInfo:dict]; // 將通知添加到系統中  [[UIApplication sharedApplication] scheduleLocalNotification:notification]; } }
 

2,在收到通知,點擊進入應用的時候取消通知,講外面顯示的數字賦值爲0,application.applicationIconBadgeNumber=0;code

didReceiveLocalNotification是app在前臺運行,通知時間到了,調用的方法。若是程序在後臺運行,時間到了之後是不會走這個方法的。對象

applicationDidBecomeActive是app在後臺運行,通知時間到了,你從通知欄進入,或者直接點app圖標進入時,會走的方法。blog

 
- (void)applicationDidBecomeActive:(UIApplication *)application { application.applicationIconBadgeNumber=0; }
 
 
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ application.applicationIconBadgeNumber=0; //取消通知 for (UILocalNotification *noti in [application scheduledLocalNotifications]) { NSString *notiID = [noti.userInfo objectForKey:@"nfkey"]; if ([notiID isEqualToString:@"notification"]) { [application cancelLocalNotification:noti]; } } }
 

3,當用戶在沒收到通知進入應用的時候取消通知。緣由:當你第一次退出程序,就會建立一個通知a,10秒後推送,若是在這10秒內,從新登陸退出又 會建立 新的通知b,那麼咱們會連續收到兩個通知。爲了不重複,在通知a時間尚未到狀況下登陸app咱們就取消通知a,退出時建立通知b。it

- (void)applicationWillEnterForeground:(UIApplication *)application { //取消全部通知  [application cancelAllLocalNotifications]; }

 

若是想要重複調用這個通知,io

// 設置重複間隔class

  notification.repeatInterval = kCFCalendarUnitDay;
相關文章
相關標籤/搜索