iOS開發中經常用到本地通知,有時也叫做本地推送,兩者都是同一個類UILocalNotification,這個類可以用于開發者靈活控制一些需要推送到通知欄的資訊,比如提示資訊,日程提醒或者是一些其他應用資訊,它和遠端通知(也叫遠端推送,RemoteNotification)本質沒有多大差別,唯一差別在于發起的地方不同,本地通知在APP内發起,而遠端通知由遠端伺服器發起通過APNS推送到裝置,兩者展示的方式都一樣,都會出現在通知欄,都可以攜帶資訊。下面用通過三個步驟來講下本地通知的使用方法。
一、發起通知,也就是本地通知的初始化,需要注意的是iOS8及以後發起通知需要先進行一個注冊。
1 - (void)initializeLocalNotification {
2
3 // 初始化本地通知
4 UILocalNotification *notification = [[UILocalNotification alloc] init];
5 // 設定啟動時間
6 notification.fireDate = [[NSDate date] dateByAddingTimeInterval:15.0f];
7 // 設定時區
8 notification.timeZone = [NSTimeZone defaultTimeZone];
9 // 設定使用者資訊
10 notification.userInfo = @{
11 @"test":@"test",
12 };
13 // 通知欄提示資訊
14 notification.alertBody = @"this is a local notification";
15 // 通知音效
16 notification.soundName = UILocalNotificationDefaultSoundName;
17 // badgeNumber
18 notification.applicationIconBadgeNumber = 1;
19
20 // iOS8及以後需要添加這個注冊,才能得到授權
21 if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {
22 UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;
23 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type
24 categories:nil];
25 [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
26 }
27
28 // 調用通知
29 [[UIApplication sharedApplication] scheduleLocalNotification:notification];
30 }
模拟器也可以接受本地通知,效果如下:

二、接收通知,發起了通知,如果我們需要處理接收到的資訊,那麼需要在AppDelegate裡面作以下處理。
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
2
3 // 如果程式被kill掉,點選通知欄通知進入程式,那麼本地通知(遠端通知也是一樣)将從這裡接收
4 // 判斷是否有本地通知資訊,判斷遠端通知的Key為 UIApplicationLaunchOptionsRemoteNotificationKey
5 if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
6 [self dealLocalNotificationWithUserInfo:launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]];
7 }
8
9 return YES;
10 }
11
12 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
13
14 // 如果程式隻是挂起,或者是程式正在運作,那麼本地通知(遠端通知也類似,不過是在另外一個代理方法裡接收)将從這裡接受
15 [self dealLocalNotificationWithUserInfo:notification.userInfo];
16 }
17
18 /**
19 * 處理本地通知
20 *
21 * @param userInfo 通知内容
22 */
23 - (void)dealLocalNotificationWithUserInfo:(NSDictionary *)userInfo {
24
25 NSLog(@"receive localNotification - %@", userInfo);
26 }
列印出的效果如下:
三、取消通知,有時候我們需要取消已經schedule的本地通知,那麼就需要使用到:
1 - (void)cancelLocalNotification {
2
3 // 取消所有本地通知
4 [[UIApplication sharedApplication] cancelAllLocalNotifications];
5
6 // 取消特定本地通知
7 // 通過周遊的方式找到你想要取消的通知
8 for (UILocalNotification *notification in [UIApplication sharedApplication].scheduledLocalNotifications) {
9 // 判斷你需要取消的通知,本地的通知的很多屬性都可以用來判斷,啟動日期、userInfo、alertBody都可以
10 if ([notification.userInfo[@"test"] isEqualToString:@"test"]) {
11 [[UIApplication sharedApplication] cancelLocalNotification:notification];
12 }
13 }
14 }
Demo位址:https://github.com/LeoTangCN/LocalNotificationDemo
以上即是本次分享,多謝觀看!
轉載于:https://www.cnblogs.com/leotangcn/p/4973962.html