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

5.8 KiB
Raw Blame History

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
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();

工作流程

  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 编译配置

参考链接