View a markdown version of this page

IVS Broadcast SDK: 토큰 교환 | 실시간 스트리밍 - Amazon IVS

IVS Broadcast SDK: 토큰 교환 | 실시간 스트리밍

토큰 교환을 사용하면 참가자가 다시 연결할 필요 없이 브로드캐스트 SDK 내에서 참가자 토큰 기능을 업그레이드하거나 다운그레이드하고 토큰 속성을 업데이트할 수 있습니다. 이는 참가자가 구독 전용 기능으로 시작하여 나중에 게시 기능이 필요할 수 있는 공동 호스팅과 같은 시나리오에 유용합니다.

토큰 교환은 모바일 및 웹 브로드캐스트 SDK 둘 다에서 지원됩니다. 참가자가 토큰을 교환하면 서버 측 구성이 업데이트된 속성을 실시간으로 감지하고 다시 연결할 필요 없이 추천 슬롯 재할당, 참가자 재정렬 또는 참가자를 PIP(Picture-in-Picture)로 이동과 같은 레이아웃을 자동으로 조정합니다.

제한: 토큰 교환은 키 페어를 사용하여 서버에서 생성된 토큰에서만 작동합니다. CreateParticipantToken API를 통해 생성된 토큰에서는 작동하지 않습니다.

토큰 교환

토큰 교환은 간단합니다. 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)

const stage = new Stage(originalToken, strategy); await stage.join(); await 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. } }

stage.on(StageEvents.STAGE_PARTICIPANT_METADATA_CHANGED, (participantInfo: StageParticipantInfo) => { // participantInfo properties will be updated with the changed properties } );

업데이트 가시성

참가자가 토큰을 교환하여 userId 또는 attributes를 업데이트하는 경우 이러한 변경 사항의 표시 여부는 현재 게시 상태에 따라 달라집니다.

  • 참가자가 게시하지 않는 경우: 업데이트가 자동으로 처리됩니다. 최종적으로 게시하는 경우 모든 SDK 초기 게시 이벤트의 일부로 업데이트된 userIdattributes를 수신합니다.

  • 참가자가 이미 게시 중 경우: 모바일 SDK v1.37.0+, 웹 SDK 및 서버 측 구성을 사용하는 참가자의 경우 업데이트가 즉시 브로드캐스트됩니다. 이전 모바일 SDK의 참가자는 참가자가 게시를 취소하고 다시 게시할 때까지 변경 사항을 볼 수 없습니다.

이 표에서는 지원 매트릭스를 명확히 설명합니다.

이벤트 참가자 옵저버: 모바일 SDK 1.37.0+, 웹 SDK, 서버 측 구성 옵저버: 이전 모바일 SDK
게시하지 않음(이후 시작) ✅ 보임(참가자가 참여한 이벤트를 통해 게시 시) ✅ 보임(참가자가 참여한 이벤트를 통해 게시 시)
이미 게시 중(다시 게시하지 않음) ✅ 보임(참가자 메타데이터 업데이트 이벤트를 통해 즉시 표시) ❌ 보이지 않음
이미 게시 중(게시 취소 및 다시 게시) ✅ 보임(참가자 메타데이터 업데이트 이벤트를 통해 즉시 표시) ⚠️ 최종적으로 보임(참가자가 참여한 이벤트를 통해 다시 게시 시)