如下图所示,客户端集成了云巴的 iOS SDK, 服务端通过云巴的 SDK 向 iOS 设备发消息。
一方面,云巴的服务器会负责向苹果的服务器发送 APNs 的消息; 另一方面,当应用在前台运行时,云巴会通过与 App 建立的长连接,直接推送内部消息。
通过云巴的 SDK 向 iOS App 推送消息,App 在不同状态下的消息接收情况如下:
App 状态 | 一直 Online | 服务端推送了消息后,设备才 Online | 一直 Offline |
运行在前台 | (1) iOS 系统不会显示 APNs 消息通知,但 App 内会有 APNs 的回调; (2) 云巴服务器与 App 建立了长连接,App 会收到云巴服务器直接发来的消息。 |
连网后,情况与左侧一列的描述基本一致。 唯一区别是: 设备不在线时,向 APNs 推送多条通知,在上线后只会收到最后一条。 |
收不到消息。 |
运行在后台 | (1) App 会收到并显示 APNs 消息通知; (2) 打开 App 时,如前所述,App 会连上云巴服务器,收到服务器直接发来的消息。 |
云巴 SDK 集成了 APNs,开发者无需开发与 APNs 对接的模块,也不必自己负责 Device Token 的更新,一切交给云巴。
众所周知,APNs 并不保证消息的送达。 而云巴 SDK 支持 离线消息 的功能,可保证消息送达客户端。
在推送消息时,如果客户端当前不在线,消息将暂存在云巴服务器上(多达 50 条,长达 15 天)。 当客户端上线并成功连接到云巴的服务器后,服务器会把离线消息推送给该客户端。客户端成功接收后,服务器才会删除保存的离线消息。