From d7f5c7d8fbf84cd97fe850cc1ce5f2414abe7d14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=BC=96=E7=A0=81=E5=B7=A5=E7=A8=8B=E5=B8=88?= Date: Wed, 19 Aug 2026 12:44:37 +0800 Subject: [PATCH] =?UTF-8?q?feat(mobile-next):=20=E6=8E=A5=E5=85=A5=20flutt?= =?UTF-8?q?er=5Fopenim=5Fsdk=203.8.3+hotfix.12=20=E5=B9=B6=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E6=A0=B8=E5=BF=83=E8=83=BD=E5=8A=9B=E5=AE=9E=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 仅升级 flutter_openim_sdk 3.8.3+3 → 3.8.3+hotfix.12(pubspec.yaml、openim_common、openim_live、pubspec.lock) - debug/release 双构建成功,核对包名/版本/签名/SHA256 - 双测试账号 t1001/t1002 实测:初始化、登录、会话同步、断线重连、好友/群组、 文字/图片/文件/语音双向收发,全部通过(服务端落库复核) - 验证与回退说明见 docs/mobile-next-hotfix-sdk-verification.md Co-authored-by: multica-agent --- docs/mobile-next-hotfix-sdk-verification.md | 109 ++++++++++++++++++++ mobile-next/openim_common/pubspec.yaml | 2 +- mobile-next/openim_live/pubspec.yaml | 2 +- mobile-next/pubspec.lock | 4 +- mobile-next/pubspec.yaml | 2 +- 5 files changed, 114 insertions(+), 5 deletions(-) create mode 100644 docs/mobile-next-hotfix-sdk-verification.md diff --git a/docs/mobile-next-hotfix-sdk-verification.md b/docs/mobile-next-hotfix-sdk-verification.md new file mode 100644 index 0000000..6bf3f3b --- /dev/null +++ b/docs/mobile-next-hotfix-sdk-verification.md @@ -0,0 +1,109 @@ +# mobile-next 通信组件热修接入与核心能力实测记录(B-137) + +> 基线:`0a2fbac`(官方 openim-flutter-demo 3.8.3-patch.3 固定基线导入)+ `44ac7d9`(文档修正)。 +> 本阶段只做一件事:把 `flutter_openim_sdk` 从 `3.8.3+3` 升级到 `3.8.3+hotfix.12`,锁定依赖、完成 debug/release 双构建、用两个测试账号逐项实测核心通信能力。未开始品牌换壳或公司业务迁移。 + +## 一、依赖升级与差异记录 + +### 变更文件(仅 4 个,全部为版本号) + +| 文件 | 变更 | +| --- | --- | +| `mobile-next/pubspec.yaml` | `flutter_openim_sdk: 3.8.3+3` → `3.8.3+hotfix.12` | +| `mobile-next/openim_common/pubspec.yaml` | 同上 | +| `mobile-next/openim_live/pubspec.yaml` | 同上 | +| `mobile-next/pubspec.lock` | `flutter_openim_sdk` sha256 与 version 同步更新 | + +`openim_common` / `openim_live` 为 `mobile-next/` 内的本地子包,同样引用该 SDK,必须一致升级,否则 `flutter pub get` 解析失败。 + +### 依赖解析结果 + +`flutter pub get` 输出仅 `flutter_openim_sdk 3.8.3+hotfix.12 (was 3.8.3+3)`,**其余全部依赖无变化**。 + +### pubspec.lock 差异 + +```diff + flutter_openim_sdk: + dependency: "direct main" + description: + name: flutter_openim_sdk +- sha256: "09149d60b4c096acab52279365285409123f15f9111d5fc84cc2481b29343a04" ++ sha256: b57d1fd63f52fa5cbd7c257fccc9d04902c266e96172f5112c00b428af2f2ff5 + url: "https://pub.dev" + source: hosted +- version: "3.8.3+3" ++ version: "3.8.3+hotfix.12" +``` + +### hotfix 与旧版 API 差异(基于 pub.dev 下载的源码 diff) + +`flutter_openim_sdk 3.8.3+hotfix.12` 相对 `3.8.3+3` 的 Dart API 变化均为**新增/放宽**,向后兼容: + +- `FriendshipManager` 新增 `getFriendApplicationListAsRecipient` / `getFriendApplicationListAsApplicant` / `getFriendApplicationUnhandledCount`。 +- `GroupManager` 新增 `getGroupApplicationUnhandledCount`;`inviteUserToGroup` / `kickGroupMember` 返回类型由 `Future>` 放宽为 `Future`。 +- `ConversationManager` 删除 2 行(内部实现),无公开 API 变更。 + +`dart analyze lib test` 对应用代码 **0 error**(仅有上游自带 info/warning 级 lint,与本次升级无关)。应用内调用 `inviteUserToGroup` / `kickGroupMember` 的地方(`lib/pages/chat/group_setup/group_setup_logic.dart:401,421`)不依赖返回值,编译通过。 + +### Android 原生侧差异(影响构建产物,不改变应用代码) + +- hotfix 的 `android/build.gradle`:AGP `7.3.1`→`8.7.3`、compileSdk `34`→`35`、Java `1.8`→`11`;核心库 `io.openim:core-sdk:3.8.3-patch3@aar` → `3.8.3-patch12@aar`。 +- 应用工程 `mobile-next/android/`(固定基线)仍为 AGP 7.3.1 / compileSdk 34 / Java 1.8,构建时以应用工程为准,hotfix 插件用应用工程工具链编译,双构建均通过。 + +## 二、构建与产物 + +工具链:Flutter 3.24.5(`C:\flutter324`)、JDK 17.0.20(Temurin)、Android SDK(platforms 34/35/36,build-tools 36.0.0)、Gradle 7.6.3 / AGP 7.3.1(应用工程锁定)。 + +| 构建 | 结果 | 产物 | 大小 | SHA256 | 签名 | +| --- | --- | --- | --- | --- | --- | +| debug | 成功 | `app-debug.apk` | 109,454,753 B | `9020C291B9BE12C5B50720264797B06AF1D9C21708A5B8AD2847594C486DB642` | CN=openim keystore(与 release 同源) | +| release | 成功 | `app-release.apk` | 53,323,403 B | `A746DC83C3DB2E35A7AFA90B7FC1A02EAF751631F1DA9AAAF1799B28529B7F84` | CN=openim, cert SHA-256 `1f38a82fb3c33be7951fb5d964ef5bd9c6c9bfc084ae1e2a8a40a0d1f44ae1fe` | + +APK 元数据(aapt badging,debug 与 release 一致):package `io.openim.flutter.demo`,versionName `3.8.3`,versionCode `180`,minSdk 24 / targetSdk 33 / compileSdk 34。 + +构建期警告与基线相同(Flutter Gradle 插件 apply-script 弃用提示、部分依赖 Kotlin metadata 版本高于工程 Kotlin 的提示),不影响产物。release 包字体 tree-shaking 正常。 + +> 说明:x86_64 模拟器测试用的 fat APK(`--target-platform android-x64` 临时放开 abiFilters 构建)仅为本地联调产物,未入库,交付物以 arm64 debug/release 为准。 + +## 三、核心能力实测(2026-08-19,两 x86_64 模拟器) + +环境:模拟器 A=emulator-5554 登录 t1001("Test One"),模拟器 B=emulator-5556 登录 t1002("Test Two");连真实 OpenIM `192.168.200.11:10002/:10001`。登录凭据 userID+imToken 与公司账号服务签发链路一致(OpenIM `/auth/get_user_token`),SDK 版本日志 `3.8.0`(hotfix 内核 3.8.3-patch12)。 + +| # | 能力 | 方法 | 结果 | 证据 | +| --- | --- | --- | --- | --- | +| 1 | SDK 初始化 | App 启动 `initSDK(apiAddr, wsAddr, listener…)` | 通过 | 双端 `IM SDK Status: connecting → connectionSucceeded → syncStart → syncEnded` 日志 | +| 2 | 登录(userID+imToken) | 双端自动登录 | 通过 | 双端 `conn start`(ws 带 sendID/token),`onConnectSuccess` | +| 3 | 会话同步 | 启动拉取会话 | 通过 | 双端 `get_full_conversation_ids` 返回 `si_t1001_t1002` 等;UI 会话列表可见 | +| 4 | 断线重连 | 关 WiFi → 开 WiFi | 通过 | 断网 `onConnectFailed` + `reConn`,恢复后 `onConnectSuccess`,随后发送 `reconnectOK_3` 送达(seq 11) | +| 5 | 好友 | 通讯录→My Friends | 通过 | t1001 好友列表含 "Test Two";早前好友申请通知已接受(`friendApplicationAccepted`) | +| 6 | 群组 | 建群 + 群消息 | 通过 | 建群 `hotfix-grp-test`(1481671100,成员 t1001+t1002),双端会话列表出现,群消息 `grp148_msg_ok` 送达 t1002(seq 2) | +| 7 | 文字消息 | t1001→t1002 / t1002→t1001 | 通过 | `regHotfixText_1_`(seq 6)、`hotfixBtoA_2`(seq 7)双端 UI + 服务端落库(status 2) | +| 8 | 图片消息 | 相册选图发送 | 通过 | `contentType 102`,URL `msg_picture_…png`,t1002 收到(seq 8,hasReadTime 回执) | +| 9 | 文件消息 | 文件选择器发送 | 通过 | `contentType 105`,`hotfix-file-test.txt` 66B 上传,t1002 UI 显示文件卡片(seq 9) | +| 10 | 语音消息 | 按住说话 | 通过 | `contentType 103`,`.m4a` 33,866B 上传,t1002 收到(seq 10,duration 1s) | + +服务端落库通过 `/msg/search_msg` 复核,均为 `status=2`(已发送)。 + +## 四、完成标准核对 + +- [x] debug、release 真实构建成功,构建与产物信息齐全(含包名/版本/签名/SHA256)。 +- [x] 核心能力逐项有"通过"结果与证据(初始化/登录/会话同步/重连/好友/群组/文字/图片/文件/语音),均为双账号实测,非版本号代替。 +- [x] 任一核心门禁失败则停止后续迁移:本阶段**全部通过**,可进入公司功能迁移(阶段4)。 +- [x] 旧版安装包、`mobile/`、PC 客户端、现网服务均未改动。 + +## 五、已知差异 / 备注 + +- 登录链路的 HTTP 工号密码校验(account-service `/api/login`)属于公司业务层,本次未接入 mobile-next(禁止公司业务迁移);SDK 登录用与账号服务同源的 userID+imToken 实测通过。部署账号服务管理口令已改(非默认值),本次未触碰服务端任何配置与数据。 +- 语音通话(LiveKit)不在本阶段范围(阶段4 迁移),未测。 +- hotfix 插件自身 `android/build.gradle` 目标升级到 AGP 8.7.3/compileSdk 35,但被应用工程工具链(AGP 7.3.1/compileSdk 34)覆盖,行为由应用工程决定;已按基线记录。 +- 模拟器测试时照片选择器因"受限访问"需在系统设置授予"允许所有照片",为 Android 14+ 权限行为,非 SDK 问题。 + +## 六、回退方法 + +本提交只改动 4 个依赖声明文件(`mobile-next/` 内),可单独回退: + +``` +git revert <本提交哈希> +``` + +或手动把 4 个文件的 `flutter_openim_sdk` 改回 `3.8.3+3` 并 `flutter pub get`。`mobile/`、`pc-client/`、`account-service/`、服务器与现网均不受影响。 diff --git a/mobile-next/openim_common/pubspec.yaml b/mobile-next/openim_common/pubspec.yaml index 20a5a55..f948224 100644 --- a/mobile-next/openim_common/pubspec.yaml +++ b/mobile-next/openim_common/pubspec.yaml @@ -102,7 +102,7 @@ dependencies: path: ../local_plugin/flutter_download_manager flutter_picker_plus: ^1.1.3 - flutter_openim_sdk: 3.8.3+3 + flutter_openim_sdk: 3.8.3+hotfix.12 dev_dependencies: flutter_test: sdk: flutter diff --git a/mobile-next/openim_live/pubspec.yaml b/mobile-next/openim_live/pubspec.yaml index ffb1a49..9e6d110 100644 --- a/mobile-next/openim_live/pubspec.yaml +++ b/mobile-next/openim_live/pubspec.yaml @@ -27,7 +27,7 @@ dependencies: device_info_plus: openim_common: path: ../openim_common - flutter_openim_sdk: 3.8.3+3 + flutter_openim_sdk: 3.8.3+hotfix.12 dev_dependencies: flutter_test: diff --git a/mobile-next/pubspec.lock b/mobile-next/pubspec.lock index 31daa25..19c072f 100644 --- a/mobile-next/pubspec.lock +++ b/mobile-next/pubspec.lock @@ -828,10 +828,10 @@ packages: dependency: "direct main" description: name: flutter_openim_sdk - sha256: "09149d60b4c096acab52279365285409123f15f9111d5fc84cc2481b29343a04" + sha256: b57d1fd63f52fa5cbd7c257fccc9d04902c266e96172f5112c00b428af2f2ff5 url: "https://pub.dev" source: hosted - version: "3.8.3+3" + version: "3.8.3+hotfix.12" flutter_picker_plus: dependency: transitive description: diff --git a/mobile-next/pubspec.yaml b/mobile-next/pubspec.yaml index 7ac70fb..1ed94c2 100644 --- a/mobile-next/pubspec.yaml +++ b/mobile-next/pubspec.yaml @@ -106,7 +106,7 @@ dependencies: path: openim_common openim_live: path: openim_live - flutter_openim_sdk: 3.8.3+3 + flutter_openim_sdk: 3.8.3+hotfix.12 dependency_overrides: scrollable_positioned_list: ^0.3.8