Chat SDK for iOS v5
开源 iOS 消息框架
Chat SDK 是一个为 iOS 提供全面功能的开源即时消息框架。Chat SDK 不依赖于特定的后端,支持 Firebase 和 XMPP。Chat SDK 功能全面,可扩展且灵活,遵循以下关键原则:
- 免费。
- 开源。
- 完全控制数据。 您可以完全和独享访问用户的聊天数据
- 快速集成。 Chat SDK 拥有全面的功能。
- 可扩展。 支持数百万的日活跃用户 [1, 2]
- 后端无关。 支持 Firebase 和 XMPP (ejabberd, Prosody, MongooseIM, Tigase, OpenFire)
功能
- 基于 Firebase 或 XMPP
- 私密和群聊
- 公开聊天室
- 用户名 / 密码、社交、匿名和自定义登录
- 电话号码认证
- 免费推送通知 (使用 FCM)
- 文本、图片和位置消息
- 回复 / 转发 / 复制 / 删除消息
- 使用 QR 码添加联系人
- 多图发送
- 用户资料,状态
- 用户搜索
- 可扩展 - 支持 40 万以上的每月活跃用户
- 由 Google Firebase或 XMPP 驱动
- Firebase UI 支持
- 本机 Android 版本
- 强大的灵活 API
专业功能
在 Github 赞助 或 Paetron 上赞助我们以获取以下功能。有关详细信息,请访问我们的 功能页面。
- 端到端加密
- 文件消息
- 输入状态指示器
- 已读回执
- 基于位置的聊天
- 最后在线指示器
- 音频消息
- 视频消息
- 表情消息
- 联系人簿集成
- 用户屏蔽
- 键盘叠加
- Giphy 消息
- 推送通知 (免费)
- 文件存储 (免费)
- Firebase UI (免费)
完整的功能说明请见 功能页面。
许可
本项目受多个不同许可证的保护。使用流程图来决定您可以使用哪种许可证。
标准模块
- ChatK!t
- ChatSDKCore
- ChatSDKCoreData
- ChatSDKExtras
- ChatSDKFirebase
- ChatSDKUI
- 演示 ChatKit
- 演示 Objective-C
- 演示 Swift
许可证
每月活跃用户 | |
---|---|
少于 100 万 | Apache 2.0 |
超过 100 万 | GPLv3或商业许可证 |
专业模块
- 演示 XMPP
- ChatSDKProXMPP
- ChatSDKProModules
许可证
每月活跃用户 | |
---|---|
任何 | GPLv3或商业许可证 |
商业许可
对于商业许可,您有几种选择
- 按月支付:[Patreon] 或 [Github Sponsors]
- 购买一次性许可证
- 如果您的项目拥有超过 100 万 MAU 或 XMPP 联系人 [[email protected]](mailto: [email protected])
快速开始
关于我们
了解 Chat SDK 的历史和我们未来的计划,请参阅这篇帖子。
可扩展性和成本
人们总是询问 Chat SDK 的运行成本是多少。它是否会扩展到数百万用户?所以我写了一篇文章来谈谈这个问题。
社区
- Discord:如果您需要支持,请加入我们的服务器
- 支持项目: [Patreon] 或 [Github Sponsors] 并获取对顶级模块的访问权限 🙏
- 投票:我们在StackOverflow上的广告
- 通过编写代码来贡献: 电子邮件发送贡献文档到[email protected]
- 在我们 Github 上给我们一个 star ⭐
- 在我们 Product Hunt 上投票: [Product Hunt]
- 推文: 使用 @chat_sdk 关于您的 Chat SDK 项目
- 直播流: 每周六 18:00 CEST 我们都会进行一次直播,届时我将回答有关 Chat SDK 的问题。详情请加入 Discord 服务器。
您也可以通过以下方式帮助我们
- 提供反馈和功能请求
- 报告错误
- 修复错误
- 编写文档
电子邮件至:[[email protected]]
我们还提供开发服务,我们是一支全栈开发者的团队,是 Firebase 的专家。更多信息请查阅我们的咨询网站。
运行演示项目
此存储库包含一个使用我们的 Firebase 账户配置的全功能版 Chat SDK。这是在开始将其整合到您的应用程序之前测试 Chat SDK 功能的好方法。
- 克隆 Chat SDK
- 在 Xcode 目录中运行
pod install
- 在 Xcode 中打开
Chat SDK Firebase.xcworkspace
文件 - 编译并运行
Swift 版本
我们目前正在更新 Chat SDK 以使用 Swift,这将逐渐发生。在此期间,Chat SDK API 与 Swift 项目完全兼容。
Chat SDK 与 Swift 项目完全兼容,并包含一个 Swift 演示项目。
- 克隆 Chat SDK
- 在 XcodeSwift 目录中运行
pod install
- 在 Xcode 中打开
ChatSDKSwift.xcworkspace
文件 - 编译并运行
将 Chat SDK 添加到您的项目中
快速入门指南 - 大约需要 10 分钟!
将 Chat SDK 添加到您的项目中
- 将 Chat SDK 开发 pods 添加到您的 Podfile 中
use_frameworks!
pod "ChatSDK"
pod "ChatSDKFirebase/Adapter"
pod "ChatSDKFirebase/Upload"
pod "ChatSDKFirebase/Push"
可选
pod "ChatSDK/ModAddContactWithQRCode"
-
运行
pod update
获取代码的最新版本。 -
打开 应用程序代理 并将以下代码添加到初始化聊天
Swift
AppDelegate.swift
import ChatSDK
将以下代码添加到 didFinishLaunchingWithOptions 函数的开头
let config = BConfiguration.init();
config.rootPath = "test"
// Configure other options here...
config.allowUsersToCreatePublicChats = true
// Define the modules you want to use.
var modules = [
FirebaseNetworkAdapterModule.shared(),
FirebasePushModule.shared(),
FirebaseUploadModule.shared(),
// Optional...
AddContactWithQRCodeModule.init(),
]
BChatSDK.initialize(config, app: application, options: launchOptions, modules: modules)
self.window = UIWindow.init(frame: UIScreen.main.bounds)
self.window?.rootViewController = BChatSDK.ui().splashScreenNavigationController()
self.window?.makeKeyAndVisible();
然后添加以下方法
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
BChatSDK.application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
BChatSDK.application(application, didReceiveRemoteNotification: userInfo)
}
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
return BChatSDK.application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
return BChatSDK.application(app, open: url, options: options)
}
Objective C
查看演示项目。
根路径
根路径变量允许您在一个Firebase账号上运行多个Chat SDK实例。每个不同的根路径将代表一组完全分开的Firebase数据。这对于测试很有用,因为您可以有单独的测试和 prod 根路径。
- Chat SDK 已添加到您的项目中
Firebase 设置
- 访问 Firebase 网站,并注册
- 访问 Firebase控制台 并创建新项目
- 点击 添加项目
- 选择一个名称和位置
- 点击 设置(齿轮图标)。在“常规”选项卡中,点击 将Firebase添加到您的iOS应用
- 输入您的bundle ID
- 下载 GoogleServices 文件,并将其添加到Xcode项目的根目录
注意
建议打开您下载的GoogleService-Info.plist
文件并检查是否包含API_KEY
字段。有时Firebase的自动下载不包括该字段。要修正,只需从项目设置菜单重新下载plist。
-
将以下行从示例ChatSDK的 Info.plist 文件复制到您的项目的 Info.plist
-
App Transport Security 设置
-
URL 类型
-
确保URL类型设置正确。您的应用的URL类型应设置为您的bundle
id
-
所有隐私行。这些将允许应用访问相机、位置和通讯录
-
在Firebase仪表板中,点击 身份验证 -> 登录方法 并启用所有适当的方法
-
添加 安全规则。这些规则还启用了优化的用户搜索,因此此步骤非常重要!
-
启用文件存储 - 点击 存储 -> 开始使用
-
启用 推送通知
-
启用位置消息。获取一个 Google Maps API 密钥。然后在Chat SDK配置中添加它
Objective C
config.googleMapsApiKey = @"YOUR API KEY";
Swift
config.googleMapsApiKey = "YOUR API KEY"
推送通知
推送通知模块允许您使用Firebase云消息发送免费的推送通知。
- 设置一个 APN密钥。
- 在Firebase控制台中,在您的项目中选择齿轮图标,选择项目设置,然后选择云消息选项卡。
- 在iOS应用配置中的APNs认证密钥下,点击上传按钮。
- 浏览到您保存密钥的位置,选择它,然后点击打开。添加密钥的密钥ID(在苹果开发者中心“证书、标识符和配置文件”中可用)并点击上传。
- 在Xcode项目中启用推送通知能力 项目 -> 能力 -> 推送通知
- 在Xcode中打开 能力 选项卡。启用 推送通知 和以下 后台模式:位置更新、后台获取、远程通知。
设置Firebase云函数
按照我们 Chat SDK Firebase仓库 中的说明进行操作
安全规则
Firebase通过允许您编写规则来管理谁可以访问数据库以及可以写入什么来保护您的数据。这些规则还需要启用用户搜索。要启用规则,请参阅 启用安全规则 指南。
结论
恭喜!🎉🎉 您刚刚将您的应用转换成了一个功能齐全的即时通讯应用!继续阅读下面以了解如何进一步自定义Chat SDK。
要深入了解,请查看API指南以获取以下帮助
- 与Firebase服务器交互
- 创建和更新实体
- 自定义身份验证
- 常见代码示例
- 自定义用户界面
在此处查看API文档。
下一步
文档
配置
有许多可用的配置选项。请查看BConfiguration 类。使用此类,您可以执行以下操作:
- 更改聊天气泡颜色
- 更改默认用户名
- 启用或禁用不同类型的登录
- 显示或隐藏空聊天
- 等等...
自定义 UI
要自定义 UI,您可以注册不同视图的子类。您可以使用 UI 服务 BChatSDK.ui
来这样做。例如,要注册新的登录视图控制器,您将使用:
BChatSDK.ui.loginViewController = [[YourViewController alloc] initWithNibName:Nil bundle: Nil];
要修改聊天视图,您将注册一个提供者
[BChatSDK.ui setChatViewController:^BChatViewController *(id<PThread> thread) {
return [[YourChatViewController alloc] initWithThread:thread];
}];
应用中每个视图控制器都可以用这种方式进行自定义。
在您的应用中使用 Chat SDK 视图
您可以将 Chat SDK 的任何视图添加到您的应用中。请检查PInterfaceFacade 中的选项。您可以使用以下模式添加任何视图。这里我们使用界面服务来获取特定的视图。
Objective-C
UIViewController * privateThreadsViewController = [BChatSDK.ui privateThreadsViewController];
Swift
let privateThreadsViewController = BChatSDK.ui().a.privateThreadsViewController()
将 Chat SDK 集成到现有应用中
为此,您可以利用 BIntegrationHelper
类。这提供了一些辅助方法,使得将 Chat SDK 集成到您的应用中变得更容易。
在最基本层面,您需要做以下事情
- 当您的应用进行身份验证时,验证 Chat SDK。最好的办法是在服务器上根据本指南生成自定义令牌。然后使用此方法初始化 Chat SDK
Objective-C
[BIntegrationHelper authenticateWithToken:@"your token"];
Swift
BIntegrationHelper.authenticate(withToken: "your token")
- 当您的用户名字或头像更改时,更新 Chat SDK 用户的名字和头像。您可以使用以下方法进行操作
Objective-C
[BIntegrationHelper updateUserWithName:@"Name" image: image url: imageURL];
Swift
BIntegrationHelper.updateUser(withName: "Name", image: image, url: imageURL)
- 当您的应用注销时,从 Chat SDK 注销。一个好的地方是在登录屏幕显示时进行此操作
Objective-C
[BIntegrationHelper logout];
Swift
BIntegrationHelper.logout()
- 现在 Chat SDK 已集成到您的应用中。
模块设置
Chat SDK 可以添加许多免费的和付费的扩展。
Firebase 模块
对于以下模块:
免费的模块位于 chat-sdk-ios/ChatSDKFirebase 文件夹中。付费模块可以通过上述提供的链接购买和下载。
要安装一个模块,您应遵循以下步骤:
- 将模块代码复制到您的 Xcode 源代码文件夹,并将文件添加到您的项目中(在 Xcode 内)。如果您正在使用符号链接,您可以使用上述提到的符号链接脚本,然后仅将 ChatSDKFirebase 文件夹的链接添加到 Xcode。
- 将必要的依赖项添加到您的 Podfile 中
- 在配置期间将模块添加到模块数组中。
Firebase UI
《文件 UI 模块》允许您使用原生 Firebase 用户界面进行身份验证。
将文件添加到您的 Xcode 项目后,请向 App Delegate 添加以下内容以启用模块:
Objective C
AppDelegate.m -> application: didFinishLaunchingWithOptions
#import "BFirebaseUIModule.h"
[[[BFirebaseUIModule alloc] init] activateWithProviders: @[]];
Swift
[您的项目]-Bridging-Header.h
#import "BFirebaseUIModule.h"
AppDelegate.swift
BFirebaseUIModule.init().activate(withProviders: []);
您应传递您想要支持的 FUIAuthProvider
对象数组。
根据您要支持的认证方法,请将以下内容添加到您的 Podfile 中:
pod 'FirebaseUI/Facebook', '~> 4.0'
pod 'FirebaseUI/Google', '~> 4.0'
pod 'FirebaseUI/Twitter', '~> 4.0'
pod 'FirebaseUI/Phone', '~> 4.0'
然后运行 pod install
。
注意
如果您想使用 Firebase Auth UI,请确保注释出以下行
BNetworkManager.shared().a.auth().setChallenge(BLoginViewController.init(nibName: nil, bundle: nil));
其他模块
对于以下模块:
这些模块作为开发 pod 分发。下载模块后,解压并将其添加到 ChatSDKModules 文件夹中。然后
- 打开您的 Podfile
- 添加以下行
pod "ChatSDKModules/[ModuleName]", :path => "[Path to ChatSDKModules folder]"
- 运行
pod install
- 模块现在已激活
使用 Chat SDK API
Chat SDK API基于网络管理器和一系列处理程序。一个好的开始是查看处理程序的位置:Pods/Development Pods/ChatSDK/Core/Core/Classes/Interfaces
。在这里,您可以查看处理程序接口,它们有很好的文档。要使用处理程序,您可以使用以下代码
Objective C
[[BChatSDK.handler_name function: to: call:]
Swift
BNetworkManager.shared().a.handler_name() function: to: call:]
搜索用户
例如,要搜索用户,您可以使用搜索处理程序
-(RXPromise *) usersForIndexes: (NSArray *) indexes withValue: (NSString *) value limit: (int) limit userAdded: (void(^)(id<PUser> user)) userAdded;
在这里,您传递一系列要在搜索中使用的索引,即姓名、电子邮件等,以及一个值。它将返回一系列用户对象。
您还可以通过查看BFirebaseSearchHandler
类来查看这些处理程序的示例实现。还可以看到该方法如何在Chat SDK中使用。
开始聊天
要开始聊天,您可以使用核心处理程序。
-(RXPromise *) createThreadWithUsers: (NSArray *) users
threadCreated: (void(^)(NSError * error, id<PThread> thread)) thread;
当此方法完成时,线程已在Firebase上创建,所有用户都已添加。然后您可以使用接口适配器打开线程。
UIViewController * chatViewController = [BChatSDK.ui chatViewControllerWithThread:thread];
因此,一个更完整的例子看起来像这样
-(void) startChatWithUser {
MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
hud.label.text = [NSBundle t:bCreatingThread];
[[BChatSDK.core createThreadWithUsers:@[_user] threadCreated:^(NSError * error, id<PThread> thread) {
if (!error) {
[self pushChatViewControllerWithThread:thread];
}
else {
[UIView alertWithTitle:[NSBundle t:bErrorTitle] withMessage:[NSBundle t:bThreadCreationError]];
}
[MBProgressHUD hideHUDForView:self.view animated:YES];
}];
}
-(void) pushChatViewControllerWithThread: (id<PThread>) thread {
if (thread) {
UIViewController * chatViewController = [BChatSDK.ui chatViewControllerWithThread:thread];
[self.navigationController pushViewController:chatViewController animated:YES];
}
}
解决问题CocoaPods
- 始终打开.xcworkspace文件,而不是.xcodeproj文件
- 检查CocoaPod警告 - 在继续之前,确保修复任何警告
- 确保未设置基本配置:项目 -> 项目名称 -> 信息 -> 配置
- 确保“仅为主架构构建”设置对主项目和pods项目相同。
- 检查Xcode项目中的构建设置,并查看哪些字段加了粗体(这意味着它们的值已被覆盖,CocoaPods无法访问它们)。如果按退格键选择这些字段,它们的值将设置为默认值。
许可证
我们为这个应用程序提供两种许可证选择。您可以使用Chat SDK许可证或GPLv3许可证。
大多数Chat SDK用户要么想将Chat SDK添加到将发布到App Store的应用程序中,要么想为他们的客户在其项目中使用Chat SDK。《Chat SDK》许可证让您免费这么做,具有完全的灵活性。
Chat SDK许可证摘要
- 许可证不会过期。
- 可用于创建无限数量的应用程序
- 只能以二进制或对象形式分发
- 允许商业使用
- 可以修改源代码,但不能分发修改(衍生作品)
如果用户想分发Chat SDK源代码,我们认为他们对该代码所做的任何增改或修改都应贡献回项目。GPLv3许可证确保如果源代码被分发,它必须保持开源状态,可供社区使用。
GPLv3许可证摘要
- 可以修改和分发源代码
- 允许商业使用
- 不能转授权或承担责任
- 必须包含原始许可证
- 必须披露源代码
这意味着什么?
请查看许可证常见问题解答以获取更多信息。