Appearance
装进 iOS
用 Swift Package Manager 添加依赖,写两行代码,APP 里就有了客服入口。
开始之前
- 一个渠道 ID,工作台 App 渠道的 SDK 接入 页把它嵌在初始化代码里,也可以在 开发者 页的 接入参数 卡单独复制,见创建 App 渠道
- APP 的部署目标不低于 iOS 13
- Xcode 能访问 GitHub(SDK 通过 Swift Package Manager 分发)
动手之前可以先跑一遍示范 App:扫码装上,填进你的渠道 ID 就连到你的工作台。先确认渠道和账号这一侧是通的,之后自己集成再出问题,范围就缩小到你的工程配置。
操作步骤
1. 添加依赖
在 Xcode 里选择 File > Add Package Dependencies,在搜索框里填仓库地址:
https://github.com/sandywk/hecong-ios-sdk依赖规则选 Up to Next Major Version,版本填 0.6.4,把 HecongChatSDK 添加到你的 APP target。
用 Package.swift 管理依赖的工程写成:
swift
.package(url: "https://github.com/sandywk/hecong-ios-sdk", from: "0.6.4")已发布的版本都列在仓库的 tags 页面。
国内网络拉取可能较慢
Swift Package Manager 从 GitHub 拉取源码,国内网络下首次解析依赖可能需要等待较久。Xcode 会持续显示解析进度,这是网络问题,不是集成出错。
Swift Package Manager 只在编译期工作,它不会抬高你的 APP 的运行时最低版本要求。
2. 登记渠道 ID
在 APP 启动流程里调一次 configure:
swift
import HecongChatSDK
HecongChat.shared.configure(HecongChatConfig(channelId: "你的渠道ID"))这一步只登记参数,不产生任何网络请求,也不收集任何信息。
放在用户同意隐私政策之后
虽然这一步本身零联网,仍建议放在用户同意隐私政策之后再调用。把所有第三方 SDK 的初始化统一放在同意之后,是应对隐私合规审核最省事的做法。
想让客户第一次点开客服更快,configure 之后可以再调一次 HecongChat.shared.prewarm(),SDK 会提前把整个聊天页准备好。这一步会联网,必须放在用户同意隐私政策之后;不调也能正常用,只是第一次打开要多等一下。
3. 打开客服
在「联系客服」的点击事件里:
swift
HecongChat.shared.push(config: HecongChatConfig(channelId: "你的渠道ID"))SDK 自己找到当前的导航栏,把客服页推进去,标题填成「在线客服」(你已经设过标题的话不覆盖),底部 Tab 栏自动隐藏。不用传任何页面或导航控制器,UIKit 和 SwiftUI 工程写法一样。 标题可以改成你自己的,配置项见聊天页的四种形态。
键盘避让、安全区适配、前后台切换,SDK 内部处理,你不需要额外做什么。
打开客服还有另外三种方式:半屏弹层、嵌进自己的页面、整屏沉浸。调用方法各不相同,效果对比见聊天页的四种形态 —— 四档共用同一套配置,换档不影响你已经接好的东西。
4. 填好权限用途说明
客户要发语音和拍照,APP 需要麦克风和相机权限。在 Info.plist 里补两条用途说明:
| 键 | 填什么 |
|---|---|
NSMicrophoneUsageDescription | 说明在客服会话中录制语音消息需要使用麦克风 |
NSCameraUsageDescription | 说明在客服会话中拍摄照片或视频发给客服需要使用相机 |
苹果会审核这两句话的内容。写清楚是哪个功能、用来做什么,只写「需要相机」这类空泛描述会被拒。相册选择不需要单独声明。
语音消息对系统版本有额外要求,写应用市场文案前先看文件上传限制。
隐私清单不用你操心
苹果要求第三方 SDK 随包提供隐私清单。合从的 SDK 已经内置,你不需要为它补任何声明。提交时如果收到 ITMS-91053、ITMS-91055 这类隐私清单告警,来源是别的依赖,排查方向不在合从这边。
验证接入成功
把 APP 装到手机或模拟器上,点开客服,你应该看到一个完整的对话界面。发一条消息,在客服工作台的对话列表里能看到它。

App 渠道的会话不能在浏览器里验证,原因见 APP 接入概述。
用 Objective-C 写
SDK 的公共接口都可以从 Objective-C 调用。导入方式要用 @import,不能写成 #import <HecongChatSDK/HecongChatSDK-Swift.h> —— 那是框架形态的写法,通过 Swift Package Manager 引入时那个头文件路径不存在,照写编译不过。
需要工程开启 Clang 模块(CLANG_ENABLE_MODULES = YES),Xcode 新建的工程默认就是开的。
objc
// SPM 引入的 Swift 包在 Objective-C 里用模块导入,不是头文件导入
@import HecongChatSDK;
// APP 启动时
HecongChatConfig *config = [[HecongChatConfig alloc] initWithChannelId:@"你的渠道ID"];
[[HecongChat shared] configure:config];
// 打开客服
[[HecongChat shared] pushWithConfig:config];常见问题
Xcode 解析依赖一直转圈
症状:添加 Package 之后长时间停在 Resolving Packages。
成因:从 GitHub 拉取源码受网络影响。
解决:等待或换用更稳定的网络环境。已经解析失败的,在 File > Packages > Reset Package Caches 之后重试。
点开客服是一片空白
症状:客服页面推进来了,但里面什么都没有。
成因:多数是网络问题,设备连不上合从的服务。
解决:确认设备网络正常。断网时 SDK 会显示一张带重试的提示页,看到那张页面说明 SDK 本身正常。
客户在 APP 里退出登录后,下一个人看到了上一个人的记录
症状:同一台设备上换个账号登录,客服对话里还是上一位的历史消息。
成因:退出登录时没有通知 SDK 解绑身份。
解决:在退出登录的流程里调 HecongChat.shared.resetUser(),见传客户资料与退出登录。
上线前对照一遍
装通了只是第一步,下面这些漏掉的症状都比较隐蔽,上线前逐条确认:
- [ ] 退出登录时调了
resetUser()。不调的话,下一个在同一台设备登录的人会看到上一位的聊天记录(做法) - [ ] 多进程 APP 设了 WebView 数据目录后缀,不设会直接崩溃(做法)
- [ ] 真机切到后台,工作台里这位客户变成离线。不变说明前后台事件没接,离线推送一条都不会发(做法)
- [ ] 配了离线消息通知的话,服务端真收到过一次回调(怎么自测)
- [ ] 要做未读红点的话,调了
startUnreadTracking()(做法) - [ ] 提交应用市场前,按隐私合规与信息公示把 SDK 公示信息填进你的隐私政策 —— 漏了会被打回
- [ ]
Info.plist里两条权限用途说明都写清楚了具体功能与用途(做法)
下一步
- 传客户资料与退出登录 —— 让客服知道来的是哪位会员
- 未读消息与红点 —— 在 APP 入口上显示未读数
- 接口速查 —— 全部配置项与回调
- 接入问题排查 —— 装不上、点开空白、红点不亮时对照这一页
- 隐私合规与信息公示 —— 上架前要在自己的隐私政策里公示什么