iOS推送原理详解

iOS推送原理详解,第1张

1.APNS的推送机制

首先我们看一下苹果官方给出的对ios推送机制的解释。如下图

Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器。

上图可以分为三个阶段:

APNS推送通知的详细工作流程

下面这张图是说明APNS推送通知的详细工作流程:

根据图片我们可以概括一下:

1. 什么是远程消息推送?

3. 实现消息推送的步骤

总结下大致流程

1.设备打开某个App后,会生成唯一的 一个token ,并把这个token上传给我们自己的服务器,我们的服务器有了token,就可以向我们的app推送通知了,这个是前提。但是这个通知并不能直接推送给我们的设备,而是要推送给苹果的服务器。

2.我们的服务器会将token和推送的内容,一起推送给苹果的服务器。

3.苹果服务器会根据token定位到设备,将push推送给设备。

4.设备拿到这个push,就会知道是哪个app。然后就可以将这个通知推送到具体的app。

推送的实现方式: 

想要收到推送消息 ,就必须要有后台服务器(下面的1、2)往 苹果的APNs的服务器发请求。 

1、公司自己开发后台服务器程序 

2、 采用第三方的后台服务程序,比如:百度云推送、极光推送、友盟推送

前言 :问题最终的解决办法很简单,主要是记录分析解决问题的过程

今天下午在模拟器上适配iPhoneX时一切正常,切换真机运行时突然所有的页面都加载不出来,同时极光推送打印一大堆log(忘记截图),什么DNS解析失败,udp scoket失败,巴拉巴拉一大串,主要意思就是服务器连接失败。由于所有页面都加载不出来,检查网络请求,发现所有请求都是超时:Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." 。当时第一反应就是公司服务器挂掉了(捂脸,想的好多)!赶紧拿出自己手机打开线上app,发现线上的没问题(额,好像服务器没挂)。

既然服务器没挂,开始排查问题。首先再次切换到模拟器运行,依然正常运行没有问题,由于Xcode模拟器不支持推送,而测试机上运行的时候有一大堆的失败log,基本确定是推送的问题。

推送的原理主要分为以下几步:

1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送。

2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UDID。

3.APNs根据设备的UDID和App的Bundle Id生成deviceToken再发回给App。

4.App再将deviceToken发送给远程推送服务器(自己的服务器), 由服务器保存在数据库中。

5.当自己的服务器想发送推送时, 在远程推送服务器中输入要发送的消息并选择发给哪些用户的deviceToken,由远程推送服务器发送给APNs。

6.APNs根据deviceToken发送给对应的用户。

· APNs 服务器就是苹果专门做远程推送的服务器。

·deviceToken是由APNs生成的一个专门找到你某个手机上的App的一个标识码。

· deviceToken 可能会变,如果你更改了你项目的bundle Identifier或者APNs服务器更新了可能会变。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/345003.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-06
下一篇2023-05-06

发表评论

登录后才能评论

评论列表(0条)

    保存