LighthouseApp/CRISP_CHAT_FIX_SUMMARY.md
speakeloudest 75d4c48e41
Some checks failed
Build Windows / build (push) Has been cancelled
feat: 源码提交
2025-10-19 23:30:54 -07:00

185 lines
5.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Crisp Chat 功能修复总结(支持多平台)
## 问题描述
Crisp 客服聊天功能无法使用,原因是:
1. `crisp_sdk` 包被注释掉(依赖 `flutter_inappwebview` 有问题)
2. 所有 Crisp 相关代码被注释
3. 用户界面显示"客服功能暂时不可用"
4. `crisp_chat` 包只支持 iOS/Android不支持桌面平台
## 解决方案
### 1. 依赖更新
**文件**: `pubspec.yaml`
- 移除了有问题的 `crisp_sdk`
- 添加了 `crisp_chat: ^2.4.1`(使用原生实现,不依赖 `flutter_inappwebview`
```yaml
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 所需的权限:
```xml
<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 使用示例
```dart
// 创建配置
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();
```
## 工作流程
1. 用户点击客服按钮
2. 进入 `KRCrispView` 页面
3. `KRCrispController` 初始化:
- 获取用户信息(邮箱/设备ID
- 创建 `CrispConfig`
- 设置会话数据
4. 初始化完成后自动调用 `openCrispChat()`
5. 显示原生 Crisp 聊天界面
6. 用户关闭聊天后,自动返回上一页
## 测试建议
### 前置条件
1. 确保 `AppConfig.kr_website_id` 配置了有效的 Crisp Website ID
2. 在 Crisp 控制台配置网站设置
### 测试步骤
1. **基础功能测试**
- 打开应用
- 进入"我的"页面
- 点击"客服"按钮
- 验证 Crisp 聊天窗口是否正确打开
2. **用户信息测试**
- 登录用户状态下,验证用户邮箱是否正确传递
- 未登录状态下,验证设备 ID 是否正确使用
3. **会话数据测试**
- 在 Crisp 控制台查看会话数据
- 验证平台、语言、设备 ID 等信息是否正确
4. **权限测试 (iOS)**
- 测试相机权限提示
- 测试麦克风权限提示
- 测试相册权限提示
5. **跨平台测试**
- Android 设备测试
- iOS 设备测试
- Windows/macOS 桌面测试(如果支持)
## 注意事项
1. **Website ID 配置**
- 确保在 `AppConfig` 中配置了正确的 Crisp Website ID
- 可以从 Crisp 控制台获取Settings → Website Settings → Website ID
2. **推送通知**
- 如需启用推送通知,需要额外配置 Firebase
- 参考 `crisp_chat` 包文档进行配置
3. **语言支持**
- Crisp 支持多语言
- 当前实现会根据应用语言自动设置zh、zh-tw、en 等)
4. **隐私合规**
- 确保在隐私政策中说明使用 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 编译配置
## 参考链接
- [crisp_chat 包文档](https://pub.dev/packages/crisp_chat)
- [Crisp 官方文档](https://docs.crisp.chat/)
- [Crisp iOS SDK](https://github.com/crisp-im/crisp-sdk-ios)
- [Crisp Android SDK](https://github.com/crisp-im/crisp-sdk-android)