浅谈iOS Push 在iOS6/7/8/9中的进化

本文深入解析iOS设备上Push通知的工作原理及其在不同iOS版本中的变化。涵盖了从注册到接收消息的整个流程,以及开发人员如何处理不同版本iOS的API差异。

简介

        在iOS设备安装APP后,通常都会询问是否允许发送通知(下图),同意后,一般情况下用户都会收到某APP的push。比如,用户收到一条微博,他们喜欢的球队赢了比赛,或者他们的晚饭准备好了,既然APP不在运行,所以APP不能检查这些事件。    幸运的是Apple针对这些问题提供了解决方案。开发者可以写一个服务端的组建,替代客户端不停的检测或者在后台工作。


Push的原理        

push 消息走的APNs服务器,设备和APNs(Apple Push Notification Service)服务器之间建立了一个安全通道。关于push的原理,如下图,详细看这里


把图片翻译一下就是:

1. 客户端向 APNs注册一下,并获取token

2. APN是将token传给客户端

3. 客户端将token发给自己的Server

4. 在合适的时候,自己的Server给APNs发送push消息。

5. 最终APNs发送给客户端

iOS Push 在iOS6/7/8/9中的进化

那么随着iOS版本的进化,Push交互和功能也在变化

iOS6 (待补充)

iOS7 支持后台push,静默push。设备不显示,也不响铃,点击了解更多

 iOS7 app内获取系统->通知 具体函数是 [[UIApplication sharedApplication] enabledRemoteNotificationTypes]

iOS8 支持push的更多交互(比如快速回复、删除单个push等)

 iOS8 发布的时候(从那个时间点起),push的body体可以支持到2k了,以前是256B

 iOS8 app内获取系统->通知。具体函数是 [[UIApplication sharedApplication] currentUserNotificationSettings];

开发人员的接口的变化

/* 下面几个是iOS6/7/8上的接口,统一在- (void)application:didReceiveRemoteNotification:中处理*/
 方法1:- (void)application:didReceiveRemoteNotification://iOS6
 方法2: - (void)application:didReceiveRemoteNotification:fetchCompletionHandler://iOS7,iOS8
 方法3: - (void)application:handleActionWithIdentifier:forRemoteNotification:completionHandler://iOS8,9

一般应用有三种状态:
a)应用未启动;
b)应用已启动,但处于后台;
c)应用处于前台。
对于以上三种状态,iOS7,8,9 在收到消息通知后都会调用方法 2,这也符合官方文档的描述。
bug 然而对于 iOS 10.0.2,当应用处于 a 或 b 状态时,调用方法 1,当应用处于 c 状态时,调用方法 2。
另外:如果不做处理,iOS7上可以会遇到push重复的问题,解决办法点这里

开发过程中,程序员如何测试push

这里有php开发的一短代码(拷贝到文件以php后缀名)。需要你生成证书和provisionfile。这样可以用本机给iOS APP发送push了。里面用的的ck.pem需要自己生成。

Push需要注意的地方

● 自己Server发的每一条Push,客户端都会收到么?答案是否定的, Push是不可靠的,push通知是fire-and-forget,比如手机关机,那么自然就收不到,虽然Apple会尝试几次。
● iOS8发的时间点起,无论那个iOS系统,push消息的body大小调整为2k,注意这里是iOS8的时间点,也就是2014年秋, 就目前来说push的限制应该是2k不再是256了
● 测试Push的时候,区分好Appstore证书和开发证书。两者不能相互发Push
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值