常见问题

产品 / 插件
平台 / 框架

ZIM SDK 是否支持断线重连机制?

产品 / 插件:即时通讯

平台 / 框架:iOS / Android / macOS / Windows / Web / 小程序 / Flutter / React Native / uni-app / Unity3D

更新时间:2022-11-15 18:26

ZIM SDK 支持断线重连机制。本文将介绍 ZIM SDK 在什么情况下会出现断线的情况,以及如何处理这些异常。

建议开发者在真机上进行相关调试。

异常断开场景

场景 1:网络异常

如果用户的机器出现弱网或断网的情况,SDK 内部会主动触发重连,此时会通过 onConnectionStateChanged 回调出 RECONNECTINGstateLOGIN_INTERRUPTEDevent,重连时间为 5 分钟。

在重试的 5 分钟内不需要额外处理,SDK 内部会自动尝试重连。

  • 如果 5 分钟内能重新连接,则会通过 onConnectionStateChanged 回调出 CONNECTEDstateSUCCESSevent
  • 如果 5 分钟内无法重新连接,则会通过 onConnectionStateChanged 回调出 DISCONNECTEDstateLOGIN_TIMEOUTevent 并且此时调用其他接口都会报错,且错误码为 6000121,表示“未登录”。

处理方式

如果 5 分钟依然重连不上,则需要用户重新调用 login 接口进行登录。

场景 2:帐号被踢出

目前 ZIM 不允许多端同时登录,如果有其他端登录了本端已登录的帐号(userID),则会把本端挤下线,本端会出现断线的情况,并且 SDK 不会主动触发重连。

此时将通过 onConnectionStateChanged 回调出 DISCONNECTEDstateKICKED_OUTevent,并且调用其他接口都会报错,且错误码为 6000121,表示“未登录”。

处理方式

SDK 不会自动重连,所以需要用户重新调用 login 接口进行登录。

场景 3:Token 过期

如果 AppID 配置了 Token 鉴权,则在 Token 快过期时,会通过 onTokenWillExprie 进行回调。

  • 当用户获取了新的 Token 后,通过 renewToken 接口向 SDK 传入新的 Token ,以保证 Token 正常使用。
  • 如果没有及时传入新的 Token,则 SDK 会在 Token 过期时,断开与服务器的链接,并通过onConnectionStateChanged 回调出DISCONNECTEDstate ,并且调用其他接口都会报错,且错误码为 6000121,表示“未登录”。

处理方式

SDK 不会自动重连,所以需要用户重新调用 login 接口进行登录。