Flutter Demo 執行指南與下載
一個可以直接執行的 Flutter 示例 App,演示登入、會話、訊息、好友、群、資料和頻道等功能,可以作為接入的參考。示例使用的 SDK 版本為 1.0.0-alpha.3;示例 App 自己的版本號與 SDK 的版本號分開管理。
下載 Flutter Demo ZIP · 下載 SHA256 清單
解壓後進入 deeprespond-im-flutter-demo-1.0.0-alpha.3,執行 sha256sum -c SHA256SUMS 核對包內檔案。Windows 可以用 PowerShell 的 Get-FileHash -Algorithm SHA256 <ZIP 文件> 對照上面的 SHA256 清單。
獲取與結構
- 下載的 ZIP:解壓後在包的根目錄執行,依賴從 pub.dev 安裝(已去掉對倉庫工作區的依賴)。
- 完整倉庫:先在
sdk/flutter中執行flutter pub get,再進入example。倉庫中的example依賴工作區,不要把它單獨複製出去執行。 - ZIP 包含示例 App、Android / iOS / macOS / Linux 平臺工程、測試和說明,不包含 SDK 原始碼、
local.properties、構建快取和 IM 服務端。
| 目錄 | 職責 |
|---|---|
| lib/main.dart | 客戶端、入口、事件和通話路由 |
| lib/pages | 登入、會話、訊息、好友、群、資料和頻道 |
| lib/fixtures.dart | 測試模式:獨立的臨時資料目錄、模擬斷網和測試附件 |
| integration_test | 連線真實服務端的端到端測試和截圖 |
| android、ios、macos、linux | 各平臺的工程 |
環境與平臺
Flutter 3.38.1 以上、Dart 3.10 以上;先執行 flutter doctor -v、flutter devices。
| 平臺 | 要求與邊界 |
|---|---|
| Android | Android SDK、JDK 17;模擬器和真機要分別測試 |
| iOS / macOS | 裝有 Xcode 的 Mac,配置簽名和許可權;需要在 Mac 上實際構建測試 |
| Linux | clang、CMake、Ninja、pkg-config、GTK 3 開發庫和桌面環境;IM 功能有端到端測試記錄,但沒有音影片(LiveKit 不支援) |
| Windows | SDK 支援 Windows 桌面,但示例沒有提供 Windows 工程,要自己建立並測試,不能解壓即執行 |
能看到通話入口,不代表音影片、系統來電介面或後臺採集都已測試過;廠商推送需要真實裝置和廠商賬號。
啟動
在獨立包根目錄,或已完成工作區安裝的倉庫 example 中執行:
flutter pub get
flutter devices
flutter run -d <设备ID> \
--dart-define=IM_APP_KEY='组织#应用' \
--dart-define=IM_API_URL='https://im.example.com'- 在 PowerShell 中把命令合成一行。
- 這兩個引數是編譯時的
--dart-define,只設定同名的環境變數不起作用;也可以在登入頁修改服務地址和 AppKey。 - 預設的
http://127.0.0.1:18480和 AppKeydemo#demo只是本機的佔位值。 - 在控制檯中按需開啟密碼登入、註冊、好友和音影片的策略。Client Secret、App Token 只留在服務端。
- 測試兩個使用者時,用兩臺裝置,或給兩個程序各用一個資料目錄(不要共用),互加好友後測試;換使用者前先退出。
- 麥克風、攝像頭、相簿、通知的授權,以及 Firebase / APNs / 廠商推送的配置,由 App 自己完成。
- 介面、附件和音影片的地址都要從裝置上能訪問。
本機聯調
在開發機上執行一個本地的 IM 測試服務,需要完整的 IM 倉庫(ZIP 中不包含服務端)。在倉庫根目錄執行:
make infra-up
go build -o /tmp/flutter-demo-harness ./sdk/conformance/harness
/tmp/flutter-demo-harness -env .env -addr 127.0.0.1:18480 -control 127.0.0.1:18490 \
-db im_flutter_demo -redis-prefix flutter-demo:- 埠被佔用時換一個空閒的埠,並同步修改示例的配置。測試服務的
GET /env返回測試用的 AppKey;服務端憑據不要放進 App。 - 在同一臺電腦上執行 Linux / macOS 版時,可以直接用
127.0.0.1。Android 上的127.0.0.1指的是裝置自己,要用adb reverse轉發介面、LiveKit 和物件儲存的埠,或者改用裝置能訪問的 HTTPS 地址。 - 每臺裝置分別檢查網路和證書。多個測試不要同時修改同一個測試應用的策略。
夾具與驗證
flutter run -d linux --dart-define=IM_DEMO_FIXTURES=true測試模式(IM_DEMO_FIXTURES=true)每次使用一個新的臨時資料目錄,並在“我”頁提供模擬斷網、傳送測試圖片 / 檔案 / 長文字的按鈕。它仍然連線真實的服務,不是離線的假後端。
在完整倉庫的根目錄可以執行 make sdk-flutter-test 和 make sdk-flutter-integration,後者需要先啟動本地的測試服務。在 sdk/flutter/example 中執行連線真實服務端、帶截圖的端到端測試:
IM_HARNESS=http://127.0.0.1:18490 IM_E2E_SHOTS=/tmp/flutter-demo-shots \
flutter test integration_test/e2e_test.dart -d linux \
--dart-define=IM_DEMO_FIXTURES=true --dart-define=IM_VIEWPORT=desktop沒有桌面環境的 Linux 還需要 Xvfb。目前只有 Linux 上 27 個場景的測試記錄(見完整倉庫的 Agent测试/Flutter_SDK_Demo完善/测试报告.md),不代表其他平臺或音影片也已透過。
排查
| 現象 | 檢查 |
|---|---|
| 找不到工作區的根目錄 | 在倉庫中先對 sdk/flutter 執行 flutter pub get;單獨執行請用下載的 ZIP |
| 版本不匹配 | Flutter / Dart 的版本、能否訪問 pub.dev、deeprespond_* 的版本約束;不要照著舊的 2.0.0 說明操作 |
| Android 找不到 SDK | 配置你自己電腦上的路徑,包中不提供 local.properties |
| Linux 上 sqlite3 不相容 | 檢查 glibc 和原生庫的要求;完整倉庫已配置使用系統的 SQLite,你自己的 App 按自己的系統配置 |
| 登入失敗 | AppKey、賬號、策略、憑證和服務地址;可以在登入頁修改服務配置 |
| 圖片、通話失敗 | 裝置能否訪問返回的附件和音影片地址,埠和許可權 |
| Linux 上沒有通話按鈕 | Linux 不支援 LiveKit,請在其他平臺上測試音影片 |
| 沒有 Windows 工程 | 示例沒有 Windows 工程,要自己建立並測試 |
| 收不到推送 | Firebase / APNs / 廠商的配置、控制檯中的憑據編號、通知許可權和系統限制 |
