Kit SDK de diffusion IVS : échange de jetons | Diffusion en temps réel - Amazon IVS

Kit SDK de diffusion IVS : échange de jetons | Diffusion en temps réel

L’échange de jetons vous permet de mettre à niveau ou de rétrograder les fonctionnalités des jetons des participants et de mettre à jour les attributs des jetons dans le SDK de diffusion mobile, sans que les participants aient besoin de se reconnecter. Cela est utile pour des scénarios comme le co-hébergement, où les participants peuvent commencer par des fonctionnalités d’abonnement uniquement, puis avoir besoin de fonctionnalités de publication.

Limites:

  • L’échange de jetons ne fonctionne qu’avec les jetons créés sur votre serveur avec une paire de clés. Cela ne fonctionne pas avec les jetons créés via l’API CreateParticipantToken.

  • Si vous utilisez l’échange de jetons pour modifier les attributs qui régissent les dispositions de montage côté serveur (comme featuredParticipantAttribute et participantOrderAttribute), la disposition d’une composition active ne sera pas mise à jour tant que le participant ne se reconnectera pas.

Échange de jetons

L’échange de jetons est simple : appelez l’API exchangeToken sur l’objet Stage/IVSStage et fournissez le nouveau jeton. Si les capabilities du nouveau jeton sont différentes de celles du jeton précédent, les capacités du nouveau jeton sont immédiatement évaluées. Par exemple, si le jeton précédent n’avait pas la capacité publish et que le nouveau la possède, les fonctions de stratégie de publication sont invoquées, ce qui permet à l’application hôte de décider si elle souhaite publier immédiatement avec la nouvelle fonctionnalité ou attendre. Il en va de même pour les fonctionnalités supprimées : si le jeton précédent possédait la capacité publish et le nouveau jeton non, le participant annule immédiatement la publication sans invoquer les fonctions de stratégie d’étape pour la publication.

Lors de l’échange d’un jeton, le jeton précédent et le nouveau jeton doivent avoir les mêmes valeurs pour les champs de données utiles suivants :

  • topic

  • resource

  • jti

  • whip_url

  • events_url

Ces champs sont immuables. L’échange d’un jeton qui modifie un champ immuable entraîne le rejet immédiat de l’échange par le SDK.

Les autres champs peuvent être modifiés, notamment :

  • 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)

Réception des mises à jour

Une fonction dans StageRenderer/IVSStageRenderer reçoit des mises à jour concernant des participants distants déjà publiés qui échangent leurs jetons pour mettre à jour leur userId ou leurs attributes. Les participants distants qui ne publient pas encore verront leur userId et leurs attributes mis à jour exposés via les fonctions de rendu onParticipantJoined/participantDidJoin existantes s’ils finissent par être publiés.

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. } }

Visibilité des mises à jour

Lorsqu’un participant échange un jeton pour mettre à jour son userId ou ses attributes, la visibilité de ces modifications dépend de son état de publication actuel :

  • Si le participant ne publie pas : la mise à jour est traitée en mode silencieux. S’il finit par publier, tous les SDK recevront le userId et les attributes mis à jour dans le cadre de l’événement de publication initial.

  • Si le participant publie déjà : la mise à jour est diffusée immédiatement. Toutefois, seuls les SDK mobiles v1.37.0 et ultérieurs reçoivent la notification. Les participants qui utilisent le SDK Web, les anciens SDK mobiles et le montage côté serveur ne voient pas la modification tant que le participant n’a pas dépublié et republié.

Le tableau suivant précise la matrice de prise en charge :

État du participant Obervateur : SDK mobile 1.37.0 et versions ultérieures Observateur : anciens SDK mobiles, SDK Web, montage côté serveur
Pas de publication (commence ensuite) ✅ Visible (lors de la publication lors d’un événement Le participant a rejoint) ✅ Visible (lors de la publication lors d’un événement Le participant a rejoint)
Publie déjà (ne republie jamais) ✅ Visible (immédiatement via l’événement de mise à jour des métadonnées du participant) ❌ Non visible
Publie déjà (dépublie et republie) ✅ Visible (immédiatement via l’événement de mise à jour des métadonnées du participant) ⚠️ Visible après (lors de la republication lors d’un événement Le participant a rejoint)