IOS系统推送原理
IOS推送大致原理如下图
1、Provider:就是为指定IOS设备应用程序提供Push的服务器,(如果IOS设备的应用程序是客户端的话,那么Provider可以理解为服务端[消息的发起者]);
2、APNS:Apple Push Notification Service[苹果消息推送服务器];
3、iPhone:用来接收APNS下发下来的消息;
4、Client App:IOS设备上的应用程序,用来接收iphone传递APNS下发的消息到制定的一个客户端 app[消息的最终响应者];
上图可以分为三个阶段:
阶段一:Provider[服务端]把要发送的消息,目的IOS设备标识打包,发送给APNS;
阶段二:APNS在自身的已注册Push服务的IOS设备列表中,查找有相应标识的IOS设备,并将消息发送到IOS设备;
阶段三:IOS设备把发送的消息传递给对应的应用程序,并且按照设定弹出Push通知。
具体过程,见下图
1、[Client App]注册消息推送;
2、[Client App]跟[APNS Service]要deviceToken, Client App接收deviceToken;
3、[Client App]将deviceToken发送给[Provider]Push服务端程序;
4、当Push服务端程序满足发送消息条件了,[Provider]向[APNS Service]发送消息;
5、[APNS Service]将消息发送给[Client App].
IOS设备上的一些基本概念:
UDID:iOS设备的一个唯一识别码,每台iOS设备都有一个独一无二的编码,这个编码,我们称之为识别码,也叫做UDID( Unique Device Identifier)。
Bundle ID:(Bundle Identifier)是一款iOS应用的唯一标识,应用与Bundle ID之间是唯一对应关系。
请注意:应用新建成功后,Bundle ID将不可修改,如必须修改只能创建一个新的应用,届时App ID、App Key和App Secret也将重新分配,旧版用户将无法收到针对新Bundle ID的推送。
Device Token:设备令牌、用户标识
1.获取devicetoken:
1>客户端向苹果服务APNS,发送设备的UDID和英语的Bundle Identifier.
2>经苹果服务器加密生成一个deviceToken
3>将当前用户的deviceToken(用户标识),发送给自己应用的服务器
4>自己的服务器,将得到的deviceToken,进行保存
!!!device有可能会发生变化
-
在一台设备中, device token 是系统级别的,不同 App 获得的 device token 是相同的。假如我的手机安装了 Angry Bird 和 Evernote ,这两个应用获得 device token 一模一样。
-
device token 并不会因为单个 app 的更新而发生改变。假如我的 iPhone 升级了最新版的愤怒的小鸟,这并不会导致我 device token 的改变。
-
假如我的 iPhone 从 backup 中恢复数据,device token 不会发生变化。
-
用户抹除 iPhone 的数据时,意味着要与这台手机撇清关系,比如出售或者送人。此时为了保护隐私,device token 会改变。
2.获取到deviceToken后
推送消息给设备
5>需要推送的时候,将消息和deviceToken一起发送给APNS,苹果服务器,再通过deviceToken找到用户,并将消息发给用户
参考文章:
相关文章
- iOS社交app技术合伙人笔试题
- iOS学习路线
- IOS状态栏的显示隐藏
- iOS调用系统设置的命令
- 【读书笔记】iOS-GCD-系统提供的dispatch方法
- [CALayer release]: message sent to deallocated instance iOS内存过度释放问题
- 微信小程序 - 完美解决 web-view 公众号文章或第三方网站分享转发后,打开提示 “无法打开该页面,不支持打开” 或 “页面不存在”(IOS 苹果系统打开是空白页,安卓系统会有提示)超详细排查
- 《Android安全技术揭秘与防范》—第1章1.3节Android和iOS系统对比
- iOS常用宏定义大全
- iOS (封装)一句话调用系统的alertView和alertController
- iOS 自定义返回按钮,保留系统滑动返回
- iOS中正确的截屏姿势
- iOS开发UI篇—UITabBarController简单介绍
- SwiftUI iOS 开源组件之 按压效果button(教程含源码)
- Python全新Flet框架或将打通iOS、Android、Macos和Windows多平台开发(Flet教程含3个完成项目源码)
- iOS系统层次架构
- ReactiveCocoa,最受欢迎的iOS函数响应式编程库(2.5版),没有之一!
- iOS-UITextField中给placeholder动态设置颜色的四种方法
- iOS开发系列--通讯录、蓝牙、内购、GameCenter、iCloud、Passbook系统服务开发汇总
- SSH客户端工具连接Linux(有的也可以连接Windows、mac、iOS等多系统平台)
- iOS 与 Android 系统十年之战,究竟谁是赢家?
- 怎样 获取 ios的系统版本
- iOS开发-系统级分享
- iOS开发 - 系统导航栏左右上角按钮如何不需要定义就可以添加小红点
- 安卓与iOS江湖混战 高通要为前者提供全新武器