@chenbinghua
2017-04-13T10:38:28.000000Z
字数 2366
阅读 1224
iOS笔记
注意:这里说的推送通知跟NSNotification有所区别
NSNotification是抽象的,不可见的
推送通知是可见的(能用肉眼看到)
iOS中提供了2种推送通知
本地推送通知(Local Notification)
远程推送通知(Remote Notification)
推送通知的使用细节
1.发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来
2.点击推送通知后,默认会自动打开发出推送通知的app
3.不管app打开还是关闭,推送通知都能如期发出
1.在AppDelegate申请推送权限
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 请求获取DeviceToken 分开iOS7和iOS8两种情况
if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
// 1.获取发送通知的权限
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
[application registerUserNotificationSettings:settings];
// 2.注册远程通知
[application registerForRemoteNotifications];
} else {
[application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
}
return YES;
}
2.启动本地通知
- (IBAction)fireNotification:(id)sender {
// 1.创建本地通知
UILocalNotification *localNote = [[UILocalNotification alloc] init];
// 2.设置本地通知的信息
// 2.1.设置提示信息
localNote.alertBody = @"吃饭了吗?";
// 2.2.设置通知弹出的时间
localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:2.0];
// 2.3.设置滑块显示的文字
localNote.alertAction = @"屌你老母";
// 2.4.是否让上面的文字生效
localNote.hasAction = YES;
// 2.5.设置通知中心的标题
localNote.alertTitle = @"小码哥哥";
// 2.6.设置通知的声音
localNote.soundName = @"buyao.wav";
// 2.7.设置应用程序图标右上角的数字
localNote.applicationIconBadgeNumber = 10;
// 2.8.设置点击通知的启动图片
localNote.alertLaunchImage = @"这里随便写都是显示启动图片";
// 3.调度通知
[[UIApplication sharedApplication] scheduleLocalNotification:localNote];
}
当用户点击本地推送通知,会自动打开app,这里有2种情况
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
}
return YES;
}
// app并没有关闭,一直隐藏在后台
// 让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
// 接收到本地通知 应用程序在进入前台,或者在前台的时候都会执行该方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
// 跳转到固定的界面
if (application.applicationState == UIApplicationStateInactive) {
// 进行页面的跳转
} else {
// 其他情况不需要跳转
}
}
// app已经被关闭(进程已死)
启动app,启动完毕会调用AppDelegate的下面方法
// launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
{
}