この記事はフラー株式会社 Advent Calendar 2021の 21日目の記事です。
オンライン会議がどの業界でも一般的になってきた中で、オンラインミーティングアプリの開発需要もあると思います。
そんな中で、Zoomがオンラインミーティング用のSDKを提供しているので、試してみました。
Zoom社にはZoom Meeting SDKとZoom Video SDKがありますが、今回はVideo SDKを使用しています。
(前はMeeting SDKの方はClient SDKって名前だった気がするけど、まあ細かいことは置いときます。)
##1.Video SDKとは?
そもそもSDKが2つかるということですが、違いはなんなのか気になります。公式サイトに比較表があったので見てみます。
機能としてみると、VideoSDKは
1.従来のミーティングとの互換性なし
2.ユーザのログイン機能もなし(従来のZoomアカウントを使い回せない)
3.Rawビデオ/オーディオデータを利用可能
という特徴があるようです。
ユーザにZoomを意識させずに使わせられるよという意図がありそうですね。
Video SDKs | Meeting SDKs | |
---|---|---|
ZoomMeetingsとの互換性 | なし | あり |
ユーザログイン | なし | Email login, SSO login, Zoom Access Token (ZAK) |
Raw ビデオ/オーディオデータ | Android、iOS、Windows、macOSで利用可能 | なし |
エンドツーエンド暗号化(E2EE) | なし | Android、iOS、Windows、macOSで利用できます。Webでは利用できません。 |
ちなみにVideo SDKを利用するには、Video SDK Planに加入が必要です。
クレジットカードの登録は必要ですが、月10,000分まで無料の従量課金プランがあるので、ちょっと試してみたい場合はそちらがオススメです。
アカウントを作成したら、Zoom Developerのページの[Create App]からアプリで使用するSDKの資格情報が入手できます。ちなみに1アカウントで1つまでしか作れず、作成済みの場合は↓のように表示されます。
また、アプリでZoomのセッションを作成するには、SDKの資格情報(key & secret)からJWTTokenを作成する必要がありますが、Tokenの有効期限は最大2日となっていますので、まずは触ってみたいレベルであれば、公式リファレンスでもレコメンドされてるJWT.io librariesからぽちぽち温かみのある手作業で生成で良いと思います。
##2.Video SDKを組み込む
SDKを利用するために、SDKの初期化を行い、ZoomVideoSDKInitParams
オブジェクトを作成した後、SDKで初期化関数を呼び出し、正しく初期化されたことを確認します。
import UIKit
import ZoomInstantSDK
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// zoom SDK
initZoomSDK()
return true
}
// MARK: UISceneSession Lifecycle
func application(_ application: UIApplication,
configurationForConnecting connectingSceneSession: UISceneSession,
options: UIScene.ConnectionOptions) -> UISceneConfiguration {
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
}
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {}
func initZoomSDK() {
// SDKの初期化
let initParams = ZoomInstantSDKInitParams()
initParams.domain = "zoom.us"
initParams.enableLog = true
let sdkInitReturnStatus = ZoomInstantSDK.shareInstance()?.initialize(initParams)
switch sdkInitReturnStatus {
case .Errors_Success:
print("SDK initialized successfully")
default:
if let error = sdkInitReturnStatus {
print("SDK failed to initialize: \(error)")
}
}
}
}
次に、ViewController側でZoomVideoSDKDelegate
のインスタンスを作成し、クラスをZoomVideoSDKDelegate
プロトコルに準拠させます。
その後、sessionContext.token
に先ほど作成したJWTTokenを入力し、sessionName
などのsessionContextの情報を入力し、ZoomVideoSDK.shareInstance()?.joinSession()
でミーティングセッションに参加します。
sessionContextのプロパティ
プロパティ名 | 役割 |
---|---|
sessionName | セッションの名前と一意の識別子。JWTTokenを生成時に設定したセッション名を使います。 |
userName | セッションに表示されているユーザーの名前。長さに制約はありませんが、実運用では文字数制限してあげた方がいい気がします。 |
token | 資格情報から生成したJWT TOkenを入力 |
sessionPassword | セッションのパスワード。設定されている場合、セッションはプライベートになり、ユーザーが有効なパスワードを提供した場合にのみ参加できます。設定されていない場合、セッションは公開され、セッション名を持つすべての人がセッションに参加できます。このフィールドの最大長は10文字に制限されています。 |
import UIKit
import ZoomInstantSDK
class ZoomScreenViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
setupZoomSettings()
}
func setupZoomSettings() {
ZoomInstantSDK.shareInstance()?.delegate = self
let sessionContext = ZoomInstantSDKSessionContext()
sessionContext.token = "YOUR_TOKEN"
sessionContext.sessionName = "your Session Name"
sessionContext.userName = "Your User Name"
sessionContext.sessionPassword = "Your Password"
if let session = ZoomVideoSDK.shareInstance()?.joinSession(sessionContext) {
// Session joined successfully.
}
}
#終わりに
ZoomさんSwiftのサンプル置いてくれてないし、公式ドキュメントが読みづらくて遅々としか進まなくてツラみがあります。。。ここまででセッションの開始まではできましたが、ユーザの取得、ユーザのビデオ表示などはまた次回書きます。