PubNub ChatEngine 是一个基于 Objective-C 的面向对象事件发射框架,用于构建聊天应用程序。它极大地缩短了构建聊天应用程序的时间,并提供了一些基本组件,如输入指示器、在线状态监控和消息历史记录。
实时服务器组件由 PubNub 提供。ChatEngine 被设计为可扩展的,包括一个插件框架,以简化添加新功能的过程。
文档
您可以在 完整文档网站 上找到完整的文档。以下链接提供了方便的概览。
概念
- 我 - 是您,亲爱的。代表当前应用程序的用户。
- 用户和状态 - 解释如何使用 ChatEngine 与其他用户交互,并获得有关他们的更多信息。
- 聊天 - ChatEngine 的主要功能。这些是用户彼此交谈的独立房间。
- 事件 - 发生在聊天中的事情。例如,
message
或image_upload
。 - 事件数据 - 与事件一起发送的数据。包括事件发送者是谁以及它是发送到哪个聊天的信息。
- 命名空间 - ChatEngine 有很多事件,因此我们使用命名空间来隔离它们。
- 通配符 - 获取单个命名空间的所有事件,例如$.online.*可以获取所有类型的在线事件。
- 搜索 - 获取过去发生的事件。通常在应用程序启动时执行,以显示之前发生的事情。
- 全局聊天 - 所有用户都连接到的聊天。用于状态管理和应用程序级事件。
- 在线列表 - 获取聊天室中所有在线用户。
- 认证 - 如何使用认证密钥识别您的用户并保护频道访问。
- 隐私 - 每个用户都有一个特殊的聊天频道,只有他们可以发布消息,还有一个直接聊天频道,其他人无法阅读。
- 私人聊天 - 创建只有其他人不能加入的私人聊天。
- 错误处理 - 有时事情并不像预期那样进行,这里介绍如何优雅地捕获错误。
- 插件 - 使用插件添加额外功能,例如表情符号或输入指示器。
- 构建插件 - 如果你需要的功能不存在,可以轻松构建它。与我们分享吧!
- PubNub 功能 - ChatEngine使用PubNub功能作为服务器组件,详细信息请见此处。
- PubNub通道拓扑 - 描述ChatEngine在后台使用的PubNub通道。
插件
图片上传
使用UploadCare服务上传图片并在聊天中渲染它们。
Markdown支持
在接收到消息时,在NSAttributedString中渲染Markdown。
静音用户
允许当前用户停止接收其他用户的事件。
在线用户搜索
在聊天中通过列表搜索在线用户的简单方法。
输入指示器
提供便捷方法,当用户开始或停止输入时触发。
未读消息
允许您将聊天标记为后台运行,并将计数器增加,当事件发送到它时。
表情支持
使用图像作为可能还不支持
事件状态和已读回执
在某人阅读并/或将消息标记为已读时发出额外的事件。
推送通知
Gravatar 支持
使用 Gravatar 服务根据用户状态信息创建头像。
随机用户名
一个插件,为每个用户生成一个结合颜色和动物的随机用户名。
开发
设置环境
需要在用于应用程序开发的机器上安装 Xcode 和 CocoaPods。执行以下步骤完成环境准备
- 从 AppStore 安装 Xcode
- 安装完成后,启动 Xcode 并按照指示安装命令行工具
- 在 Terminal 中运行以下命令安装 CocoaPods
sudo gem install cocoapods
完成这些步骤后,您可以开始构建应用程序。
运行测试
在尝试构建和运行测试之前,您应该完成 环境设置。目前,总共有 1198 个测试(80 个集成测试和 1118 个单元测试)。运行整个测试套件需要大约 ~11分钟。
测试的 Xcode 项目包含各种构建配置,可以选择特定类型的测试:单元,集成,带有代码覆盖的单元,带有代码覆盖的集成以及所有带有代码覆盖的测试。
要运行测试,请按照以下说明进行
- 克隆仓库
git clone [email protected]:pubnub/chat-engine-apple.git
- 导航到 Tests 项目目录
cd <path to clone location>/chat-engine-apple/Tests
- 安装必需的依赖项(依赖项列表可以在 Podfile 中查看)
pod install
- 安装好依赖项后,应使用
ChatEngine Tests.xcworkspace
文件打开项目。 - 在打开窗口的左上角,您应该能够找到以下目标的下拉列表
[测试] 全部代码覆盖率
[测试] 集成代码覆盖率
[测试] 单元代码覆盖率
[测试] iOS 集成
[测试] iOS 单元
- 选择所需的测试目标后,请确保选择了(带有蓝色背景)iPhone 模拟器以用于测试部署。
- 按快捷键
Cmd+U
启动测试套件。
从 0.9.2 迁移到 0.9.3
事件处理程序签名已更改,以更好地支持 Swift。从现在起,所有事件处理程序将只接收到 CENEmittedEvent 类型的实例。
这就是现在处理程序的样子
self.client.me.direct.on(@"$.invite", ^(CENEmittedEvent *event) {
NSDictionary *payload = ((NSDictionary *)event.data)[CENEventData.data];
CENUser *sender = payload[CENEventData.sender];
CENChat *secretChat = self.client.Chat().name(payload[@"channel"]).create();
});
支持
- 如果您 需要帮助,有 一般性问题 或者有 功能请求 或要提交 错误报告,请联系 [email protected]