Chat SDK
为 iOS 提供的开源消息框架
Chat SDK 是一个功能齐全的开源即时消息框架,适用于 iOS。Chat SDK 功能齐全,可伸缩且灵活,遵循以下关键原则:
- 开源。 Chat SDK 是开源的,对商业应用免费(见许可证)
- 完整数据控制。 您可以完全独立地访问用户的聊天数据
- 快速集成。 Chat SDK 提供了所有的功能,无需额外的集成
- 基于 Firebase。 由 Google Firebase 驱动
功能
- 私有和群组消息
- 公开聊天室
- 用户名/密码,Facebook,Twitter,匿名和自定义登录
- 电话号码认证
- 免费推送通知(使用 FCM)
- 文本、图片和位置消息
- 用户资料
- 用户搜索
- 可伸缩 - 支持每月超过 400k 的用户
- 由 Google Firebase 或 XMPP 驱动
- Firebase UI 支持
- 原生 Android 版本
- 原生 Web 版本
- 强大的灵活 API
所有功能详细信息可在功能页面上找到。
快速入门
模块
- 端到端加密
- 文件消息
- 输入指示器
- 已读回执
- 基于位置聊天
- 最后在线指示器
- 音频消息
- 视频消息
- 贴纸消息
- 联系人群集成
- 用户屏蔽
- 键盘覆盖
- 推送通知(免费)
- 文件存储(免费)
- Firebase UI(免费)
关于我们
了解 Chat SDK 的历史和我们的未来计划,请查看这篇帖子。
扩展性和成本
人们总是询问运行 Chat SDK 的费用。它会扩展到数百万用户吗?因此,我撰写了一篇关于这一点的文章。
寻找自由职业开发者
如果你是一名寻找工作的自由职业开发者,请加入我们的 Discord 服务器。我们经常有客户
社区
- Discord: 如需支持,请加入我们的服务器
- 支持项目: 在Patreon或Github Sponsors帮助我们
🙏 并获取访问高级模块的权限 - 点赞: 在StackOverflow上点赞我们的广告
- 通过编写代码贡献: 将贡献指南通过电子邮件发送至[email protected]
- 在Github上点个 star
⭐ - 点赞我们: 在Product Hunt
- 转发: 使用@chat_sdk分享你的Chat SDK项目
- 直播: 每周六18:00 CET在线直播,我会回答有关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
以获取代码的最新版本。 -
打开 App Delegate,将以下代码添加到初始化聊天处
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数据。这对于测试很有用,因为您可以拥有单独的 测试 和 生产 根路径。
- 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 Settings
-
URL types
-
请确保所有URL类型都已正确设置。您的应用URL类型应设置为您的包
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(在Apple开发者成员中心证书、标识符和配置文件中可用)并点击上传。
- 在Xcode项目中启用推送通知功能项目 -> 能力 -> 推送通知
- 在Xcode中打开能力选项卡。启用推送通知和以下后台模式:位置更新、后台获取、远程通知。
设置Firebase云函数
按照我们Chat SDK Firebase存储库中的说明操作。
安全规则
Firebase通过允许您编写规则来控制谁可以访问数据库以及可以写入什么来保护您的数据。这些规则还需要启用用户搜索。要启用这些规则,请参阅指南启用安全规则。
结论
恭喜!
要深入了解,请查看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
Firebase 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无法访问它们)。如果您在选择这些字段时按backspace键,它们的值将设置为默认值。
许可证
我们为这款应用程序提供两种许可证选择。您可以使用Chat SDK许可证或GPLv3许可证。
大多数Chat SDK用户要么是想将Chat SDK添加到将要发布到App Store的应用程序中,要么是想在自己的客户项目中使用Chat SDK。Chat SDK许可证为您提供免费的完全灵活性来完成这些事情。
Chat SDK 许可证摘要
- 许可证不会过期。
- 可用于创建无限数量的应用程序
- 仅限于分发二进制或对象形式
- 允许商业用途
- 可以修改源代码但不能分发修改(派生作品)
如果用户想要分发Chat SDK源代码,我们认为他们对代码进行的任何添加或修改都应该贡献回项目。GPLv3许可证确保如果分发源代码,它必须保持开源并可供社区使用。
GPLv3 许可证摘要
- 可以修改和分发源代码
- 允许商业用途
- 不允许分包或承担责任
- 必须包含原始许可证
- 必须披露源代码
这代表什么意思?
请查看许可证常见问题解答获取更多信息。