local/romote_notification
2015-06-29 09:10
218 查看
Local/Romote_Notification
Apple 关于本地通知和远程通知的官方文档简介
远程通知(remote notification)和本地通知(local notification)是两种用户通知类型,远程通知又称为推送通知(push notification)。这两种通知都可以实现当不在前台运行的APP通知使用该APP的用户新信息,这消息可以是消息,临近的日历,或来自远端服务器的新数据等。当操作系统呈现这些通知时,可以显示一个alert提醒或是app icon提醒。在提醒的时候也可以有声音的提示。当用户点击通知时可以启动APP查看通知详情,也可选择不打开APP忽略通知。
注意
不管是远程通知合适本地通知都与广播通知(NSNotificationCenter)和KVO(key value observe)无关。
本地通知
Xcode 6本地通知接收不到
出现提示信息:Attempting to schedule a local notification
with an alert but haven’t received permission from the user to display alerts
with a sound but haven’t received permission from the user to play sounds
原因在于在iOS8系统上需要注册本地通知,这样才能正常使用
iOS8注册本地通知
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) { [application registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeSound | UIUserNotificationTypeBadge | UIUserNotificationTypeAlert categories:nil]]; } return YES; } - (IBAction)registerLocationNotification:(id)sender { UILocalNotification *locationNotification = [[UILocalNotification alloc]init]; NSDate *date = [NSDate dateWithTimeIntervalSinceNow:5]; locationNotification.fireDate = date; locationNotification.timeZone = [NSTimeZone defaultTimeZone]; locationNotification.repeatInterval = NSCalendarUnitSecond; locationNotification.alertBody = @"通知来了。。。"; locationNotification.alertAction = @"通知"; locationNotification.alertLaunchImage = @"3.png"; locationNotification.userInfo = @{@"user":@"lfx"}; locationNotification.soundName = @"sound.caf"; locationNotification.applicationIconBadgeNumber = 10; [[UIApplication sharedApplication]scheduleLocalNotification:locationNotification]; }
回调方法
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification{ //取消通知的注册 [application cancelLocalNotification:notification]; }
远程通知(Push通知)
APNS推送机制(Apple Push Notification Service)
image1
Provider:程序的后台服务器。
上图分为三阶段:
第一阶段:应用程序的服务器端把要发送的消息、目的iPhone的标识打包,发给APNS。
第二阶段:APNS在自身的已注册Push服务的iPhone列表中,并把消息发送到iPhone。
第三阶段:iPhone把发来的消息传递给应用程序,并按照规定弹出Push通知。
APNS推送通知的详细流程
image2
1.APP注册APNS消息推送,iOS向APNS Server 请求获取device token
2.APNS向APP发送device token ,APP接受device token
3.APP向程序的服务器端发送device token
4.程序服务器端发送Push通知到APNS
5.APNS向APP发送Push通知
远程推送操作过程
1.APP启动过程中,注册远程通知
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert| UIRemoteNotificationTypeSound];
1.若注册成功,回调方法
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ NSLog(@"%@", deviceToken); }
1.App获取device token 后,将device token 发送到自己的服务端。
2.APNS服务器得到JSON串后,向App发送通知消息,App调用回调方法
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ NSLog(@"%@", userInfo);//从userInfo获得推送信息内容 }
客户端的开发
cer文件 provisioning文件的生成下载生成的cer文件和provi文件,双击导入Xcode,在build setting中code signing一栏中选择这两个文件的名称,这样就可以将支持push的app部署到真机中。然后消息推送:
客户端对推送消息的处理分为两种情况
1.在App没有运行的情况下,系统受到推送消息,用户点击推送消息,启动App。此时,不会执行前面提到的didReceiveRemoteNotification方法,而是App的applicationDidFinishLaunching方法中进行推送处理,通过以下代码可以获取推送消息中数据:Dictionary *userInfo =[launchOptions objectForKey:UIApplicationLaunchOp
tionsRemoteNotificationKey];
2.当App处于前台,系统受到推送消息,此时系统不会推送消息提示,会直接触发application:(UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo方法,推送数据在userInfo中。
当App处于后台时,如果系统收到推送消息时,当用户点击推送消息时,会执行application: (UIApplication )application didReceiveRemoteNotification:(NSDictionary )userInfo方法,此时AppDelegate中方法的执行顺序为:applicationWillEnterForeground,applicationWillEnterForeground,applicationDidBecomeActive
相关文章推荐
- ipvsadm 命令积累
- 欢迎使用CSDN-markdown编辑器
- JPA注解之“@GeneratedValue”详解
- .NET平台开源项目速览(7)关于NoSQL数据库LiteDB的分页查询解决过程
- map模块使用方法
- C语言常用字符串处理函数
- web app开发
- Android 动态加载(防止逆向编译)技术
- 作业6.12
- .NET平台开源项目速览(6)FluentValidation验证组件介绍与入门(一)
- 约瑟夫环问题
- Linux管理员必须知道的sudo命令
- setup github's blog
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
- 《实体解析与信息质量》 - 2.2.0 总结
- Gradle 1.12用户指南翻译——第三十四章. JaCoCo 插件
- .ftl文件 是什么文件 Freemarker
- [转]加快npm的下载速度
- 【Spring学习笔记-MVC-12】Spring MVC视图解析器之ResourceBundleViewResolver
- js报错 版本问题