iOS 远程通知(Remote Notification)和本地通知(Local Notification)
ios通知分为远程通知和本地通知,远程通知需要连接网络,本地通知是不需要的,不管用户是打开应用还是关闭应用,我们的通知都会发出,并被客户端收到
我们使用远程通知主要是随时更新最新的数据给用户,使用本地通知主要是提醒用户来完成一些任务
远程通知 Remote Notification:
其主要的工作原理为:客户端发送自己的UUID和Bundle ID给苹果的APNs服务器-->苹果的APNs服务器加密后返回一个deviceToken给客户端-->客户端拿到devideToken后将其发送给app公司提供的服务器-->此服务器将客户端的deviceToken存储到数据库-->当服务器要发送远程通知给客户端的时候,会在数据库中拿到此客户端的deviceToken-->发送数据到苹果的APNs服务器,然后再发送到客户端
远程通知是需要真机的,另外还需要去苹果开发者中心申请证书:真机调试证书,远程推送证书(要在哪台电脑上调试或发布哪个app),描述文件证书(哪台电脑利用哪个设备调试哪个app)
我们可以使用PushMebaby来模拟服务器,也可以利用第三方软件来发送通知如Jpush等
下面是代码的实现:
1 -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 2 { 3 if ([UIDevice currentDevice].systemVersion.doubleValue < 8.0){ // 小于ios8 4 5 UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeBadge; 6 7 // 系统自动发送UUID和Bundle ID到苹果APNs服务器 8 [application registerForRemoteNotificationTypes:type]; 9 }else{ // 大于等于ios8 10 11 UIUserNotificationType type = UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound; 12 13 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil]; 14 // 通知类型 15 [application registerUserNotificationSettings:settings]; 16 17 // 注册通知 18 [application registerForRemoteNotifications]; 19 } 20 21 // 可以获取到userInfo数据 22 NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsAnnotationKey]; 23 24 return YES; 25 } 26 27 // 获得deviceToken 28 - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 29 { 30 NSLog(@"%@",deviceToken); 31 } 32 33 // ios7之前调用,接收到远程通知的内容会调用 34 // 程序是打开状态,不管前台还是后台,会调用这个方法 35 // 如果程序是关闭状态不会调用这个,会调用application: didFinishLaunchingWithOptions: 36 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo 37 { 38 NSLog(@"%@",userInfo); 39 } 40 41 // ios7之后调用,如果接收到远程通知的内容会调用这个方法 42 - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler 43 { 44 // 这个方法需要调用这个block来通知系统更新UI界面 45 // UIBackgroundFetchResultNewData, 接收到数据 46 // UIBackgroundFetchResultNoData, 没有接收到数据 47 // UIBackgroundFetchResultFailed 接收数据失败 48 completionHandler(UIBackgroundFetchResultNewData); 49 50 }
本地通知 Local Notification
基本属性和方法:
属性:
- 指定通知发送的时间:NSDate *fireDate
- 指定发送通知的时区:NSTimeZone *timeZone
- 重复的周期: repeatInterval
- 通知内容:NSString *alertBody
- 锁屏状态的标题:NSString *alertAction
- 点击通知之后的启动图片:NSString *alertLaunchImage
- 收到通知播放的音乐:NSString *soundName
- 图标提醒数字:NSInteger applicationIconBadgeNumber
- 额外的信息:NSDictionary *userInfo
方法:
- 立即执行:- (void)presentLocalNotificationNow:(UILocalNotification *)notification
- 注册通知,根据指定发送时间执行:- (void)scheduleLocalNotification:(UILocalNotification *)notification
- 取消单个通知:- (void)cancelLocalNotification:(UILocalNotification *)notification
- 取消所有通知:- (void)cancelAllLocalNotifications
下面是代码实现:
1 // 创建本地通知对象 2 UILocalNotification *noti = [[UILocalNotification alloc] init]; 3 4 // 指定通知发送的时间10s 5 noti.fireDate = [NSDate dateWithTimeIntervalSinceNow:10.0f]; 6 // 指定时区 7 noti.timeZone = [NSTimeZone defaultTimeZone]; 8 // 指定通知内容 9 noti.alertBody = @"这是通知的内容"; 10 11 // 设置通知重复的周期(1分钟) 12 noti.repeatInterval = NSCalendarUnitSecond; 13 14 // 指定锁屏界面的信息 15 noti.alertAction = @"这是锁屏界面的信息"; 16 17 // 设置点击通知进入程序时候的启动图片 18 noti.alertLaunchImage = @"xxx"; 19 20 // 收到通知播放的音乐 21 noti.soundName = @"hehe.wav"; 22 23 // 设置应用程序的提醒图标 24 noti.applicationIconBadgeNumber = 99; 25 26 // 注册通知时可以指定将来点击通知之后需要传递的数据 27 noti.userInfo = @{@"dogName":@"xx1", 28 @"weight":@(20) 29 }; 30 31 // 注册添加通知 32 UIApplication *app = [UIApplication sharedApplication]; 33 [app scheduleLocalNotification:noti];
注意:在ios8中需要提前注册通知类型
1 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 2 // Override point for customization after application launch. 3 4 // 注意: 在iOS8中, 必须提前注册通知类型 5 if ([UIDevice currentDevice].systemVersion.doubleValue >= 8.0) { 6 UIUserNotificationType type = UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound; 7 UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:type categories:nil]; 8 // 注册通知类型 9 [application registerUserNotificationSettings:settings]; 10 } 11 } 12 13 // 接收到本地通知时就会调用,前台自动调用,后台点击通知后调用 14 - (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 15 { 16 NSLog(@"%@",notification.userInfo); 17 }
转载于:https://www.cnblogs.com/GeekStar/p/4468408.html
iOS 远程通知(Remote Notification)和本地通知(Local Notification)相关推荐
- iOS监听模式系列之本地通知Notification
本地通知 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段时候后不使用通常会提示用户使用此应用等都是本地通知.创建一个本地通知通常分为以下几 ...
- iOS实现本地通知(local notification)的方法
iOS 的本地通知(local notification)用于基于时间行为的通知,比如有关日历或者 todo 列表的小应用.另外应用如果在后台执行,iOS 允许它在受限的时间内运 行,它也会发现本地通 ...
- iOS开发之本地通知UILocalNotification
本地通知是UILocalNotification的实例,主要有三类属性: scheduled time:时间周期,用来指定iOS系统发送通知的日期和时间: notification type:通知类型 ...
- iOS开发---本地通知(UILocalNotification)
iOS中通知机制又叫消息机制,其包括两类:一类是本地通知:另一类是推送通知,也叫远程通知. 本地通知是由本地应用触发的,它是基于时间行为的一种通知形式,例如闹钟定时.待办事项提醒,又或者一个应用在一段 ...
- iOS远程推送原理及实现过程
该文章是我16年在公司博客上写的,除了证书注册的过程大致没有改变,像接收通知的方法都有所改变,所以将iOS 10 之后的接收通知及注册通知的方法在文章中补全,希望对正在处理远程推送的伙伴们有所帮助 一 ...
- iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送、本地推送
iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送 2015-05-03 14:12 3510人阅读 评论(0) 收藏 举报 本文章已收录于: iOS知识库 分类: [IO ...
- iOS中 本地通知/本地通知详解 韩俊强的博客
布局如下:(重点讲本地通知) iOS开发者交流QQ群: 446310206 每日更新关注:http://weibo.com/hanjunqiang 新浪微博 Notification是智能手机应用编 ...
- iOS 本地通知 操作
iOS 本地通知 操作 1:配置通知:然后退出程序: UILocalNotification *localNotif = [[UILocalNotification alloc] init]; loc ...
- [原]逆向iOS SDK -- “添加本地通知”的流程分析
观点: 代码面前没有秘密 添加通知的 Demo 代码 - (void)scheduleOneLocalNotification { [[UIApplication sharedApplication] ...
最新文章
- 大数据中台向AI中台演进是大势所趋?
- PostgreSQL-数据复制
- 3-无重复字符的最长子串(中等)
- 申请Let's Encrypt通配符HTTPS证书(转)
- ES6 generator
- oracle+表的更新日志,测试oracle插入 删除 更新表的日志开销
- Dune Analytics 发布 v2 版本,新增自动实时查询刷新
- java.lang.IllegalStateException: Failed to load ApplicationContext selenium 异常 解决
- Linux 网卡设备驱动程序设计(3)
- Docker 指定数据储存目录
- 机房重构(4)——触发器的使用
- 吉利嘉际车机安装第三方软件教程(2022年更新)
- 软件测试真实项目大全,真实案例-项目可用性测试总结
- ffmpeg实例,fade淡入淡出效果
- uniapp使用plus.sqlite实现图片、视频缓存到手机本地
- [译] 2019 前端性能优化年度总结 — 第五部分
- pboot 将编码转换为实体html_java转换 HTML字符实体,java特殊字符转义字符串
- goahead - 环境准备和基本使用
- 【深度学习】YOLOv7速度精度超越其他变体,大神AB发推,网友:还得是你!|开源...
- 计算机主机安全属性包括,计算机安全属性包括哪些