Open IM Flutter 客户端,与 Open IM 服务端配套。
本项目已移除 Firebase Cloud Messaging。移动端策略为:
- Android(当前默认):使用极光 JPush,并在支持 Google Play 服务的设备上启用 FCM 厂商通道;向服务端上报极光 Registration ID。
- Android(本地调试回退):显式传入
--dart-define=OPEN_ANDROID_JPUSH_ENABLED=false时,使用前台服务保活现有 WebSocket,不初始化或注册极光。 - iOS:极光 JPush + APNs Token Authentication,向服务端上报
pushProvider: "jpush"与极光 Registration ID。
Android 本地调试回退依赖应用进程和 WebSocket 仍然存活,用户强制停止应用或系统彻底杀死进程后无法继续收消息;正式离线通知使用配置好 FCM 厂商通道的极光。
Android 后台收到语音或视频来电时会使用全屏来电通知:系统授权后可点亮锁屏并直接进入接听页;未授权或系统不允许全屏展示时自动降级为普通高优先级来电通知。Android 14 及以上首次使用可能打开“全屏通知”系统授权页。
iOS 已接入 CallKit:App 仍能通过 WebSocket 收到来电时会显示系统来电界面。若要在 App 被系统挂起或杀死后仍可靠唤醒,需要另外配置 PushKit VoIP token,并由服务端通过 APNs 发送 VoIP Push。
- 在
android/local.properties(请勿把真实密钥提交到 Git)末尾增加 Android 极光应用 AppKey(须与控制台里该包名io.openware.openchat一致):
jpush.appKey=你的极光AppKey- Android 会从 Manifest 的
JPUSH_APPKEY初始化极光;OPEN_JPUSH_APPKEY可选。iOS 仍需传入极光控制台里 Bundle IDio.openware.openchat对应的 iOS 应用 AppKey。显式指定 Android AppKey 的运行示例:
flutter run --dart-define=OPEN_JPUSH_APPKEY=你的极光AppKey --dart-define=OPEN_ANDROID_JPUSH_ENABLED=true --dart-define=OPEN_JPUSH_PRODUCTION=falseGoogle FCM 配置文件位于 android/app/google-services.json,包名必须为 io.openware.openchat。项目通过 Google Services Gradle 插件和极光 FCM 插件生成并注册 FCM 客户端配置。
- Android applicationId 为
io.openware.openchat,与旧的com.csmimtbshop.com完全独立,可同时安装。 - Debug 构建固定使用仓库内
android/openchat-debug.jks(aliasopenchat-debug),不读取旧 WV 的 release keystore,也不依赖本机全局debug.keystore。 release仍只在android/key.properties存在时使用其中的签名;本地调试不需要配置 release 签名。- 更换包名后,极光/Firebase 控制台需要为
io.openware.openchat新建应用并更新对应配置。
生产环境请将 OPEN_JPUSH_PRODUCTION=true(与极光控制台、「正式 / 开发」推送环境一致)。
在 Xcode 中启用 Signing & Capabilities → Push Notifications;若需静默刷新可保留 Background Modes → Remote notifications。极光后台 iOS 证书建议使用 Token Authentication (.p8),并确认 Key ID、Team ID、Bundle ID 与当前应用一致。
离线通知点击跳聊天室依赖服务端在极光通知 extras 中下发会话定位字段,推荐格式:
{
"chatType": "private",
"peerId": "123",
"msgId": "server-message-id"
}群聊使用:
{
"chatType": "group",
"peerId": "456",
"msgId": "server-message-id"
}服务端推送渠道与密钥说明见同工作区 open-chat_server/push-channels-integration.md(若仓库分列,请指向对应路径)。
Android 工程固定使用 Gradle 8.14 以匹配 AGP 8.11.1。Java 25 + Gradle 8.14 会让 VS Code Java 扩展提示“Can't use Java 25 and Gradle 8.14”,这是 IDE 的 Gradle 项目导入告警,不影响 Flutter/Android 构建。
- 不要把 Gradle 直接升到 9.7.1;AGP/Flutter 兼容性需要单独验证。
- 本仓库的
.vscode/settings.json已关闭 Java 扩展的 Gradle 导入;Flutter/Dart 不受影响。 - 如果确实需要 Android Java 代码补全,安装 JDK 21,并将
java.import.gradle.java.home指向该 JDK 后再启用导入。