Chat SDK
为 iOS 开源消息框架
Chat SDK 是一个功能齐全的免费开源即时消息框架,用于 iOS。Chat SDK 功能齐全,可扩展,灵活,并遵循以下关键原则:
- 开源。 Chat SDK 是开源的,并免费提供给商业应用(请参阅许可证)
- 完全数据控制。 您可以完全独家访问用户的聊天数据
- 快速集成。 Chat SDK 自带各类功能
- Firebase 受 Google Firebase 支持
功能
- 私人和群组消息
- 公共聊天室
- 用户名/密码、Facebook、Twitter、匿名和自定义登录
- 手机号认证
- 免费推送通知(使用 FCM)
- 文字、图片和位置消息
- 用户资料
- 用户搜索
- 可伸缩 - 支持 400k 月活跃用户
- 由 Google Firebase 或 XMPP 支持
- Firebase UI 支持
- 本地安卓版本
- 本地网页版本
- 强大的灵活 API
完整的详细功能请查看 功能页面。
快速入门
模块
- 端到端加密
- 文件消息
- 打字指示
- 已读回执
- 基于位置的聊天
- 最后在线指示
- 音频消息
- 视频消息
- 表情消息
- 联系人簿集成
- 用户屏蔽
- 键盘覆盖层
- 推送通知(免费)
- 文件存储(免费)
- Firebase UI(免费)
关于我们
在这篇帖子中了解 Chat SDK 的历史和我们的未来计划:此处。
可扩展性和成本
人们总是问 Chat SDK 运行要花多少钱。它能否扩展到数百万用户?所以我写了一篇文章谈论这一点。
寻找自由职业开发者
如果你是寻找工作的自由职业开发者,加入我们的 Discord 服务器。我们经常有客户
社区
- Discord: 如需支持,请加入我们的服务器
- 支持项目: Patreon或GitHub Sponsors
🙏 并获取高级模块的访问权限 - 点赞:在StackOverflow上的我们的广告
- 通过编写代码贡献:将贡献文档通过电子邮件发送到[email protected]
- 在Github上给我们一个星标
⭐ - 点赞我们:Product Hunt
- 推文:使用@chat_sdk关于你的Chat SDK项目
- 直播:每个星期六18:00 CET,我将进行一次直播,解答有关Chat SDK的问题。更多详情请加入Discord服务器
您还可以通过以下方式帮助我们
- 提供反馈和功能请求
- 报告错误
- 修复错误
- 撰写文档
通过电子邮件联系我们:[email protected]
我们还提供开发服务,我们是一支全栈开发团队的成员,同时也是Firebase专家。更多信息请查看我们的咨询网站。
运行演示项目
此仓库包含一个功能完整的Chat SDK版本,它是使用我们的Firebase帐户配置的。在集成到您的应用之前,这是测试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添加到您的项目中
- 在Podfile中添加Chat SDK开发pods
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网站(https://firebase.com/)并注册新用户
- 前往Firebase控制台(https://console.firebase.google.com/)并创建一个新的项目
- 点击添加项目
- 选择一个名称和位置
- 点击设置(齿轮图标)。在“常规”选项卡中,点击将Firebase添加到您的iOS应用
- 输入您的bundle ID
- 下载< stool>GoogleServices文件并将其添加到您Xcode项目的根目录
注意
建议您打开下载的< code>GoogleService-Info.plist文件,并检查是否包含< code>API_KEY字段。有时Firebase的自动下载不会在plist中包含此字段。为了纠正,只需从项目设置菜单重新下载plist即可。
-
从示例ChatSDK < strong>Info.plist文件中复制以下行到您的项目的< strong>Info.plist
-
App传输安全设置
-
URL类型
-
确保所有URL类型都设置正确。您的应用的URL类型应设置为您的bundle < code>id
-
所有隐私行。这将允许应用访问相机、位置和通讯录
-
在Firebase仪表板中,点击身份验证 -> 登录方法并启用所有适当的方法
-
添加< a href="https://github.com/chat-sdk/chat-sdk-ios#security-rules">安全规则。这些规则还启用了优化的用户搜索,因此此步骤非常重要!
-
启用文件存储 - 点击存储 -> 开始
-
启用< a href="https://github.com/chat-sdk/chat-sdk-ios#push-notifications">推送通知
-
启用位置消息。获取一个Google Maps API密钥。然后将其添加到Chat SDK配置中
Objective C
config.googleMapsApiKey = @"YOUR API KEY";
Swift
config.googleMapsApiKey = "YOUR API KEY"
< a id="user-content-push-notifications" class="anchor" aria-hidden="true" href="#push-notifications">推送通知
推送通知模块允许您使用Firebase云消息推送免费推送通知。
- 设置一个APN密钥。
- 在项目设置中,在Firebase控制台中,选择齿轮图标,选择“项目设置”,然后选择“云消息”选项卡。
- 在iOS应用配置下的APNs身份验证键中,单击上传按钮。
- 浏览到您保存密钥的位置,选择它,然后单击“打开”。为密钥添加密钥ID(在Apple开发者成员中心的“证书、标识符和配置文件”中可用),然后单击上传。
- 在您的Xcode项目中启用推送通知功能< strong>项目 -> 能力 -> 推送通知
- In Xcode中打开< strong>能力选项卡。启用< strong>推送通知和以下< strong>后台模式:位置更新、后台获取、远程通知。
< a id="user-content-setup-firebase-cloud-functions" class="anchor" aria-hidden="true" href="#setup-firebase-cloud-functions">设置Firebase云功能
按照我们Chat SDK Firebase存储库中的说明进行操作。
安全规则
Firebase 通过允许您编写规则来控制谁可以访问数据库以及可以写入什么来保护您的数据。这些规则也用于启用用户搜索。要启用规则,请参阅指南启用安全规则。
结论
恭喜!
要深入了解,请查阅 API 指南以获取以下帮助:
- 与 Firebase 服务器交互
- 创建和更新实体
- 自定义身份验证
- 常见代码示例
- 自定义用户界面
在此处查看API 文档。
下一步
文档
配置
提供了多种配置选项。查看BConfiguration
类可以用于
- 更改聊天气泡颜色
- 更改默认用户名
- 启用或禁用不同类型的登录
- 显示或隐藏空聊天
- 等等...
自定义界面
要自定义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的任何视图添加到您的应用中。查看
Objective-C
UIViewController * privateThreadsViewController = [BChatSDK.ui privateThreadsViewController];
Swift
let privateThreadsViewController = BChatSDK.ui().a.privateThreadsViewController()
将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中。
Firebas模块
对于以下模块
免费模块位于chat-sdk-ios/ChatSDKFirebase 文件夹中。高级模块可以通过提供的链接购买和下载。
要安装模块,您应该按照以下步骤进行
- 将模块代码复制到您的Xcode源代码文件夹,并在Xcode内部将文件添加到您的项目中。如果您正在使用符号链接,可以使用上面提到的符号链接脚本,然后只需将 ChatSDKFirebase 文件夹添加到Xcode中。
- 将必要的依赖关系添加到您的Podfile中
- 在配置期间将模块添加到模块数组中。
Firista UI
File Camp UI模块 允许您使用本机 Firebase 用户界面进行身份验证。
将文件添加到您的Xcode项目后,添加以下内容以启用模块。
Objective C
AppDelegate.m -> application: didFinishLaunchingWithOptions
#import "BFirebaseUIModule.h"
[[[BFirebaseUIModule alloc] init] activateWithProviders: @[]];
Swift
[YourProject]-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文件
- 检查CocoaPods警告 - 确保在继续之前修复所有警告
- 确保您的基配置未设置:项目 -> 项目名称 -> 信息 -> 配置
- 确保“只构建活动架构”设置对主项目和pods项目都相同。
- 检查Xcode项目中的构建设置,并查看哪些字段是加粗的(这意味着它们的值已被覆盖,CocoaPods无法访问它们)。如果您在选择那些字段时按下退格键,它们的值将设置为默认值。
许可协议
我们为此应用程序提供两种许可选择。您可以选择使用Chat SDK许可或GPLv3许可。
大多数Chat SDK用户要么想要将Chat SDK添加到将在App Store中发布的应用程序中,要么想要在为客户的项目中使用Chat SDK。Chat SDK许可允许您免费这么做,具有完全的灵活性。
Chat SDK许可摘要
- 许可证永不过期。
- 可用于创建无限数量的应用程序
- 仅限二进制或对象形式分发
- 允许商业使用
- 可以修改源代码,但不能分发修改(衍生作品)
如果用户想分发Chat SDK源代码,我们认为他们对代码所做的任何添加或修改都应该贡献回项目。GPLv3许可确保,如果分发源代码,它必须保持开源状态并对社区可用。
GPLv3许可摘要
- 可以修改和分发源代码
- 允许商业使用
- 不得转授许可或承担责任
- 必须包含原始许可证
- 必须披露源代码
这究竟意味着什么?
请查阅许可常见问题解答以获取更多信息。