SparkSDK 1.4.1

SparkSDK 1.4.1

测试已测试
Lang语言 SwiftSwift
许可证 NOASSERTION
发布最后发布2018年9月
SPM支持 SPM

Bin XuZhiyu Liu 维护。



 
依赖
Alamofire~> 4.7.1
ObjectMapper~> 3.1
AlamofireObjectMapper~> 5.0
SwiftyJSON~> 4.0
Starscream~> 3.0.5
KeychainAccess~> 3.1
 

SparkSDK 1.4.1

  • Spark SDK 团队

思科 Spark iOS SDK

CocoaPods Travis CI license

思科 Spark iOS SDK 使您能够轻松整合到您的 iOS 应用程序中的安全和便捷的思科 Spark 消息和呼叫功能。

此 SDK 用 Swift 4 编写,需要 iOS 10 或更高版本的操作系统。

目录

安装

假设您已经有了一个 Xcode 项目,例如 MySparkApp,以下是将 Spark iOS SDK 集成到您的 Xcode 项目中的步骤,使用 CocoaPods

  1. 安装 CocoaPods

    gem install cocoapods
  2. 设置 CocoaPods

    pod setup
  3. 在您的 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
  4. 从您的 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的一些示例。

  1. 使用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")
            }
        }
    }
  2. 使用Guest ID认证创建Spark实例(基于JWT)

    let authenticator = JWTAuthenticator()
    let spark = Spark(authenticator: authenticator)
    
    if !authenticator.authorized {
        authenticator.authorizedWith(jwt: myJwt)
    }
  3. 注册设备以发送和接收通话

    spark.phone.register() { error in
        if let error = error {
            // Device not registered, and calls will not be sent or received
        } else {
            // Device registered
        }
    }
  4. 使用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):
            // ...
        }
    }
    
  5. 发起通话

    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
        }
    }
  6. 接听通话

    spark.phone.onIncoming = { call in
        call.answer(option: MediaOption.audioVideo(local: ..., remote: ...)) { error in
        if let error = error {
            // success
        }
        else {
            // failure
        }
    }
  7. 发起房间通话

    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
        }
    }
  8. 屏幕共享(仅查看)

    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
        }
    }
  9. 发布消息

    spark.messages.post(personEmail: email, text: "Hello there") { response in
        switch response.result {
        case .success(let message):
            // ...
        case .failure(let error):
            // ...
        }
    }
    
  10. 接收消息

    spark.messages.onEvent = { messageEvent in
        switch messageEvent{
        case .messageReceived(let message):
            // ...
            break
        case .messageDeleted(let messageId):
            // ...
            break
        }
    }
    
  11. 屏幕共享(发送)

    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的重大变化

  1. 最低部署目标: 8.0 => 10.0
  2. 支持Swift语言版本: 3.0 => 4.0
  3. 如果您之前使用'MediaRenderView',需要添加"import SparkSDK"。
  4. 如果您在使用Storyboard的'MediaRenderView'类,请将视图的模块设置为'SparkSDK'。

许可协议

© 2016-2018 思科系统公司及其分支机构。版权所有。

详情请参阅许可协议