iOS UILocationNotification 本地通知

1.註冊本地通知

/** 註冊本地通知 */
- (void)registerUserNotification {
    // 判讀系統版本是否是“iOS 8.0”以上
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0 ||
        [UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {

        // 定義用戶通知類型(Remote.遠程 - Badge.標記 Alert.提示 Sound.聲音)
        UIUserNotificationType types = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound;

        // 定義用戶通知設置
        UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:nil];

        // 註冊用戶通知 - 根據用戶通知設置
        [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
    }
}

2.創建一個本地通知

NSInteger time = _textField.text.integerValue;
    UILocalNotification *localNotification = [[UILocalNotification alloc] init];
    if (localNotification) {
        // 使用本地時區
        localNotification.timeZone = [NSTimeZone defaultTimeZone];
        //設置觸發通知時間
        localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:time];
        //通知參數
        localNotification.userInfo = @{@"type":[NSString stringWithFormat:@"test:%ld",(long)time],@"time":@(time)};;
        //通知聲音
        localNotification.soundName = UILocalNotificationDefaultSoundName;
        //通知內容
        localNotification.alertBody = @"test";

        localNotification.repeatInterval = 0;//不重複
        //註冊通知
        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];

    }

3.收到本地通知

  1. 如果應用在前臺,會在- (void)application:(UIApplication )application didReceiveLocalNotification:(UILocalNotification )notification 中收到通知。
  2. 如果應用是關閉或者在後臺,會在狀態欄收到通知。
    通過點擊狀態欄通知打開應用,在- (BOOL)application:(UIApplication )application didFinishLaunchingWithOptions:(NSDictionary )launchOptions 中,通過
    UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

    可以獲取本地通知信息。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [self registerUserNotification];
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

    //本地通知處理
    UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];
    if ([localNotification isKindOfClass:[UILocalNotification class]]) {
    //---1
        NSLog(@"通知內容1%@",localNotification);
//        [[UIApplication sharedApplication] scheduleLocalNotification:localNotification];
    }

    [self p_showBtnAction];

    return YES;
}

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
    if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
    //-----2
        NSLog(@"收到本地通知");
    }else if ([UIApplication sharedApplication].applicationState == UIApplicationStateActive){
    //----3
        AudioServicesPlaySystemSound(1007);
    }

    NSString * msg = [[NSString alloc] initWithFormat:@"%@-%lu-%@",notification.userInfo,(unsigned long)notification.repeatInterval,notification.repeatCalendar ];
    UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"通知" message:msg delegate:nil cancelButtonTitle:@"確定" otherButtonTitles:nil, nil];
    [alertView show];
    NSLog(@"收到通知:%@",notification);

    NSLog(@"=============");
    [self p_showBtnAction];

}

在1 的地方可以處理本地通知,進行頁面跳轉等操作;

如果不在1的地方處理,可以調用[[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 這樣didReceiveLocalNotification會被調用。

在2的地方表示點擊了狀態欄的通知消息,可在此進行操作。

在3的地方添加聲音提示,應用在前臺時收到本地通知會被調用。

需要注意的地方

  1. for (UILocalNotification* noti in [UIApplication sharedApplication].scheduledLocalNotifications) {
    NSLog(@"通知:%@",noti);
    }

    可遍歷所有本地通知。

  2. 如果 localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:0];立即通知的,通知不會加入到 [UIApplication sharedApplication].scheduledLocalNotifications數組中。

  3. 走到didReceiveLocalNotification的通知,會自動從[UIApplication sharedApplication].scheduledLocalNotifications數組中刪除。
  4. 4.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章