主要说一下iOS的远程推送 主要看下面两张图
Probider是你的服务器 APNs是苹果推送的服务器 Apple Notifiction Service iPhone 是你的手机终端 Client App 是你的应用程序
过程分为三个过程
- 首先你的service 应用程序把要发送的消息内容、目的iPhone的标识打包,发给APNS。
- 然后APNS在自身的已注册Push服务的iPhone列表中,查找有相应标识的iPhone,并把消息发到iPhone。
- 最后iPhone把发来的消息传递给相应的应用程序, 并且按照设定弹出Push通知
更详细一点的图
这个图更为详尽的讲述整个过程
- 首先是应用程序注册消息推送。
- IOS跟APNS Server要deviceToken。应用程序接受deviceToken。
- 应用程序将deviceToken发送给PUSH服务端程序。
- 服务端程序向APNS服务发送消息。
- APNS服务将消息发送给iPhone应用程序。
其中最关键的是第三步 应用程序可以直接把 deviceToken 发送给 YourServer,但是在iOS9 之后 deviceToken 是会发生变化的, 当你卸载程序重新安装的时候 可能会受到重复的推送,此时 可以通过 uuid + keyChain + deviceToken的方法,传给 YourServer, 让 YourServer 根据 uuid来更新 deviceToken 来保证唯一性,通过 keyChain 保存uuid ,让应用程序 卸载的时候仍可以 保留 UUID,保证唯一性。 然而 在iOS 10 之后 卸载应用 会清空 keyChain 参考链接
此时 有什么办法呢?
- 可以在用户登录的时候,根据用户的唯一标识 比如 用户的手机号 token等信息 + deviceToken来更新 deviceToken。
- 或者使用手机 mac 地址等物理信息确保唯一性
- 期待补充