通知功能是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];
}
}
网友评论