iOS问题解决(三):模拟器收不到UILocalNotification本地通知

通知功能是iOS应用开发经常会碰到的需求,iOS应用的通知分为本地通知和远程通知(即消息推送),Apple develop官网的API Guides对通知的开发有详细的介绍。

今天我碰到的问题是模拟器收不到本地通知,按照惯例,先上本地通知的代码:

    UILocalNotification *note = [[UILocalNotification alloc] init];
    note.alertBody = @"Hypnotize";
    note.fireDate = date; //这里date 变量是一个NSDate对象,从页面上的UIDatePicker对象上获取的
    note.applicationIconBadgeNumber = 1;
    [[UIApplication sharedApplication] scheduleLocalNotification:note];

原本以为这样就可以接收到通知了,结果一运行,始终看不到通知,过了通知的设定时间好久了,也看不到通知。查阅了下通知的用法文档,才知道需要去申请发送通知的授权。修正后的代码如下所示:

//判断是否已经授权用户发送通知
if ([[UIApplication sharedApplication] currentUserNotificationSettings].types != UIUserNotificationTypeNone) {
    UILocalNotification *note = [[UILocalNotification alloc] init];
    note.alertBody = @"Hypnotize";
    note.fireDate = date;//这里date 变量是一个NSDate对象,从页面上的UIDatePicker对象上获取的
    note.applicationIconBadgeNumber = 1;
    [[UIApplication sharedApplication] scheduleLocalNotification:note];
} else{
    //用户注册通知,注册后才能收到通知,这会给用户一个弹框,提示用户选择是否允许发送通知
    [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeBadge|UIUserNotificationTypeSound   categories:nil]];
}

用户注册通知后,会收到一个回调函数,一般如果未授权,创建通知就在这个回调函数里进行。

//用户注册通知回调函数
- (void)application:(UIApplication *) application
    didRegisterUserNotificationSettings:(UIUserNotificationSettings   *)notificationSettings {
     if (notificationSettings.types != UIUserNotificationTypeNone) {
         NSLog(@"haha");
        UILocalNotification *note = [[UILocalNotification alloc] init];
        note.alertBody = @"Hypnotize";
        note.fireDate = rvc.selectDate;
        note.applicationIconBadgeNumber = 1;
        [[UIApplication sharedApplication] scheduleLocalNotification:note];
    }
}

你可能感兴趣的:(iOS问题解决(三):模拟器收不到UILocalNotification本地通知)