思科 Spark iOS SDK
思科 Spark iOS SDK 使您能够轻松整合到您的 iOS 应用程序中的安全和便捷的思科 Spark 消息和呼叫功能。
此 SDK 用 Swift 4 编写,需要 iOS 10 或更高版本的操作系统。
目录
安装
假设您已经有了一个 Xcode 项目,例如 MySparkApp,以下是将 Spark iOS SDK 集成到您的 Xcode 项目中的步骤,使用 CocoaPods
-
安装 CocoaPods
gem install cocoapods
-
设置 CocoaPods
pod setup
-
在您的 MySparkApp 项目的目录中创建一个新文件,命名为
Podfile
,并包含以下内容:source 'https://github.com/CocoaPods/Specs.git' use_frameworks! target 'MySparkApp' do platform :ios, '10.0' pod 'SparkSDK' end target 'MySparkAppBroadcastExtension' do platform :ios, '11.2' pod 'SparkBroadcastExtensionKit' end
-
从您的 MySparkApp 项目的目录中安装 Spark iOS SDK
pod install
使用方法
要使用SDK,你需要Cisco Spark集成凭证。如果您还没有Cisco Spark账户,请访问Spark for Developers创建账户并注册集成。您的应用程序需要通过OAuth授权流程对现有的Cisco Spark用户进行认证,或者对没有Cisco Spark账户的访客用户通过JSON Web Token进行认证。
有关该SDK的更多信息,请参阅Spark for Developers网站上的iOS SDK区域。
示例
以下是如何在您的应用程序中使用iOS SDK的一些示例。
-
使用Spark ID认证创建Spark实例(基于OAuth)
let clientId = "$YOUR_CLIENT_ID" let clientSecret = "$YOUR_CLIENT_SECRET" let scope = "spark:all" let redirectUri = "Sparkdemoapp://response" let authenticator = OAuthAuthenticator(clientId: clientId, clientSecret: clientSecret, scope: scope, redirectUri: redirectUri) let spark = Spark(authenticator: authenticator) if !authenticator.authorized { authenticator.authorize(parentViewController: self) { success in if !success { print("User not authorized") } } }
-
使用Guest ID认证创建Spark实例(基于JWT)
let authenticator = JWTAuthenticator() let spark = Spark(authenticator: authenticator) if !authenticator.authorized { authenticator.authorizedWith(jwt: myJwt) }
-
注册设备以发送和接收通话
spark.phone.register() { error in if let error = error { // Device not registered, and calls will not be sent or received } else { // Device registered } }
-
使用Spark服务
spark.rooms.create(title: "Hello World") { response in switch response.result { case .success(let room): // ... case .failure(let error): // ... } } // ... spark.memberships.create(roomId: roomId, personEmail: email) { response in switch response.result { case .success(let membership): // ... case .failure(let error): // ... } }
-
发起通话
spark.phone.dial("[email protected]", option: MediaOption.audioVideo(local: ..., remote: ...)) { ret in switch ret { case .success(let call): call.onConnected = { // ... } call.onDisconnected = { reason in // ... } case .failure(let error): // failure } }
-
接听通话
spark.phone.onIncoming = { call in call.answer(option: MediaOption.audioVideo(local: ..., remote: ...)) { error in if let error = error { // success } else { // failure } }
-
发起房间通话
spark.phone.dial(roomId, option: MediaOption.audioVideo(local: ..., remote: ...)) { ret in switch ret { case .success(let call): call.onConnected = { // ... } call.onDisconnected = { reason in // ... } call.onCallMembershipChanged = { changed in switch changed { case .joined(let membership): // case .left(let membership): // default: // } } case .failure(let error): // failure } }
-
屏幕共享(仅查看)
spark.phone.dial("[email protected]", option: MediaOption.audioVideoScreenShare(video: (local: ..., remote: ...))) { ret in switch ret { case .success(let call): call.onConnected = { // ... } call.onDisconnected = { reason in // ... } call.onMediaChanged = { changed in switch changed { ... case .remoteSendingScreenShare(let sending): call.screenShareRenderView = sending ? view : nil } } case .failure(let error): // failure } }
-
发布消息
spark.messages.post(personEmail: email, text: "Hello there") { response in switch response.result { case .success(let message): // ... case .failure(let error): // ... } }
-
接收消息
spark.messages.onEvent = { messageEvent in switch messageEvent{ case .messageReceived(let message): // ... break case .messageDeleted(let messageId): // ... break } }
-
屏幕共享(发送)
11.1 在您的容器应用程序中
spark.phone.dial("[email protected]", option: MediaOption.audioVideoScreenShare(video: ..., screenShare: ..., applicationGroupIdentifier: "group.your.application.group.identifier"))) { ret in switch ret { case .success(let call): call.oniOSBroadcastingChanged = { event in if #available(iOS 11.2, *) { switch event { case .extensionConnected : call.startSharing() { error in // ... } break case .extensionDisconnected: call.stopSharing() { error in // ... } break } } } } case .failure(let error): // failure } }
11.2 在您的广播上传扩展示例处理程序中
override func broadcastStarted(withSetupInfo setupInfo: [String : NSObject]?) { // User has requested to start the broadcast. Setup info from the UI extension can be supplied but optional. SparkBroadcastExtension.sharedInstance.start(applicationGroupIdentifier: "group.your.application.group.identifier") { error in if let sparkError = error { // ... } else { SparkBroadcastExtension.sharedInstance.onError = { error in // ... } SparkBroadcastExtension.sharedInstance.onStateChange = { state in // state change } } } } override func broadcastFinished() { // User has requested to finish the broadcast. SparkBroadcastExtension.sharedInstance.finish() } override func processSampleBuffer(_ sampleBuffer: CMSampleBuffer, with sampleBufferType: RPSampleBufferType) { switch sampleBufferType { case RPSampleBufferType.video: // Handle video sample buffer SparkBroadcastExtension.sharedInstance.handleVideoSampleBuffer(sampleBuffer: sampleBuffer) break case RPSampleBufferType.audioApp: // Handle audio sample buffer for app audio break case RPSampleBufferType.audioMic: // Handle audio sample buffer for mic audio break } }
11.3 获取关于容器应用程序和广播上传扩展及设置应用程序组的更多技术细节。
将SDK 1.3.1升级到1.4.0的重大变化
- 最低部署目标:
8.0=> 10.0 - 支持Swift语言版本:
3.0=> 4.0 - 如果您之前使用'MediaRenderView',需要添加"import SparkSDK"。
- 如果您在使用Storyboard的'MediaRenderView'类,请将视图的模块设置为'SparkSDK'。
许可协议
© 2016-2018 思科系统公司及其分支机构。版权所有。
详情请参阅许可协议。