• iOS远程推送原理


    远程推送

    就是从远程server推送消息给client的通知。当然须要联网。

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

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

    传统获取数据的局限性是仅仅要用户关闭了app。就无法跟app的server沟通。无法从server上获得最新的数据内容

    而远程推送通知能够解决问题,无论用户打开还是关闭app,仅仅要联网了,都能接收到server推送的远程通知。

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

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

    典型的网络请求。

    tcp/ip协议:三次握手连接,仅仅要server或者client不主动断开。保持连接着。大概QQ聊天就是这样的协议了。


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

    A用户和B用户聊天:

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

    ->A将消息“在吗?”发送给QQserver,此时由于B与server也保持连接,因此server将消息发送给B,相同B的回复也反向传输成立。

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

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


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

    那我们就能够想到。A将消息发送给server时,server将消息发送给APNsserver的方式能够实现将消息发送给B了,那详细是怎么实现的呢?我们往下看:

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

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

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

    3.APNsserver收到消息后,找到B相应的DeviceToken,将消息“在吗?”发送给B的设备。


    那么另一个疑问。APNsserver将消息发送给B的设备。那怎么知道是QQclient呢?

    事实上说白了。这个事情就被DeviceToken包括了,当你获取DeviceToken时,苹果偷偷的将设备的UDID和APP和bundle identifier发送给苹果server。苹果server返回给你了DeviceToken。因此QQserver将消息+B的DeviceToken发送给苹果的APNsserver时,苹果已经知道了是哪个client了。


    ----end








  • 相关阅读:
    tp5 引入 没有命名空间的类库的方法(以微信支付SDK为例)
    VMware虚拟机安装黑苹果MacOS Mojave系统详细教程
    本文实例讲述了PHP7基于curl实现的上传图片功能-formdata格式上传图片
    宝板面板无法安装,宝塔无法更新安装插件,比如无法安装ftp插件,通过更换hosts指向就可以了
    destoon GBK版本dhtmlspecialchars函数 bug
    有以下40个迹象表明你还是PHP菜鸟
    对高访问量与庞大数据处理的网站系统结构分析
    加入收藏与设为首页JS兼容简易效果
    html让没有宽高限制的图片居中
    PHP识别url重写请求
  • 原文地址:https://www.cnblogs.com/mfmdaoyou/p/7210533.html
Copyright © 2020-2023  润新知