Cisco Spark iOS SDK
Cisco Spark iOS SDK使得在iOS应用中轻松集成安全的Cisco Spark信息和通话特性变得十分容易。
此SDK用Swift 4编写,并需提供iOS 10或更高版本来使用。
目录
安装
假设您已经有了一个iOS应用项目,例如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创建账户并注册您自己的集成。您的应用需要通过OAuth授权流程来验证现有的Cisco Spark用户,或者对没有Cisco Spark账户的访客用户使用JSON Web Token。
有关此SDK的更多信息,请参阅Spark for Developers网站上的iOS SDK区域。
示例
以下是如何在您的应用中使用iOS SDK的一些示例。
-
使用Spark ID身份验证(基于OAuth)创建Spark实例
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") } } }
-
使用访客ID身份验证(基于JWT)创建Spark实例
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 Cisco Systems, Inc.及/或其关联公司。保留所有权利。
有关详细信息,请参阅授权协议。