天天看點

iOS開發——本地通知,本地推送(UILocalNotification)

  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 }      

模拟器也可以接受本地通知,效果如下:

iOS開發——本地通知,本地推送(UILocalNotification)
iOS開發——本地通知,本地推送(UILocalNotification)

二、接收通知,發起了通知,如果我們需要處理接收到的資訊,那麼需要在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 }      

列印出的效果如下:

iOS開發——本地通知,本地推送(UILocalNotification)

三、取消通知,有時候我們需要取消已經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