Tips

This page has not been translated yet.

開発に関するヒント、注意点を掲載しています。

Room ライブラリを基準に記載しておりますので、特に断りがない場合 Core ライブラリをご利用いただいている場合は Channel と読み替えてください。

また、リソースとは、SDK で生成される全てのインスタンスおよびそのメモリを指します。

CallKitとの連携

SDK 内部ではWebRTCフレームワークを利用しており、AVAudioSessionの設定を必要に応じて変更しています。

CallKit と SkyWay を共に利用する場合は、CallKit 内部でもAVAudioSessionの設定が変更されることによってバックグラウンド状態での着信時に音声が出力されない問題があるため、以下を実装してください。

1.CXProviderDelegateを利用するクラスにWebRTCフレームワークをimportする

import WebRTC

2.CXProviderDelegateにおいて、応答したときのアクション(CXAnswerCallAction)が取得できるprovider(_:action:)関数の中で以下のコードを実装します。

RTCAudioSession.sharedInstance().useManualAudio = true RTCAudioSession.sharedInstance().isAudioEnabled = false do { RTCAudioSession.sharedInstance().lockForConfiguration() try RTCAudioSession.sharedInstance().setConfiguration(RTCAudioSessionConfiguration()) RTCAudioSession.sharedInstance().unlockForConfiguration() }catch { print("Setting configuration failed: \(error.localizedDescription)") }

3.CXProviderDelegateprovider(_:didActivate)関数の中で以下のコードを実装します。

RTCAudioSession.sharedInstance().audioSessionDidActivate(audioSession) RTCAudioSession.sharedInstance().isAudioEnabled = true

4.CXProviderDelegateprovider(_:didDeactivate)関数の中で以下のコードを実装します。

RTCAudioSession.sharedInstance().audioSessionDidDeactivate(audioSession) RTCAudioSession.sharedInstance().isAudioEnabled = false RTCAudioSession.sharedInstance().useManualAudio = false

Pluginの使い方

Core ライブラリでは Plugin を使って追加の機能を利用できます。

SFU Bot ライブラリを例に Plugin の登録方法を以下に示します。

let sfuPlugin: SFUBotPlugin = .init(options: nil) Context.registerPlugin(sfuPlugin)

SDKのログレベルを変更する

Context.setup(withToken:options:completion:) で設定できるオプションで変更できます。 設定可能なログレベルと説明については、iOS SDK リファレンスを参照してください。

let contextOpt: ContextOptions = .init() contextOpt.logLevel = .trace try? await Context.setup(withToken: token, options: nil)

デフォルトはエラーレベルです。 アプリケーション開発時は、不具合の調査やサポートとのやり取りを円滑に行うために、ログレベルを trace に設定することをおすすめします。

SkyWayのログを取得する

Logger.delegateにデリゲートを設定し、didReceiveLog(_:at:)を実装することで、SkyWay内部のログを取得することができます。

出力されるログは、ContextOptions.logLevelにセットした値以上のレベルのものとなります。

SKWプレフィックスについて

一部 API には SKW プレフィックスがついています。

Core ライブラリや SFU Bot ライブラリは Objective-C++ 言語で実装されているためコーディング規約として SKW プレフィックスを付与しています。

Swift アプリケーションからは NS_SWIFT_NAMESKW プレフィックスなしで設定していますが、Storyboard や Interface Builder などをご利用いただく際などに SKW プレフィックスで設定するケースがあります。