[关闭]
@chenbinghua 2017-04-13T10:38:28.000000Z 字数 2366 阅读 1224

iOS开发之本地推送通知

iOS笔记


注意:这里说的推送通知跟NSNotification有所区别
NSNotification是抽象的,不可见的
推送通知是可见的(能用肉眼看到)

iOS中提供了2种推送通知
本地推送通知(Local Notification)
远程推送通知(Remote Notification)

本地推送通知

推送通知的使用细节
1.发出推送通知时,如果当前程序正运行在前台,那么推送通知就不会被呈现出来
2.点击推送通知后,默认会自动打开发出推送通知的app
3.不管app打开还是关闭,推送通知都能如期发出

1.在AppDelegate申请推送权限

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. // 请求获取DeviceToken 分开iOS7和iOS8两种情况
  3. if ([[UIDevice currentDevice].systemVersion doubleValue] >= 8.0) {
  4. // 1.获取发送通知的权限
  5. UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
  6. [application registerUserNotificationSettings:settings];
  7. // 2.注册远程通知
  8. [application registerForRemoteNotifications];
  9. } else {
  10. [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound];
  11. }
  12. return YES;
  13. }

2.启动本地通知

  1. - (IBAction)fireNotification:(id)sender {
  2. // 1.创建本地通知
  3. UILocalNotification *localNote = [[UILocalNotification alloc] init];
  4. // 2.设置本地通知的信息
  5. // 2.1.设置提示信息
  6. localNote.alertBody = @"吃饭了吗?";
  7. // 2.2.设置通知弹出的时间
  8. localNote.fireDate = [NSDate dateWithTimeIntervalSinceNow:2.0];
  9. // 2.3.设置滑块显示的文字
  10. localNote.alertAction = @"屌你老母";
  11. // 2.4.是否让上面的文字生效
  12. localNote.hasAction = YES;
  13. // 2.5.设置通知中心的标题
  14. localNote.alertTitle = @"小码哥哥";
  15. // 2.6.设置通知的声音
  16. localNote.soundName = @"buyao.wav";
  17. // 2.7.设置应用程序图标右上角的数字
  18. localNote.applicationIconBadgeNumber = 10;
  19. // 2.8.设置点击通知的启动图片
  20. localNote.alertLaunchImage = @"这里随便写都是显示启动图片";
  21. // 3.调度通知
  22. [[UIApplication sharedApplication] scheduleLocalNotification:localNote];
  23. }

点击本地推送通知

当用户点击本地推送通知,会自动打开app,这里有2种情况

  1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  2. if (launchOptions[UIApplicationLaunchOptionsLocalNotificationKey]) {
  3. }
  4. return YES;
  5. }
  6. // app并没有关闭,一直隐藏在后台
  7. // 让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
  8. // 接收到本地通知 应用程序在进入前台,或者在前台的时候都会执行该方法
  9. - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
  10. {
  11. // 跳转到固定的界面
  12. if (application.applicationState == UIApplicationStateInactive) {
  13. // 进行页面的跳转
  14. } else {
  15. // 其他情况不需要跳转
  16. }
  17. }
  18. // app已经被关闭(进程已死)
  19. 启动app,启动完毕会调用AppDelegate的下面方法
  20. // launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象
  21. - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
  22. {
  23. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注