集成类问题

大约 2 分钟

集成类问题

如何实现跨 app 聊天

如果您需要两个 app 之间可以互相通信,只要将 AppKey 写成同一个就可以实现跨 app 聊天。同时,您需要在环信即时通讯云控制台上传对应 app 的推送证书(可以是多个),这样可以确保您的两个 app 都能收到推送。

获取设备本地日志文件

在排查移动端集成或者使用问题的时候,会遇到需要查看设备本地 SDK 的 log 来确认问题,在此提供移动端获取本地 log 的方法。

Android

通过 API 获取

SDK 的 log 文件在 app 的安装目录中,可以通过 API 获取,获取时需要确保 SDK 已经完成初始化。

通过 API 获取 log 文件路径, 返回格式为 xxxxx/xxxx/log.gz

logPath = EMClient.getInstance().compressLogs();

从手机或者模拟器获取日志文件

前提条件

adb pull  /sdcard/android/data/(your_package_name)/(appkey)/core_log/easemob.log

iOS

通过 API 获取

SDK 的 Log 文件在 app 的 sandbox 中,如需获取可通过 SDK 提供的getLogFilesPath: 获取,获取时需要确保SDK已经完成初始化。

EMError *error = nil;
NSString *logPath = [EMClient.sharedClient getLogFilesPath:&error];

返回格式为 xxxxx/xxxx/log.gzerror 为错误信息,无错误是返回nil

从手机或者模拟器获取日志文件

通过 XCode debug 时,可以连接手机或者模拟器,找到应用的 sandbox 目录,然后提取日志文件。

App_Sandbox_path/Application Support/HyphenateSDK/easemobLog

消息重发机制

  1. 对于 Android、iOS 、HarmonyOS、Windows 端和三个跨平台框架 Unity、React Native 和 Flutter 来说,消息重发机制如下:

客户端调用发送消息的方法后,会等待服务器返回响应,超时时间为 10 秒。若因响应超时导致发送失败,客户端会再次尝试发送消息,即通过长连接重连服务器,然后发送消息。如果再次失败,SDK 认为消息发送失败,返回服务器不可达的错误消息,即错误码 300,iOS 为 EMErrorServerNotReachable,Android, HarmonyOS 和 Windows 为 SERVER_NOT_REACHABLE

  1. 对于 Web 来说,消息重发机制如下:

发送消息时如果 WebSocket 已经断开正在进行重连时,重新连接后会重新发送消息;若 WebSocket 断开时发送消息,SDK 会提示网络断开连接导致消息发送失败的错误,即错误码 510 MESSAGE_WEBSOCKET_DISCONNECTED