Whereby嵌入式iOS SDK
此仓库包含 Whereby SDK 框架及其依赖项的发行文件。
注意,这是该框架的beta版本。对于任何评论、建议或问题,请通过我们的客户支持联系:[email protected].
其他平台
先决条件
- Xcode 的最新稳定版本
- CocoaPods 的最新稳定版本(使用 Swift Package Manager 时不需要)
- 注册 Whereby Embedded 账号
- 在您的 Whereby Embedded 账号中创建一个房间
Whereby SDK 支持 iOS 14.0 作为最低部署目标。
安装
使用 Swift 包管理器
-
在 Xcode 中打开您的项目,然后选择文件 > 添加包...
-
在“搜索”或“输入包 URL”文本框中,输入存储库 URL
https://github.com/whereby/ios-sdk.git
-
单击“添加包”。
-
在“选择包产品”窗口中,保留 WherebySDK 产品选中状态,然后单击“添加包”。
有关更多详细信息,请参阅添加包依赖项到您的应用。
使用 CocoaPods
-
将以下行添加到您的项目 Podfile 中
pod 'WherebySDK'
您的 Podfile 应该看起来像这样
platform :ios, '14.0' target 'TargetName' do use_frameworks! pod 'WherebySDK' end
-
在终端中,导航到包含您的 Podfile 的目录,然后执行
pod install
手动安装
我们建议使用 Swift 包管理器或 CocoaPods 来安装 Whereby SDK。或者,也可以手动将 SDK 添加到项目中
-
克隆此存储库
git clone https://github.com/whereby/ios-sdk.git
-
将
WherebySDK.xcframework
,WebRTC.xcframework
,mediasoup_client_ios.xcframework
从存储库复制到与您的.xcodeproj
文件相邻的项目目录中 -
在 Xcode 中,选择您的项目文件,然后选择您的应用程序目标。在目标设置中选择“通用”选项卡。将新复制的
WherebySDK.xcframework
,WebRTC.xcframework
,mediasoup_client_ios.xcframework
框架拖到您的目标中“框架、库和嵌入式内容”部分。
项目设置
添加Whereby SDK后,按照以下步骤设置您的项目
-
添加摄像头和麦克风的使用说明。这两个说明都是面向用户的消息,将显示在您的应用中的标准系统权限提示中。您可以提供自己的消息,更好地描述您应用的目的。在您的应用的
Info.plist
中添加以下键和值隐私 - 摄像头使用描述 (
NSCameraUsageDescription
): 允许摄像头访问,以便其他人在会议中看到您。隐私 - 麦克风使用描述 (
NSMicrophoneUsageDescription
): 允许麦克风访问,以便其他人在会议中听到您。更多详情请参阅在iOS上请求媒体捕获权限(注意:您不需要在代码中使用
AVCaptureDevice
API,这是由Whereby SDK执行的)。 -
添加音频和VoIP后台执行模式。在Xcode中选择您的项目文件,然后选择您的应用目标。在目标设置中,选择“签名与能力”选项卡。通过点击左上角的多加号按钮添加“后台模式”能力。添加能力后,在“后台模式”部分通过复选框选择以下值
- 音频、AirPlay、画中画
- VoIP
更多详情请参阅配置后台执行模式。
-
禁用bitcode。Whereby SDK不支持bitcode,并且一般已在Xcode 14(目前处于beta版本)中弃用(请参阅
Apple Clang Compiler
的
《Xcode 14发布说明》中的弃用部分Xcode 14发布说明)。如果您的应用目标启用了bitcode,则需要禁用它。在Xcode中选择您的项目文件和您的应用目标。在目标设置中,选择“构建设置”选项卡。搜索“启用bitcode”设置(ENABLE_BITCODE
),并将其值设置为“不”。
使用
要查看SDK使用的完整示例,请尝试我们的演示应用。
WherebyRoomViewController
是SDK的主要元素。它是UIViewController
的一个子类,它提供了Whereby房间的用户界面以及与房间交互的API。按照以下步骤将Whereby房间添加到您的应用
-
在您的文件顶部导入
WherebySDK
(通常这会在您的UIViewController
子类中)import WherebySDK
-
提供房间URL。房间URL通常由您的后端使用Whereby API创建。有关详细信息,请参阅创建和删除房间。
let roomUrl = URL(string: "https://...")!
-
创建一个
WherebyRoomConfig
let roomConfig = WherebyRoomConfig(url: roomUrl)
可选:设置配置参数以自定义房间
roomConfig.mediaMode = .audioOnly
-
创建一个
WherebyRoomViewController
。如果您打算将房间查看控制器推送到您应用的现有UINavigationController
中,则传递isPushedInNavigationController: true
。否则,传递isPushedInNavigationController: false
。let roomViewController = WherebyRoomViewController(config: roomConfig, isPushedInNavigationController: false) // Set the delegate to be able to receive the room callback events: roomViewController.delegate = self
-
使用方法之一在您的应用中显示房间查看控制器
-
将房间查看控制器嵌入为应用UI的一部分,通过将其添加为子查看控制器。有关详细信息,请参阅创建自定义容器查看控制器。
// Add the room view controller as a child of this view controller addChild(roomViewController) view.addSubview(roomViewController.view) // Set up the auto layout constraints for the room view controller’s view. roomViewController.view.translatesAutoresizingMaskIntoConstraints = false NSLayoutConstraint.activate([ roomViewController.view.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 8), roomViewController.view.bottomAnchor.constraint(equalTo: view.safeAreaLayoutGuide.bottomAnchor, constant: -8), roomViewController.view.leadingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.leadingAnchor, constant: 16), roomViewController.view.trailingAnchor.constraint(equalTo: view.safeAreaLayoutGuide.trailingAnchor, constant: -16) ]) // Notify the room view controller that the move is complete. roomViewController.didMove(toParent: self)
-
另一种选择是将房间查看控制器推送到应用的现有导航堆栈
navigationController!.pushViewController(roomViewController, animated: true)
-
-
加入房间
roomViewController.join()
-
实现
WherebyRoomViewControllerDelegate
以处理房间回调func roomViewControllerDidLeave(_ roomViewController: WherebyRoomViewController) { // Handle room leave, for example, remove WherebyRoomViewController // from parent view controller if it was previously added as a child roomViewController.willMove(toParent: nil) roomViewController.view.removeFromSuperview() roomViewController.removeFromParent() // Or pop it from the navigation stack if it was pushed // navigationController!.popViewController(animated: true) }
-
可选:设置媒体(麦克风和相机)切换按钮。例如
@IBAction func toggleMicrophoneButtonPressed(_ sender: UIButton) { guard let roomViewController = roomViewController else { return } roomViewController.isMicrophoneEnabled = !roomViewController.isMicrophoneEnabled }
备注
- iOS模拟器没有相机支持。我们建议在真实设备上测试房间集成。但是,在模拟器上使用Whereby SDK运行应用也是可能的。
- 在运行在搭载Apple Silicon CPU的Mac电脑上的模拟器时,SDK在渲染房间中超过一个远程视频视图中可能会崩溃。此问题仅存在于模拟器中。作为解决方案,在真实设备上运行应用,或者打开Xcode使用Rosetta,然后在模拟器上运行您的应用。
- Whereby SDK使用CallKit框架。当将您的应用提交到App Store时,苹果可能要求对中国用户禁用CallKit。此问题已由SDK处理,不需要在您的应用中进行任何其他配置。在提交您的应用时,您可能需要在App Store Connect的“应用审查信息”部分提供备注,例如对中国用户禁用CallKit功能。Whereby会议室用户在中国仍然可以工作,但没有由CallKit提供更深层系统集成的支持。
免责声明
Whereby发布这些包以帮助开发社区了解Whereby嵌入式产品的实现方式。
在没有以前评估和针对生产设置的相关测试(可能涉及操作、技术、安全或法律(例如库许可证评估)性质)的情况下,Whereby不建议在生产环境中使用此类示例。您明确同意,使用这些包的风险由您自行承担。
其中,其关联公司、供应商或许可方,不论明示或默示,对以下示例、信息、内容、材料等均不做任何表述、保证、合同承诺、条件或保证。