iOS远程推送原理

远程推送

就是从远程服务器推送消息给客户端的通知,当然需要联网。

远程推送服务APNs (Apple Push NotificationServices)

 

为什么需要远程推送通知?

传统获取数据的局限性是只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容

而远程推送通知可以解决这个问题,不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知。

我们先从网络连接开始了解下。

http协议:是个短连接,一个请求一个响应就结束了。典型的网络请求。

tcp/ip协议:三次握手连接,只要服务器或者客户端不主动断开,保持连接着。大概QQ聊天就是这种协议了。


推送,我们从QQ聊天着手吧。

A用户和B用户聊天:

1.A和B用户同时在线,跟服务器保持连接状态下:“A发送消息给B:在吗?,B回复:在的。”我们分析下这个过程。

->A将消息“在吗?”发送给QQ服务器,此时因为B与服务器也保持连接,因此服务器将消息发送给B,同样B的回复也反向传输成立。

2.A发送消息给B,但B不在线。

->这种情况下,服务器无法将A的消息发送给B了。那我们手机不在线的情况下是怎么收到A的消息的?


那我们就不得不拿出来神器远程推送了。远程推送是通过苹果的APNs服务器来实现的。只要你的苹果设备联网状态,你的设备就与苹果的APNs服务器保持一个长连接状态。

那我们就可以想到,A将消息发送给服务器时,服务器将消息发送给APNs服务器的方式可以实现将消息发送给B了,那具体是怎么实现的呢?我们往下看:

1. A与B安装QQ客户端,登录自己的QQ号码时,A和B将自己的QQ号码+苹果设备的DeviceToken发送给QQ服务器,QQ服务器将这一组数据保存在自己的数据库中。

获取DeviceToken方法,在AppDelegate.m中:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
}
2.A将消息“在吗?”发送给B时,服务器发现B不在线,这时,服务器从数据库中查找B对应的DeviceToken,将B的DeviceToken+消息“在吗?”发送给APNs服务器。

3.APNs服务器收到消息后,找到B对应的DeviceToken,将消息“在吗?”发送给B的设备。


那么还有一个疑问,APNs服务器将消息发送给B的设备,那怎么知道是QQ客户端呢?

其实说白了,这个事情就被DeviceToken包含了,当你获取DeviceToken时,苹果偷偷的将设备的UDID和APP和bundle identifier发送给苹果服务器,苹果服务器返回给你了DeviceToken,因此QQ服务器将消息+B的DeviceToken发送给苹果的APNs服务器时,苹果已经知道了是哪个客户端了。


----end








  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值