From f28786b43237a12f8ed3647cd4a34eb4b9b1c9b5 Mon Sep 17 00:00:00 2001 From: luckyyuqiang Date: Wed, 10 Dec 2025 14:40:08 +0800 Subject: [PATCH 1/4] update version from 4.16.0 to 4.17.0 --- im_flutter_sdk/pubspec.yaml | 2 +- im_flutter_sdk_android/pubspec.yaml | 2 +- im_flutter_sdk_interface/pubspec.yaml | 2 +- im_flutter_sdk_ios/pubspec.yaml | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/im_flutter_sdk/pubspec.yaml b/im_flutter_sdk/pubspec.yaml index 5c797bf8..4299263f 100644 --- a/im_flutter_sdk/pubspec.yaml +++ b/im_flutter_sdk/pubspec.yaml @@ -1,6 +1,6 @@ name: im_flutter_sdk description: Integrate the Chat SDK to enjoy the global IM services with high reliability, ultra-low latency, and high concurrency. -version: 4.16.0 +version: 4.17.0 homepage: https://www.easemob.com environment: diff --git a/im_flutter_sdk_android/pubspec.yaml b/im_flutter_sdk_android/pubspec.yaml index 45c17a26..0f834e11 100644 --- a/im_flutter_sdk_android/pubspec.yaml +++ b/im_flutter_sdk_android/pubspec.yaml @@ -1,6 +1,6 @@ name: im_flutter_sdk_android description: Integrate the Chat SDK to enjoy the global IM services with high reliability, ultra-low latency, and high concurrency. -version: 4.16.0 +version: 4.17.0 homepage: https://www.easemob.com environment: diff --git a/im_flutter_sdk_interface/pubspec.yaml b/im_flutter_sdk_interface/pubspec.yaml index 1738d11c..b627a810 100644 --- a/im_flutter_sdk_interface/pubspec.yaml +++ b/im_flutter_sdk_interface/pubspec.yaml @@ -1,6 +1,6 @@ name: im_flutter_sdk_interface description: Integrate the Chat SDK to enjoy the global IM services with high reliability, ultra-low latency, and high concurrency. -version: 4.16.0 +version: 4.17.0 homepage: https://www.easemob.com environment: diff --git a/im_flutter_sdk_ios/pubspec.yaml b/im_flutter_sdk_ios/pubspec.yaml index 8503fd6f..fdda4a2f 100644 --- a/im_flutter_sdk_ios/pubspec.yaml +++ b/im_flutter_sdk_ios/pubspec.yaml @@ -1,6 +1,6 @@ name: im_flutter_sdk_ios description: Integrate the Chat SDK to enjoy the global IM services with high reliability, ultra-low latency, and high concurrency. -version: 4.16.0 +version: 4.17.0 homepage: https://www.easemob.com environment: From 47d77fb2aed30092e7814070b27fb6c861038216 Mon Sep 17 00:00:00 2001 From: luckyyuqiang Date: Wed, 10 Dec 2025 15:55:51 +0800 Subject: [PATCH 2/4] update ios and android dependents. --- im_flutter_sdk/example/pubspec.lock | 8 ++++---- im_flutter_sdk_android/android/build.gradle | 2 +- im_flutter_sdk_ios/ios/im_flutter_sdk_ios.podspec | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/im_flutter_sdk/example/pubspec.lock b/im_flutter_sdk/example/pubspec.lock index 6c9002a1..26b20dc0 100644 --- a/im_flutter_sdk/example/pubspec.lock +++ b/im_flutter_sdk/example/pubspec.lock @@ -81,28 +81,28 @@ packages: path: ".." relative: true source: path - version: "4.16.0" + version: "4.17.0" im_flutter_sdk_android: dependency: transitive description: path: "../../im_flutter_sdk_android" relative: true source: path - version: "4.15.2" + version: "4.17.0" im_flutter_sdk_interface: dependency: transitive description: path: "../../im_flutter_sdk_interface" relative: true source: path - version: "4.15.2" + version: "4.17.0" im_flutter_sdk_ios: dependency: transitive description: path: "../../im_flutter_sdk_ios" relative: true source: path - version: "4.15.2" + version: "4.17.0" leak_tracker: dependency: transitive description: diff --git a/im_flutter_sdk_android/android/build.gradle b/im_flutter_sdk_android/android/build.gradle index 9a3db8e9..6b235e63 100644 --- a/im_flutter_sdk_android/android/build.gradle +++ b/im_flutter_sdk_android/android/build.gradle @@ -47,6 +47,6 @@ tasks.withType(JavaCompile){ dependencies { api 'androidx.appcompat:appcompat:1.1.0' // implementation 'cn.shengwang:chat-sdk:1.3.2' - implementation 'io.hyphenate:hyphenate-chat:4.16.1' + implementation 'io.hyphenate:hyphenate-chat:4.17.1' implementation fileTree(dir: 'libs', include: ['*.jar']) } diff --git a/im_flutter_sdk_ios/ios/im_flutter_sdk_ios.podspec b/im_flutter_sdk_ios/ios/im_flutter_sdk_ios.podspec index 3e448532..150bdebf 100644 --- a/im_flutter_sdk_ios/ios/im_flutter_sdk_ios.podspec +++ b/im_flutter_sdk_ios/ios/im_flutter_sdk_ios.podspec @@ -17,7 +17,7 @@ A new flutter plugin project. s.public_header_files = 'Classes/**/*.h' s.dependency 'Flutter' - s.dependency 'HyphenateChat','4.16.2' + s.dependency 'HyphenateChat','4.17.1' # s.dependency 'ShengwangChat_iOS','1.3.2' # 注释掉本地 framework,使用 CocoaPods 依赖 # s.ios.vendored_frameworks = 'framework/HyphenateChat.xcframework', 'framework/aosl.xcframework' From 2e31593bc0b82ab523aae77c5ce2441c0fa8fca3 Mon Sep 17 00:00:00 2001 From: luckyyuqiang Date: Wed, 10 Dec 2025 17:32:00 +0800 Subject: [PATCH 3/4] Add webSocketServer and webSocketPort in EMOptions for private deploy. --- im_flutter_sdk/example/ios/Podfile.lock | 8 +-- im_flutter_sdk/lib/src/models/em_options.dart | 70 +++++++++++++++++++ .../com/easemob/im_flutter_sdk/EMHelper.java | 6 ++ .../ios/Classes/OptionsHelper.m | 4 ++ 4 files changed, 84 insertions(+), 4 deletions(-) diff --git a/im_flutter_sdk/example/ios/Podfile.lock b/im_flutter_sdk/example/ios/Podfile.lock index 1fc4fd45..613ff962 100644 --- a/im_flutter_sdk/example/ios/Podfile.lock +++ b/im_flutter_sdk/example/ios/Podfile.lock @@ -1,11 +1,11 @@ PODS: - AgoraInfra_iOS (1.3.0) - Flutter (1.0.0) - - HyphenateChat (4.16.2): + - HyphenateChat (4.17.1): - AgoraInfra_iOS (~> 1.3.0) - im_flutter_sdk_ios (4.15.2): - Flutter - - HyphenateChat (= 4.16.2) + - HyphenateChat (= 4.17.1) DEPENDENCIES: - Flutter (from `Flutter`) @@ -25,8 +25,8 @@ EXTERNAL SOURCES: SPEC CHECKSUMS: AgoraInfra_iOS: bfbe01cc1cbc8cdd6fa2cba50393e621fd859c6b Flutter: cabc95a1d2626b1b06e7179b784ebcf0c0cde467 - HyphenateChat: 05918e069e96a19e4c13e0b4be41a9ac3eeba5d0 - im_flutter_sdk_ios: 76fc6ec20105bb45c9308e12002613d9fb4f259a + HyphenateChat: b41e58b4d6731e0ee38aa52253dfc38caad6db38 + im_flutter_sdk_ios: 85e0cf97f4e788b0479c90155f9ba6572512bc8d PODFILE CHECKSUM: 3c63482e143d1b91d2d2560aee9fb04ecc74ac7e diff --git a/im_flutter_sdk/lib/src/models/em_options.dart b/im_flutter_sdk/lib/src/models/em_options.dart index 4b31e2e6..ccadf7b1 100644 --- a/im_flutter_sdk/lib/src/models/em_options.dart +++ b/im_flutter_sdk/lib/src/models/em_options.dart @@ -271,6 +271,34 @@ class EMOptions { /// ~end final int? imPort; + /// ~english + /// The WebSocket server. + /// + /// This property is effective only when `enableDnsConfig` is `NO`. + /// Can only be set when initializing the SDK with [EMClient.init], cannot be altered in runtime. + /// ~end + /// + /// ~chinese + /// WebSocket 服务器地址。 + /// + /// enableDnsConfig 为 NO 时生效。只能在 [EMClient.init] 中设置,不能在程序运行过程中动态修改。 + /// ~end + final String? webSocketServer; + + /// ~english + /// The WebSocket server port. + /// + /// This property is effective only when `enableDnsConfig` is `NO`. + /// Can only be set when initializing the SDK with [EMClient.init], cannot be altered in runtime. + /// ~end + /// + /// ~chinese + /// WebSocket 服务器端口。 + /// + /// enableDnsConfig 为 NO 时生效。只能在 [EMClient.init] 中设置,不能在程序运行过程中动态修改。 + /// ~end + final int? webSocketPort; + /// ~english /// Whether to enable TLS connection, which takes effect during initialization and is false by default. /// ~end @@ -586,6 +614,10 @@ class EMOptions { /// /// Param [imServer] The IM server URL for private deployment. /// + /// Param [webSocketServer] The WebSocket server for private deployments. + /// + /// Param [webSocketPort] The WebSocket server port for private deployments. + /// /// Param [chatAreaCode] The area code. /// /// Param [enableEmptyConversation] Whether to include empty conversations when the SDK loads conversations from the local database. @@ -682,6 +714,10 @@ class EMOptions { /// /// Param [imServer] 私有部署时的 IM 服务器地址。 /// + /// Param [webSocketServer] 私有部署时的 WebSocket 服务器地址。 + /// + /// Param [webSocketPort] 私有部署时的 WebSocket 服务器端口。 + /// /// Param [chatAreaCode] server 区域码. /// /// Param [enableEmptyConversation] 从本地数据库加载会话时是否包括空会话。 @@ -728,6 +764,8 @@ class EMOptions { String? restServer, int? imPort, String? imServer, + String? webSocketServer, + int? webSocketPort, int? chatAreaCode, bool enableEmptyConversation = false, String? deviceName, @@ -759,6 +797,8 @@ class EMOptions { restServer: restServer, imPort: imPort, imServer: imServer, + webSocketServer: webSocketServer, + webSocketPort: webSocketPort, chatAreaCode: chatAreaCode ?? ChatAreaCode.GLOB, enableEmptyConversation: enableEmptyConversation, deviceName: deviceName, @@ -841,6 +881,10 @@ class EMOptions { /// /// Param [imServer] The IM server URL for private deployment. /// + /// Param [webSocketServer] The WebSocket server for private deployments. + /// + /// Param [webSocketPort] The WebSocket server port for private deployments. + /// /// Param [chatAreaCode] The area code. /// /// Param [enableEmptyConversation] Whether to include empty conversations when the SDK loads conversations from the local database. @@ -937,6 +981,10 @@ class EMOptions { /// /// Param [imServer] 私有部署时的 IM 服务器地址。 /// + /// Param [webSocketServer] 私有部署时的 WebSocket 服务器地址。 + /// + /// Param [webSocketPort] 私有部署时的 WebSocket 服务器端口。 + /// /// Param [chatAreaCode] server 区域码. /// /// Param [enableEmptyConversation] 从本地数据库加载会话时是否包括空会话。 @@ -983,6 +1031,8 @@ class EMOptions { String? restServer, int? imPort, String? imServer, + String? webSocketServer, + int? webSocketPort, int? chatAreaCode, bool enableEmptyConversation = false, String? deviceName, @@ -1014,6 +1064,8 @@ class EMOptions { restServer: restServer, imPort: imPort, imServer: imServer, + webSocketServer: webSocketServer, + webSocketPort: webSocketPort, chatAreaCode: chatAreaCode ?? ChatAreaCode.GLOB, enableEmptyConversation: enableEmptyConversation, deviceName: deviceName, @@ -1098,6 +1150,10 @@ class EMOptions { /// /// Param [imServer] The IM server URL for private deployment. /// + /// Param [webSocketServer] The WebSocket server for private deployments. + /// + /// Param [webSocketPort] The WebSocket server port for private deployments. + /// /// Param [chatAreaCode] The area code. /// /// Param [enableEmptyConversation] Whether to include empty conversations when the SDK loads conversations from the local database. @@ -1194,6 +1250,10 @@ class EMOptions { /// /// Param [imServer] 私有部署时的 IM 服务器地址。 /// + /// Param [webSocketServer] 私有部署时的 WebSocket 服务器地址。 + /// + /// Param [webSocketPort] 私有部署时的 WebSocket 服务器端口。 + /// /// Param [chatAreaCode] server 区域码. /// /// Param [enableEmptyConversation] 从本地数据库加载会话时是否包括空会话。 @@ -1240,6 +1300,8 @@ class EMOptions { String? restServer, int? imPort, String? imServer, + String? webSocketServer, + int? webSocketPort, int? chatAreaCode, bool enableEmptyConversation = false, String? deviceName, @@ -1270,6 +1332,8 @@ class EMOptions { restServer: restServer, imPort: imPort, imServer: imServer, + webSocketServer: webSocketServer, + webSocketPort: webSocketPort, chatAreaCode: chatAreaCode ?? ChatAreaCode.GLOB, enableEmptyConversation: enableEmptyConversation, deviceName: deviceName, @@ -1304,6 +1368,8 @@ class EMOptions { this.restServer, this.imPort, this.imServer, + this.webSocketServer, + this.webSocketPort, this.chatAreaCode = ChatAreaCode.GLOB, this.enableEmptyConversation = false, this.deviceName, @@ -1335,6 +1401,8 @@ class EMOptions { data.putIfNotNull("enableDNSConfig", enableDNSConfig); data.putIfNotNull("imPort", imPort); data.putIfNotNull("imServer", imServer); + data.putIfNotNull("webSocketServer", webSocketServer); + data.putIfNotNull("webSocketPort", webSocketPort); data.putIfNotNull("isAutoDownload", isAutoDownloadThumbnail); data.putIfNotNull( "isChatRoomOwnerLeaveAllowed", isChatRoomOwnerLeaveAllowed); @@ -1426,6 +1494,8 @@ class EMOptions { restServer: restServer, imPort: imPort, imServer: imServer, + webSocketServer: webSocketServer, + webSocketPort: webSocketPort, chatAreaCode: chatAreaCode, enableEmptyConversation: enableEmptyConversation, deviceName: deviceName, diff --git a/im_flutter_sdk_android/android/src/main/java/com/easemob/im_flutter_sdk/EMHelper.java b/im_flutter_sdk_android/android/src/main/java/com/easemob/im_flutter_sdk/EMHelper.java index 45f773c0..fe39e201 100644 --- a/im_flutter_sdk_android/android/src/main/java/com/easemob/im_flutter_sdk/EMHelper.java +++ b/im_flutter_sdk_android/android/src/main/java/com/easemob/im_flutter_sdk/EMHelper.java @@ -97,6 +97,12 @@ static EMOptions fromJson(JSONObject json, Context context) throws JSONException if (json.has("imServer")) { options.setIMServer(json.getString("imServer")); } + if (json.has("webSocketServer")) { + options.setWebSocketServer(json.getString("webSocketServer")); + } + if (json.has("webSocketPort")) { + options.setWebSocketPort(json.getInt("webSocketPort")); + } if (json.has("restServer")) { options.setRestServer(json.getString("restServer")); } diff --git a/im_flutter_sdk_ios/ios/Classes/OptionsHelper.m b/im_flutter_sdk_ios/ios/Classes/OptionsHelper.m index 0fa383e8..25b2b707 100644 --- a/im_flutter_sdk_ios/ios/Classes/OptionsHelper.m +++ b/im_flutter_sdk_ios/ios/Classes/OptionsHelper.m @@ -30,6 +30,8 @@ - (NSDictionary *)toJson { data[@"enableDNSConfig"] = @(self.enableDnsConfig); data[@"imPort"] = @(self.chatPort); data[@"imServer"] = self.chatServer; + data[@"webSocketServer"] = self.webSocketServer; + data[@"webSocketPort"] = @(self.webSocketPort); data[@"restServer"] = self.restServer; data[@"dnsUrl"] = self.dnsURL; data[@"areaCode"] = @(self.area); @@ -73,6 +75,8 @@ + (EMOptions *)fromJson:(NSDictionary *)aJson { options.enableDnsConfig = [aJson[@"enableDNSConfig"] boolValue]; options.chatPort = [aJson[@"imPort"] intValue]; options.chatServer = aJson[@"imServer"]; + options.webSocketServer = aJson[@"webSocketServer"]; + options.webSocketPort = [aJson[@"webSocketPort"] intValue]; options.restServer = aJson[@"restServer"]; options.dnsURL = aJson[@"dnsURL"]; options.area = [aJson[@"areaCode"] intValue]; From 0b3a08bc5a6fcae95c9cca19efce4b7187fc1c2f Mon Sep 17 00:00:00 2001 From: luckyyuqiang Date: Wed, 10 Dec 2025 17:41:38 +0800 Subject: [PATCH 4/4] update CHANGELOG.md files. --- im_flutter_sdk/CHANGELOG.md | 8 +++++++- im_flutter_sdk_android/CHANGELOG.md | 5 +++++ im_flutter_sdk_interface/CHANGELOG.md | 2 ++ im_flutter_sdk_ios/CHANGELOG.md | 7 ++++++- 4 files changed, 20 insertions(+), 2 deletions(-) diff --git a/im_flutter_sdk/CHANGELOG.md b/im_flutter_sdk/CHANGELOG.md index 162aeb0c..e6ee2b01 100644 --- a/im_flutter_sdk/CHANGELOG.md +++ b/im_flutter_sdk/CHANGELOG.md @@ -1,6 +1,12 @@ +## 4.17.0 +- 安卓依赖 SDK 升级到 4.17.1; +- iOS依赖 SDK 升级到 4.17.1; +- 长连接支持 WebSocket 协议; +- 私有化部署底层链路支持 TCP 和 WebSocket 之间切换; + ## 4.16.0 - 安卓依赖 SDK 升级到 4.16.1; -- iOS以来 SDK 升级到 4.16.2; +- iOS依赖 SDK 升级到 4.16.2; - 新增 `loadMessagesWithIds` API; - 修复 `Thread` 子区会被加入到 `conversation` 列表中; - 修复 当修改文本和自定义消息之外的消息时,`EEMChatEventHandler#onMessageContentChanged` 回调中不返回修改的信息的问题; diff --git a/im_flutter_sdk_android/CHANGELOG.md b/im_flutter_sdk_android/CHANGELOG.md index ea261207..2d6a0854 100644 --- a/im_flutter_sdk_android/CHANGELOG.md +++ b/im_flutter_sdk_android/CHANGELOG.md @@ -1,3 +1,8 @@ +## 4.17.0 +- 安卓依赖 SDK 升级到 4.17.1; +- 长连接支持 WebSocket 协议; +- 私有化部署底层链路支持 TCP 和 WebSocket 之间切换; + ## 4.16.0 - 安卓依赖 SDK 升级到 4.16.1; - 新增 `loadMessagesWithIds` API; diff --git a/im_flutter_sdk_interface/CHANGELOG.md b/im_flutter_sdk_interface/CHANGELOG.md index c98af6e4..350efd73 100644 --- a/im_flutter_sdk_interface/CHANGELOG.md +++ b/im_flutter_sdk_interface/CHANGELOG.md @@ -1,3 +1,5 @@ +## 4.17.0 + ## 4.16.0 - 新增 `loadMessagesWithIds` API; diff --git a/im_flutter_sdk_ios/CHANGELOG.md b/im_flutter_sdk_ios/CHANGELOG.md index 6e0ba930..7e226eab 100644 --- a/im_flutter_sdk_ios/CHANGELOG.md +++ b/im_flutter_sdk_ios/CHANGELOG.md @@ -1,5 +1,10 @@ +## 4.17.0 +- iOS依赖 SDK 升级到 4.17.1; +- 长连接支持 WebSocket 协议; +- 私有化部署底层链路支持 TCP 和 WebSocket 之间切换; + ## 4.16.0 -- iOS以来 SDK 升级到 4.16.2; +- iOS依赖 SDK 升级到 4.16.2; - 新增 `loadMessagesWithIds` API; - 修复 当修改文本和自定义消息之外的消息时,`EEMChatEventHandler#onMessageContentChanged` 回调中不返回修改的信息的问题; - 修复 拉取漫游消息时,设置为不保存消息 `FetchMessageOptions#needSave 设置为 false`,也会生成新的本地会话的问题;