本地通知和推送通知

关于本地通知:

  • 在使用通知之前必须注册通知类型,如果用户不允许应用程序发送通知,则以后就无法发送通知,除非用户手动到iOS设置中打开通知。
  • 本地通知是有操作系统统一调度的,只有在应用退出到后台或者关闭才能收到通知。(注意:这一点对于后面的推送通知也是完全适用的。 )
  • 通知的声音是由iOS系统播放的,格式必须是Linear PCM、MA4(IMA/ADPCM)、µLaw、aLaw中的一种,并且播放时间必须在30s内,否则将被系统声音替换,同时自定义声音文件必须放到main boundle中。
  • 本地通知的数量是有限制的,最近的本地通知最多只能有64个,超过这个数量将被系统忽略。
  • 如果想要移除本地通知可以调用UIApplication的cancelLocalNotification:cancelAllLocalNotifications移除指定通知或所有通知。

在iOS中如果点击一个弹出通知(或者锁屏界面滑动查看通知),默认会自动打开当前应用。

由于通知由系统调度那么此时进入应用有两种情况:

①如果应用程序已经完全退出那么此时会调用- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions方法;

②如果此时应用程序还在运行(无论是在前台还是在后台)则会调用-(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification方法接收消息参数。

当然如果是后者自然不必多说,因为参数中已经可以拿到notification对象,只要读取userInfo属性即可。如果是前者的话则可以访问launchOptions中键为UIApplicationLaunchOptionsLocalNotificationKey的对象,这个对象就是发送的通知,由此对象再去访问userInfo。

关于推送通知:

和本地通知不同,推送通知是由应用服务提供商发起的,通过苹果的APNs(Apple Push Notification Server)发送到应用客户端。下面是苹果官方关于推送通知的过程示意图:

推送通知的过程可以分为以下几步:

  1. 应用服务提供商从服务器端把要发送的消息和设备令牌(device token)发送给苹果的消息推送服务器APNs。
  2. APNs根据设备令牌在已注册的设备(iPhone、iPad、iTouch、mac等)查找对应的设备,将消息发送给相应的设备。
  3. 客户端设备将接收到的消息传递给相应的应用程序,应用程序根据用户设置弹出通知消息。

1.应用程序注册APNs推送消息。

说明:

a.只有注册过的应用才有可能接收到消息,程序中通常通过UIApplication的registerUserNotificationSettings:方法注册,iOS8中通知注册的方法发生了改变,如果是iOS7及之前版本的iOS请参考其他代码。

b.注册之前有两个前提条件必须准备好:开发配置文件(provisioning profile,也就是.mobileprovision后缀的文件)的App ID不能使用通配ID必须使用指定APP ID并且生成配置文件中选择Push Notifications服务,一般的开发配置文件无法完成注册;应用程序的Bundle Identifier必须和生成配置文件使用的APP ID完全一致。

2.iOS从APNs接收device token,在应用程序获取device token。

说明:

a.在UIApplication的-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken代理方法中获取令牌,此方法发生在注册之后。

b.如果无法正确获得device token可以在UIApplication的-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error代理方法中查看详细错误信息,此方法发生在获取device token失败之后。

c.必须真机调试,模拟器无法获取device token。

3.iOS应用将device token发送给应用程序提供商,告诉服务器端当前设备允许接收消息。

说明:

a.device token的生成算法只有Apple掌握,为了确保算法发生变化后仍然能够正常接收服务器端发送的通知,每次应用程序启动都重新获得device token(注意:device token的获取不会造成性能问题,苹果官方已经做过优化)。

b.通常可以创建一个网络连接发送给应用程序提供商的服务器端, 在这个过程中最好将上一次获得的device token存储起来,避免重复发送,一旦发现device token发生了变化最好将原有的device token一块发送给服务器端,服务器端删除原有令牌存储新令牌避免服务器端发送无效消息。

4.应用程序提供商在服务器端根据前面发送过来的device token组织信息发送给APNs。

说明:

a.发送时指定device token和消息内容,并且完全按照苹果官方的消息格式组织消息内容,通常情况下可以借助其他第三方消息推送框架来完成。

5.APNs根据消息中的device token查找已注册的设备推送消息。

说明:

a.正常情况下可以根据device token将消息成功推送到客户端设备中,但是也不排除用户卸载程序的情况,此时推送消息失败,APNs会将这个错误消息通知服务器端以避免资源浪费(服务器端此时可以根据错误删除已经存储的device token,下次不再发送)。

时间: 2024-08-25 07:35:21

本地通知和推送通知的相关文章

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送、本地推送

iOS开发 - ANPs推送通知 标签: 推送通知ANPs远程推送本地推送 2015-05-03 14:12 3510人阅读 评论(0) 收藏 举报 本文章已收录于:  iOS知识库  分类: [IOS -事件响应者链](3)  版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可见的 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(L

推送通知

推送通知的作用: 可以让不在前台运行的app 告知用户app内部发生了什么事情 推送通知的呈现效果: 1.在屏幕顶部显示一条横幅 2.在屏幕中间弹出一个UIAlertView 3.锁屏状态下也可以呈现 4.呈现推送通知的同时还可以更新app图标的数字 5.播放音效 用户接收的通知 都会展示在通知中心  如何打开通知中心:从屏幕顶部往下滑 就可以打开通知中心 推送通知的呈现效果设置: 1.显示横幅还是UIAlerView 取决于用户的设置 2.用户也可以决定是否要开启以下4个功能: 是否显示app

简析推送通知概念

一.远程推送通知 远程推送服务,又称为APNs(Apple Push Notification Services).简单推送流程如下: 二.极光推送通知 JPush iOS Push 包括 2 个部分,APNs 推送(代理),与 JPush 应用内消息. 1.APNs 推送,JPush 代理开发者的应用(需要基于开发者提供的应用证书),向苹果 APNs 服务器推送.由 APNs Server 推送到 iOS 设备上. 2.JPush 应用内推送部分,即 App 启动时,内嵌的 JPush SDK

iOS开发 - ANPs推送通知

推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可见的 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(Local Notification) 远程推送通知(Remote Notification) 推送通知的呈现效果总结 总结一下,推送通知有5种不同的呈现效果 在屏幕顶部显示一块横幅(显示具体内容) 在屏幕中间弹出一个UIAlertView(显示具体内容) 在锁屏界面显示一块横幅(锁屏状态下,显示具体内

移动设备和SharePoint 2013 - 第3部分:推送通知

博客地址:http://blog.csdn.net/foxdave 原文地址 在该系列文章中,作者展示了SharePoint 2013最显著的新功能概观--对移动设备的支持. 该系列文章: 移动设备和SharePoint 2013 - 第1部分:概述 移动设备和SharePoint 2013 - 第2部分:设备管道和SharePoint页面模型 推送通知 可以在SharePoint站点启用推送通知服务来发送设备更新如瓷砖或吐司通知到Windows Phone设备. 通知包含发生在网站的事件,比如

本地推送通知UILocalNotification

1 - (IBAction)schedule { 2 // 1.创建本地推送通知对象 3 UILocalNotification *ln = [[UILocalNotification alloc] init]; 4 5 // 2.设置通知属性 6 // 音效文件名 7 ln.soundName = @"buyao.wav"; 8 9 // 通知的具体内容 10 ln.alertBody = @"重大新闻:xxxx xxxx被调查了...."; 11 12 // 锁

本地推送通知在iOS8上的不同

iOS8的不同点 你如果把上面的程序运行在iOS8上,会爆出如下错误 预习01-本地推送通知[掌握][615:7847] Attempting to schedule a local notification {fire date = Monday, July 13, 2015 at 9:02:25 AM China Standard Time, time zone = (null), repeat interval = 0, repeat count = UILocalNotification

本地推送通知小demo

本地推送通知: #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // 在iOS8之后,Apple对用户隐私要求更加严格,所

本地推送通知界面跳转demo

本地推送通知界面跳转demo: /* 1.在发送本地通知的时候,通过userInfo属性来指示跳转到那个界面 2.监听本地通知的接收 1.当收到本地通知就会调用该代理方法 调用场景 1.如果应用程序在后台,当点击通知的时候 2.如果应用程序在前台,一旦收到本地通知,就会调用该方法 所以:判断如果应用程序在前台时候,不要执行界面跳转,来提高用户体验 3.如果应用程序被杀死了,那么这个方法就不再执行了 //- (void)application:(UIApplication *)applicatio