Sendbird UIKit for iOS

Platform Languages CocoaPods Swift Package Manager Carthage compatible Commercial License

我们推出了新版本的 Sendbird UIKit。版本 3 采用了新的模块化架构,具有更精细的组件,为您提供更强的灵活性,以自定义您的 Web 和移动应用程序。请查看我们的迁移指南并下载我们的示例

随着 v3 版本的正式发布,master 分支的名称已更改为 main 分支,并且 main 分支已更改为 v3 的内容。如果您必须继续使用 v2,请使用 main-v2 分支。

目录

  1. 简介
  2. 开始之前
  3. 入门
  4. 实施指南
  5. UIKit 概览

简介

用于 iOS 的 Sendbird UIKit 是一个用户界面开发工具包,可以轻松快速地将标准聊天功能集成到新的或现有的客户端应用程序中。从整体主题到颜色和字体等各个样式,组件都可以完全自定义,从而创建专属于您品牌形象的应用程序内聊天体验。

注意:目前,用于 iOS 的 UIKit 现在同时支持群组频道和开放频道。

ThemeLight

此仓库包含 UIKit 源代码和 UIKit 示例,以及 UIKit 框架。

优势

更多关于 Sendbird UIKit for iOS

UIKit for iOS 文档中了解更多关于 Sendbird UIKit for iOS 的信息。如果您对错误和功能请求有任何意见或问题,请访问 Sendbird 社区


开始之前

本节介绍您需要检查的使用 Sendbird UIKit for iOS 的先决条件。

要求

Sendbird UIKit for iOS 的最低要求是


入门

本节为您提供开始使用 Sendbird UIKit for iOS 所需的信息。

试用示例应用程序

我们的示例应用程序具有 Sendbird UIKit for iOS 的所有核心功能。从我们的 GitHub 仓库下载该应用程序,以便在构建您自己的项目之前,了解您可以使用实际的 UIKit 构建什么。

创建项目

您可以从创建项目开始。Sendbird UIKit 支持 Swift,因此您可以使用您想要开发的语言创建和处理项目。

Create a project

安装 UIKit for iOS

UIKit for iOS 可以通过 CocoaPodsCarthageSwift Package Manager 安装

注意:Sendbird UIKit for iOS 依赖于 Sendbird Chat SDK。

- Swift Packages

  1. 转到 Swift Package Manager 的 File(文件) 选项卡,然后选择 Swift Packages(Swift Packages)。然后选择 Add package dependency...(添加包依赖项...)

  2. SendbirdUIKit 添加到您的 Package Repository 中,如下所示

https://github.com/sendbird/sendbird-uikit-ios-spm.git
  1. Swift Package Manager 会自动将依赖规则设置为“Up To Next Major(直到下一个主版本)”并安装最新版本。根据您的需要调整依赖规则和版本。您可以在 UIKit releases(UIKit 版本)上查看最新的 UIKit 版本。

- CocoaPods

  1. SendBirdUIKit 添加到 Xcode 中的 Podfile 中,如下所示
platform :ios, '12.0'
use_frameworks!

target YOUR_PROJECT_TARGET do
    pod 'SendBirdUIKit'
end
  1. 通过 CocoaPods 安装 SendbirdUIKit 框架。
$ pod install
  1. 通过 CocoaPods 更新 SendbirdUIKit 框架。
$ pod update

注意:Cocoapod 使用 SendBirdUIKit 名称,而不是 SendbirdUIKit。

- Carthage

  1. SendbirdUIKitSendBirdSDK 添加到您的 Cartfile 中,如下所示
github "sendbird/sendbird-uikit-ios"
github "sendbird/sendbird-chat-sdk-ios"
  1. 通过 Carthage 安装 SendbirdUIKit 框架。
$ carthage update --use-xcframeworks

注意:使用 Carthage 构建或创建 SendbirdUIKit 框架只能使用最新的 Swift。如果您的 Swift 不是最新版本,则应手动将框架复制到您的项目中。

  1. 转到您的 Xcode 项目目标的 General settings(通用设置) 选项卡中的 Frameworks and Libraries(框架和库)部分。然后从 <YOUR_XCODE_PROJECT_DIRECTORY>/Carthage/Build 文件夹中拖放 SendbirdUIKit.framework

注意:如果您使用 Xcode 11.3 或更早版本构建项目,则可能会发生错误。要修复这些错误,请参阅 Handle errors caused by unknown attributes(处理由未知属性引起的错误)

获取附件权限

Sendbird UIKit 提供了附加或保存文件(如照片、视频和文档)的功能。要使用这些功能,您需要向最终用户请求权限。

- 媒体附件权限

应用程序必须获得最终用户的许可才能使用他们的照片资产或将资产保存到他们的库中。一旦获得许可,用户就可以发送图像或视频消息并保存媒体资产。

...
<key>NSPhotoLibraryUsageDescription</key>
    <string>$(PRODUCT_NAME) would like access to your photo library</string>
<key>NSCameraUsageDescription</key>
    <string>$(PRODUCT_NAME) would like to use your camera</string>
<key>NSMicrophoneUsageDescription</key>
    <string>$(PRODUCT_NAME) would like to use your microphone (for videos)</string>
<key>NSPhotoLibraryAddUsageDescription</key>
    <string>$(PRODUCT_NAME) would like to save photos to your photo library</string>
...

Media attachment permission

(可选) 文档附件权限

如果您想附加来自 iCloud 的文件,您必须激活 iCloud 功能。激活后,用户还可以发送带有来自 iCloud 的文件的消息。

转到您的 Xcode 项目的 Signing & Capabilities(签名与功能) 选项卡。然后,单击 + Capability(+ 功能) 按钮并选择 iCloud。选中 iCloud Documents(iCloud 文档)

Document attachment permission


实施指南

使用 APP_ID 初始化

为了使用 Chat SDK 的功能,您必须使用 APP_ID 初始化 SendbirdUIKit 实例。此步骤还会初始化 iOS 的 Chat SDK。

通过 AppDelegate 初始化 SendbirdUIKit 实例,如下所示

// AppDelegate.swift

import SendbirdUIKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    let APP_ID = "2D7B4CDB-932F-4082-9B09-A1153792DC8D"    // The ID of the Sendbird application which UIKit sample app uses.
    SendbirdUI.initialize(applicationId: APP_ID) {
        // Do something to display the start of the SendbirdUIKit initialization.
    } migrationHandler: {
        // Do something to display the progress of the DB migration.
    } completionHandler: { error in
        // Do something to display the completion of the SendbirdChat initialization.
    }
    
}

注意:在上面,您应该指定您的 Sendbird 应用程序的 ID 来代替 APP_ID

设置当前用户

用户信息必须在启动 Sendbird UIKit 之前在 SBUGlobal 中设置为 currentUser。此信息将在工具包内用于各种任务。必须指定 userId 字段,而其他字段(如 nicknameprofileURL)是可选的,如果未指定,则会填充默认值。

通过 AppDelegate 为 UIKit 设置 currentUser,如下所示

注意:即使您不使用 AppDelegate,也应在启动聊天服务之前注册用户信息。

// AppDelegate.swift

import SendbirdUIKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    
    // Case 1: USER_ID only
    SBUGlobals.currentUser = SBUUser(userId: {USER_ID})
    
    // Case 2: Specify all fields
    SBUGlobals.currentUser = SBUUser(userId: {USER_ID}, nickname:{(opt)NICKNAME} profileURL:{(opt)PROFILE_URL})
    
}

注意:如果未提前设置 currentUser,则您对 UIKit 的使用将受到限制。

频道列表

UIKit 允许您专门为 1 对 1 聊天创建频道,并列出 1 对 1 聊天频道,以便您可以轻松查看和管理它们。使用 SBUChannelListViewController 类,您可以为最终用户提供完整的聊天服务,其中包含列出频道功能。

在您想要启动 UIKit 的任何位置实施以下代码。

import SendbirdUIKit

let groupChannelListVC = SBUGroupChannelListViewController()
let naviVC = UINavigationController(rootViewController: groupChannelListVC)
self.present(naviVC, animated: true)

注意:如果您已经在使用导航控制器,则可以使用 pushViewController 函数。

注意此时,您可以通过运行您的客户端应用程序来确认服务是否正常工作。

频道

使用 SBUGroupChannelViewController 类,您可以构建基于频道的聊天服务,而不是基于频道列表的聊天服务。

注意:您应该拥有 Channel 对象或 ChannelURL 才能运行基于频道的聊天服务。

使用以下代码来实施聊天服务。

import SendbirdUIKit

let channelVC = SBUGroupChannelViewController(channelURL: {CHANNEL_URL})
let naviVC = UINavigationController(rootViewController: channelVC)
present(naviVC, animated: true)

分发设置

UIKit 以胖二进制文件的形式分发,其中包含有关 Simulator(模拟器)Device(设备) 架构的信息。如果您计划在 App Store 中分发您的应用程序,并希望删除应用程序构建阶段中不必要的架构,请添加以下脚本。

转到您的 Xcode 项目目标的 Build Phases(构建阶段) 选项卡。然后,单击 + 并选择 New Run Script Phase(新建运行脚本阶段)。附加此脚本。

APP_PATH="${TARGET_BUILD_DIR}/${WRAPPER_NAME}"

# This script loops through the frameworks embedded in the application and
# removes unused architectures.
find "$APP_PATH" -name '*.framework' -type d | while read -r FRAMEWORK
do
    FRAMEWORK_EXECUTABLE_NAME=$(defaults read "$FRAMEWORK/Info.plist" CFBundleExecutable)
    FRAMEWORK_EXECUTABLE_PATH="$FRAMEWORK/$FRAMEWORK_EXECUTABLE_NAME"
    echo "Executable is $FRAMEWORK_EXECUTABLE_PATH"
    
    EXTRACTED_ARCHS=()
    
    for ARCH in $ARCHS
    do
        echo "Extracting $ARCH from $FRAMEWORK_EXECUTABLE_NAME"
        lipo -extract "$ARCH" "$FRAMEWORK_EXECUTABLE_PATH" -o "$FRAMEWORK_EXECUTABLE_PATH-$ARCH"
        EXTRACTED_ARCHS+=("$FRAMEWORK_EXECUTABLE_PATH-$ARCH")
    done
    
    echo "Merging extracted architectures: ${ARCHS}"
    lipo -o "$FRAMEWORK_EXECUTABLE_PATH-merged" -create "${EXTRACTED_ARCHS[@]}"
    rm "${EXTRACTED_ARCHS[@]}"
    
    echo "Replacing original executable with thinned version"
    rm "$FRAMEWORK_EXECUTABLE_PATH"
    mv "$FRAMEWORK_EXECUTABLE_PATH-merged" "$FRAMEWORK_EXECUTABLE_PATH"
done

UIKit 概览

UIKit for iOS 管理其 ViewController 的生命周期,以及来自 iOS 的 Chat SDK 的各种视图和数据。UIKit 组件如下:

组件 描述
SBUGroupChannelListViewController 一个管理群组频道列表的 ViewController
SBUGroupChannelViewController 一个管理 1 对 n 群组聊天频道的 ViewController
SBUOpenChannelViewController 一个管理开放聊天频道的 ViewController
SBUCreateChannelViewController 一个创建频道的 ViewController
SBUInviteUserViewController 一个邀请用户加入频道的 ViewController
SBURegisterOperatorViewController 一个在频道中注册为管理员的 ViewController
SBUUserListViewController 一个显示频道中成员或参与者列表的 ViewController
SBUGroupChannelSettingsViewController 一个配置群组频道的 ViewController
SBUOpenChannelSettingsViewController 一个配置开放频道的 ViewController
SBUModerationsViewController 一个管理频道的 ViewController
SBUMessageSearchViewController 一个在频道中搜索消息的 ViewController
SBUTheme 一个管理主题的单例。
SBUColorSet 一个管理颜色集的单例。
SBUFontSet 一个管理字体集的单例。
SendbirdUI 一个包含使用 Sendbird UIKit 时所需的静态函数的类。
SBUGlobalSet 一个包含使用 Sendbird UIKit 时所需的静态属性的类。