跳转至

触发机制

运行状态

在使用远程推送之前,开发者需要先了解融云 SDK 的运行状态。

融云 SDK 根据 iOS App 运行的特性,主要有以下三种运行状态:

1.前台状态

App 前台可见时 SDK 处于前台状态。此时 App 使用融云的长连接通道来收发消息.

2.后台活动状态

当 App 进入后台 2 分钟之内,SDK 处于后台活跃状态。此时 App 使用融云的长连接通道接收消息。

注意

工程若使用 IMKit ,此时 SDK 收到消息会弹出本地通知(必须实现用户信息提供者和群组信息提供者,否则将不会有本地通知提示弹出)。

工程若使用 IMLib ,此时 SDK 不会弹出本地通知,如果您需要可以自己弹出本地通知提示。

3.后台暂停状态

当 App 进入后台 2 分钟之后或被杀进程或被冻结,SDK 将处于后台暂停状态。此时融云的长连接通道会断开,融云 Server 会通过 APNs 将消息以远程推送的形式下发到客户端。 此状态下如果有人给该用户发送消息,融云的服务器会根据 deviceToken 和推送证书将消息发送到苹果推送服务器,苹果服务器会将该消息推送到客户端。

提示

由于本地通知和远程推送表现形式类似,不易区分,您在调试时可以通过杀进程来测试远程推送,App 刚进入后台测试本地通知。

当 SDK 处于后台暂停状态时,App 会收到远程推送。

推送流程

当 SDK 处于后台暂停状态时,并且已经上传了 deviceToken ,这时候如果有人给该用户发送消息,融云的服务器会根据 deviceToken 和推送证书将消息发送到苹果推送服务器(APNs)。苹果推送服务器会根据 deviceToken 查找相应的设备,并根据推送证书中的 BundleIDApp 打包时使用的 Provisioning Profile 查找 App,从而确定唯一的设备上的唯一 App,并进行远程推送。

App 为前台状态和后台活跃状态时:

location

App 为后台暂停状态时:

location

环境区分

苹果推送服务器区分开发环境(Development)和生产环境(Production),两个环境的服务器不同,使用的 P12 证书不同,完全隔离。

注意

  1. deviceToken 是唯一标识客户端的凭证,所以必须上传应用服务器才能使用远程推送。
  2. 模拟器收不到远程推送。
  3. 越狱的设备 APNs 服务不能保证,所以不一定能收到远程推送。
  4. APNs 使用 BundleID 区分 App,使用通配符 BundleIDApp 将无法使用远程推送。