tencent cloud

文档反馈

在线状态管理

最后更新时间:2023-09-14 15:12:16

    概念介绍

    每个用户的状态类型有以下三种:
    前台运行状态(Online)
    后台运行状态(PushOnline)
    未登录状态(Offline)
    注意
    后台运行状态(PushOnline)只有手机端(Android、iOS、iPad)会存在,PC、Mac、Linux和 Web 端不存在该种状态。

    前台运行状态(Online)

    前台运行状态(Online),是指客户端和即时通信 IM 服务端保持有顺畅的 TCP 网络连接,客户端可以发消息给即时通信 IM 服务端,也可以收到来自即时通信 IM 服务端推送的消息。
    当用户打开 App 后,状态即为前台运行状态(Online)。
    App 启动后,客户端和即时通信 IM 服务端建立 TCP 长连接,即时通信 IM 服务端保存客户端的在线信息,例如客户端的网络链路信息,客户端的平台版本等。App 在运行过程中,IM SDK 会定时发送心跳来确认用户的在线状态。
    说明
    心跳:IM SDK 每隔2分钟发一个心跳包给服务器,以确认用户的在线状态。

    后台运行状态(PushOnline)

    后台运行状态(PushOnline),是指客户端和即时通信 IM 服务端的 TCP 长连接断开。此时可收到消息的离线推送。 以下场景用户的状态为后台运行状态(PushOnline):
    用户使用完 App ,把 App 切后台后进程被手机操作系统 kill 掉,或者用户主动 kill 掉 App 进程。 如果 App 在手机操作系统的保活白名单中,用户把 App 切后台,进程并不会被手机操作系统 kill 掉。此时状态仍然为前台运行状态(Online)。前台运行状态(Online)和后台运行状态(PushOnline)判断的标准之一是 App 进程是否被 kill ,即客户端和即时通信 IM 服务端的 TCP 长连接是否断开。
    用户主动关闭客户端网络(例如打开手机飞行模式),或者客户端网络完全不可用(例如进入完全没有网络信号的隧道)。 在这种特殊情况下,客户端连 TCP 协议的 FIN 包或 RST 包都无法发出,即时通信 IM 服务端需要等待 400 秒后发现心跳包超时,状态才会变成后台运行状态(PushOnline)。
    注意
    后台运行状态(PushOnline)只有手机端(Android、iOS、iPad)会存在,PC、Mac、Linux、小程序和 Web 端不存在该种状态。

    未登录状态(Offline)

    未登录状态(Offline),是指用户没有输入帐号和密码登录前的状态,此时无法收到消息的在线推送,也无法收到消息的离线推送。 以下场景用户的状态为未登录状态(Offline):
    用户主动登出,或下载 App 后还未进行过登录时。
    用户状态变成后台运行状态(PushOnline)后,7天内没有再登录过,此时状态变为未登录状态(Offline)。

    查询用户在线状态

    App 后台可以通过 REST API:获取用户在线状态 来查询一批用户的在线状态。 IM SDK 暂时无法获取用户的在线状态。

    用户在线状态变更通知

    即时通信 IM 可以把用户上下线的事件通知给 App 后台,参见 状态变更回调 文档。

    状态变更感知的实时性

    Android/iOS/iPad/PC/Mac/Linux

    对于绝大多数情况,用户状态的变化都能实时感知,例如:
    用户主动登录,状态变成前台运行状态(Online)。
    用户主动登出, 状态变成未登录状态(Offline)。
    用户主动 kill 客户端进程,或者用户切后台后,客户端进程被手机操作系统 kill 掉,状态变成后台运行状态(PushOnline)。
    只有以下一种特殊情况,IM 云服务器需要等待400秒的心跳超时时间才能感知状态变更: 当网络完全不可用时,客户端连 TCP 协议层的 FIN 包或 RST 包都无法发出时,IM 云服务器需要等待400秒的心跳超时时间才能感知到状态变成后台运行状态(PushOnline)。常见的场景有用户主动关闭客户端的网络(例如开启手机的飞行模式),或者进入完全没有网络信号的隧道。

    Web

    用户主动登录 Web 端时,IM 云服务器可以实时感知到状态变成前台运行状态(Online)。
    各种场景的退出/断线的状态变更实时性如下:
    直接关闭页面,可以实时感知,状态变成未登录状态(Offline)。
    页面不关闭时,网络断开,需要 60s 才能感知到,状态变成未登录状态(Offline)。
    主动调用 destroy 接口,可以实时感知,变成未登录状态(Offline)。

    小程序

    用户主动登录小程序端时,IM 云服务器可以实时感知到状态变成前台运行状态(Online)。
    各种场景的退出/断线的状态变更实时性如下:
    点右上角退出,5s 内感知到状态变成未登录状态(Offline)。
    断网(如手机开启飞行模式) ,60s 感知到状态变成未登录状态(Offline)。
    主动调用 destroy 接口,可以实时感知,变成未登录状态(Offline)。

    多端登录

    互踢

    默认情况,IM SDK 在同时登录多个终端(如同时登录 PC、Android)时,会进行互踢,只有最后一个登录的设备可以在线,之前登录的都会被踢下线,详细互踢逻辑可以参考以下文档:

    同时在线

    即时通信 IM 支持在 控制台 修改同时在线策略,目前支持的多平台同时在线策略如下:
    单平台登录:Android、iPhone、iPad、Windows、Mac、Web 仅可有1种平台在线。
    双平台登录:Android、iPhone、iPad、Windows、Mac 可有1端在线;Web 可同时在线。
    三平台登录:Android、iPhone、iPad 可有1种平台在线;Windows、Mac 可有1种平台在线;Web 可同时在线。
    多平台登录:Android、iPhone、iPad、Windows、Mac、Web 可全平台同时在线。
    默认情况下,每种平台只支持1个终端在线(如 Android 和 Android 会互踢),进阶版用户允许配置 Android、iPhone、iPad、Windows、Mac 同种平台可登录的最大实例数。另外,所有用户均可配置 Web 平台可登录的最大实例数。
    同平台多设备在线,提升用户体验必备工具,支持配置同种平台可登录的最大实例数,防止同平台多设备上线后互踢的情况出现,让用户体验更丝滑。
    说明
    “同平台多设备在线”为 IM 进阶版功能,购买进阶版 后可使用,详见 价格说明
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持