IVS Broadcast SDK: トークン交換 | リアルタイムストリーミング - Amazon IVS

IVS Broadcast SDK: トークン交換 | リアルタイムストリーミング

トークン交換を使用すると、参加者が再接続することなく、参加者トークン機能をアップグレードまたはダウングレードし、モバイルブロードキャスト SDK 内のトークン属性を更新できます。これは、参加者がサブスクライブ専用機能から開始し、後でパブリッシュ機能が必要になる共同ホスティングなどのシナリオで便利です。

制限:

  • トークン交換は、キーペアを使用してサーバーで作成されたトークンでのみ機能します。CreateParticipantToken API を介して作成されたトークンでは機能しません。

  • トークン交換を使用して、サーバーサイドコンポジションレイアウト (featuredParticipantAttribute や participantOrderAttribute など) を駆動する属性を変更した場合、アクティブなコンポジションのレイアウトは、参加者が再接続するまで更新されません。

トークンの交換

トークンの交換は簡単です。Stage / IVSStage オブジェクト上の exchangeToken API を呼び出して新しいトークンを提供します。新しいトークンの capabilities が以前のトークンのものと異なる場合、新しいトークンの機能は直ちに評価されます。例えば、前のトークンに publish 機能がなく、新しいトークンにその機能がある場合、公開用のステージ戦略関数が呼び出され、ホストアプリケーションが新しい機能を使用してすぐに公開するか、待機するかを決定できるようになります。削除された機能も同様です。前のトークンに publish 機能があり、新しいトークンにその機能がない場合、参加者は公開用のステージ戦略関数を呼び出さずにすぐに公開を解除します。

トークンを交換する場合、以前のトークンと新しいトークンのペイロードフィールドの値が同じである必要があります。

  • topic

  • resource

  • jti

  • whip_url

  • events_url

これらのフィールドはイミュータブルです。イミュータブルなフィールドを変更するトークンを交換すると、SDK は直ちに交換を拒否します。

残りのフィールドは、次のように変更できます。

  • attributes

  • capabilities

  • user

  • _id

  • iat

  • exp

iOS

let stage = try IVSStage(token: originalToken, strategy: self) stage.join() stage.exchangeToken(newToken)

Android

val stage = Stage(context, originalToken, strategy) stage.join() stage.exchangeToken(newToken)

更新の受信

StageRenderer / IVSStageRenderer の関数は、userId または attributes を更新するトークンを交換する既に公開済みのリモート参加者に関する更新を受信します。まだ公開していないリモート参加者は、最終的に公開された場合、既存の onParticipantJoined / participantDidJoin レンダラー関数を介して更新済みの userIdattributes を持ちます

iOS

class MyStageRenderer: NSObject, IVSStageRenderer { func stage(_ stage: IVSStage, participantMetadataDidUpdate participant: IVSParticipantInfo) { // participant will be a new IVSParticipantInfo instance with updated properties. } }

Android

private val stageRenderer = object : StageRenderer { override fun onParticipantMetadataUpdated(stage: Stage, participantInfo: ParticipantInfo) { // participantInfo will be a new ParticipantInfo instance with updated properties. } }

更新の可視性

参加者がトークンを交換して userId または attributes を更新する場合、これらの変更の可視性は現在の公開状態によって異なります。

  • 参加者が公開していない場合: 更新はサイレントに処理されます。最終的に公開されると、すべての SDK は最初の公開イベントの一部として更新済みの userIdattributes を受け取ります。

  • 参加者が既に公開している場合: 更新は直ちにブロードキャストされます。ただし、通知を受け取るのはモバイル SDK v1.37.0 以降のみです。ウェブ SDK、古いモバイル SDK、サーバーサイドコンポジションの参加者は、参加者が公開を解除して再公開するまで変更を表示されません。

次の表はサポートのマトリックスを示します。

参加者の状態 オブザーバー: モバイル SDK 1.37.0 以降 オブザーバー: 古いモバイル SDK、ウェブ SDK、サーバーサイドコンポジション
未発行 (その後開始) ✅ 表示可能 (参加者が参加したイベントを通じて公開) ✅ 表示可能 (参加者が参加したイベントを通じて公開)
発行済み (再発行なし) ✅ 表示可能 (参加者メタデータ更新済みイベントを介して即時) ❌ 表示不可
発行済み (発行解除および再発行) ✅ 表示可能 (参加者メタデータ更新済みイベントを介して即時) ⚠️ 最終的に表示可能 (参加者が参加したイベントを介して再公開)