5.8 KiB
5.8 KiB
Crisp Chat 功能修复总结(支持多平台)
问题描述
Crisp 客服聊天功能无法使用,原因是:
crisp_sdk包被注释掉(依赖flutter_inappwebview有问题)- 所有 Crisp 相关代码被注释
- 用户界面显示"客服功能暂时不可用"
crisp_chat包只支持 iOS/Android,不支持桌面平台
解决方案
1. 依赖更新
文件: pubspec.yaml
- 移除了有问题的
crisp_sdk包 - 添加了
crisp_chat: ^2.4.1(使用原生实现,不依赖flutter_inappwebview)
crisp_chat: ^2.4.1 # 使用原生实现的 crisp_chat,不依赖 flutter_inappwebview
2. 控制器重写(支持多平台)
文件: lib/app/modules/kr_crisp_chat/controllers/kr_crisp_controller.dart
- 完全重写了控制器以支持多平台
- 移动平台(iOS/Android):
- 使用
crisp_chat包的原生 API - 使用
CrispConfig配置 Crisp - 使用
FlutterCrispChat.openCrispChat()打开聊天窗口 - 使用
FlutterCrispChat.setSessionString()设置会话数据
- 使用
- 桌面平台(macOS/Windows/Linux):
- 使用 WebView 加载 Crisp 官方嵌入脚本
- 动态生成包含 Crisp SDK 的 HTML 页面
- 通过 JavaScript 设置用户信息和会话数据
- 自动打开聊天窗口
主要改进:
- ✅ 支持所有平台(iOS、Android、macOS、Windows、Linux)
- ✅ 自动检测平台并选择合适的实现方式
- ✅ 支持用户邮箱和昵称设置
- ✅ 自动收集平台信息
- ✅ 设置语言、应用版本、设备 ID 等会话数据
3. 视图重写(多平台支持)
文件: lib/app/modules/kr_crisp_chat/views/kr_crisp_view.dart
- 移除了占位视图
- 移动平台: 初始化成功后自动打开 Crisp 原生聊天窗口,窗口关闭后返回
- 桌面平台: 使用
webview_flutter在应用内显示 Crisp 聊天界面 - 添加了错误处理和重试功能
- 使用
PopScope替代已弃用的WillPopScope - 移除了
setBackgroundColor调用(macOS 不支持)
4. iOS 配置更新
文件: ios/Runner/Info.plist
添加了 Crisp 所需的权限:
<key>NSCameraUsageDescription</key>
<string>需要相机权限以支持拍照功能</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限以支持语音消息功能</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>需要相册权限以支持图片上传功能</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>需要相册添加权限以保存图片</string>
5. Android 配置
文件: android/app/build.gradle
- ✅
compileSdk 36- 已满足要求(需要 35 或更高) - ✅ 网络权限已在
AndroidManifest.xml中配置
技术细节
crisp_chat vs crisp_sdk
| 特性 | crisp_chat | crisp_sdk |
|---|---|---|
| 实现方式 | 原生 SDK | WebView |
| 依赖 | 无额外依赖 | 需要 flutter_inappwebview |
| 性能 | 更好 | 较慢 |
| 兼容性 | 更好 | 依赖问题 |
| 最新版本 | 2.4.1 (2025) | 1.1.0 (2024) |
API 使用示例
// 创建配置
final config = CrispConfig(
websiteID: 'your-website-id',
enableNotifications: true,
user: User(
email: 'user@example.com',
nickName: 'User Name',
),
);
// 打开聊天窗口
await FlutterCrispChat.openCrispChat(config: config);
// 设置会话数据
FlutterCrispChat.setSessionString(key: 'platform', value: 'android');
// 重置会话
await FlutterCrispChat.resetCrispChatSession();
工作流程
- 用户点击客服按钮
- 进入
KRCrispView页面 KRCrispController初始化:- 获取用户信息(邮箱/设备ID)
- 创建
CrispConfig - 设置会话数据
- 初始化完成后自动调用
openCrispChat() - 显示原生 Crisp 聊天界面
- 用户关闭聊天后,自动返回上一页
测试建议
前置条件
- 确保
AppConfig.kr_website_id配置了有效的 Crisp Website ID - 在 Crisp 控制台配置网站设置
测试步骤
-
基础功能测试
- 打开应用
- 进入"我的"页面
- 点击"客服"按钮
- 验证 Crisp 聊天窗口是否正确打开
-
用户信息测试
- 登录用户状态下,验证用户邮箱是否正确传递
- 未登录状态下,验证设备 ID 是否正确使用
-
会话数据测试
- 在 Crisp 控制台查看会话数据
- 验证平台、语言、设备 ID 等信息是否正确
-
权限测试 (iOS)
- 测试相机权限提示
- 测试麦克风权限提示
- 测试相册权限提示
-
跨平台测试
- Android 设备测试
- iOS 设备测试
- Windows/macOS 桌面测试(如果支持)
注意事项
-
Website ID 配置
- 确保在
AppConfig中配置了正确的 Crisp Website ID - 可以从 Crisp 控制台获取:Settings → Website Settings → Website ID
- 确保在
-
推送通知
- 如需启用推送通知,需要额外配置 Firebase
- 参考
crisp_chat包文档进行配置
-
语言支持
- Crisp 支持多语言
- 当前实现会根据应用语言自动设置(zh、zh-tw、en 等)
-
隐私合规
- 确保在隐私政策中说明使用 Crisp 客服系统
- 告知用户会话数据的收集和使用
相关文件
pubspec.yaml- 依赖配置lib/app/modules/kr_crisp_chat/controllers/kr_crisp_controller.dart- 控制器lib/app/modules/kr_crisp_chat/views/kr_crisp_view.dart- 视图lib/app/modules/kr_crisp_chat/bindings/kr_crisp_binding.dart- 绑定ios/Runner/Info.plist- iOS 权限配置android/app/build.gradle- Android 编译配置