5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

この記事はフラー株式会社 Advent Calendar 2021の 21日目の記事です。

オンライン会議がどの業界でも一般的になってきた中で、オンラインミーティングアプリの開発需要もあると思います。
そんな中で、Zoomがオンラインミーティング用のSDKを提供しているので、試してみました。
Zoom社にはZoom Meeting SDKZoom 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つまでしか作れず、作成済みの場合は↓のように表示されます。
スクリーンショット 2021-12-25 20.23.39.png

また、アプリで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のサンプル置いてくれてないし、公式ドキュメントが読みづらくて遅々としか進まなくてツラみがあります。。。ここまででセッションの開始まではできましたが、ユーザの取得、ユーザのビデオ表示などはまた次回書きます。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?