SDK de transmisión de IVS: intercambio de tokens | Transmisión en tiempo real
El intercambio de tokens le permite mejorar o reducir las capacidades de los tokens participantes y actualizar los atributos de los tokens en el SDK de transmisión, sin necesidad de que los participantes se vuelvan a conectar. Esto es útil en situaciones como el coalojamiento, en las que los participantes pueden comenzar con capacidades solo de suscripción y posteriormente necesitar capacidades de publicación.
El intercambio de tokens es compatible con los SDK de transmisión móvil y web. Cuando un participante intercambia un token, la composición del servidor detecta los atributos actualizados en tiempo real y ajusta automáticamente el diseño (por ejemplo, reasignando el espacio destacado, reordenando los participantes o moviendo a un participante a la superposición de imagen en imagen) sin necesidad de volver a conectarse.
Limitación: el intercambio de tokens solo funciona con tokens creados en su servidor mediante un par de claves. No funciona con los tokens creados a través de la API CreateParticipantToken.
Intercambio de tokens
El intercambio de tokens es sencillo: llame a la API exchangeToken del objeto Stage / IVSStage y proporciona el nuevo token. Si las capabilities del nuevo token son diferentes a las del token anterior, las capacidades del nuevo token se evalúan inmediatamente. Por ejemplo, si el token anterior no tenía la capacidad publish y el nuevo sí, se invocan las funciones de la estrategia de escenario para la publicación, lo que permite a la aplicación anfitriona decidir si quiere publicar de inmediato con la nueva capacidad o esperar. Lo mismo ocurre con las capacidades eliminadas: si el token anterior tenía la capacidad publish y el nuevo no, el participante anula de inmediato la publicación sin invocar las funciones de estrategia de la fase de publicación.
Al intercambiar un token, el token anterior y el nuevo deben tener los mismos valores para los siguientes campos de carga útil:
topicresourcejtiwhip_urlevents_url
Estos campos son inmutables. Si se intercambia un token que modifica un campo inmutable, el SDK rechaza de manera inmediata el intercambio.
Los campos restantes se pueden cambiar, incluidos:
attributescapabilitiesuser_idiatexp
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)
Web
const stage = new Stage(originalToken, strategy); await stage.join(); await stage.exchangeToken(newToken);
Recepción de actualizaciones
Una función en StageRenderer / IVSStageRenderer recibe actualizaciones sobre los participantes remotos ya publicados que intercambian sus tokens para actualizar su userId o attributes. Los participantes remotos que aún no publiquen expondrán sus userId y attributes actualizados a través de las funciones de renderizado onParticipantJoined / participantDidJoin existentes si finalmente publican
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. } }
Web
stage.on(StageEvents.STAGE_PARTICIPANT_METADATA_CHANGED, (participantInfo: StageParticipantInfo) => { // participantInfo properties will be updated with the changed properties } );
Visibilidad de actualizaciones
Cuando un participante intercambia un token para actualizar su userId o attributes, la visibilidad de estos cambios depende de su estado de publicación actual:
Si el participante no publica: la actualización se procesa de forma silenciosa. Si finalmente se publican, todos los SDK recibirán la información actualizada de
userIdyattributescomo parte del evento de publicación inicial.Si el participante ya está publicando: la actualización se transmite inmediatamente para los participantes mediante los SDK móviles v1.37.0+, el SDK web y la composición del servidor. Los participantes que utilizan los SDK móviles más antiguos no ven el cambio hasta que el participante anula la publicación y la vuelve a publicar.
Esta tabla aclara la matriz de soporte:
| Estado del participante | Observador: SDK móvil 1.37.0+, SDK web, composición del servidor | Observador: SDK móviles más antiguos |
|---|---|---|
| No se publica (luego comienza) | ✅ Visible (al publicarse cuando el participante se haya unido al evento) | ✅ Visible (al publicarse cuando el participante se haya unido al evento) |
| Ya publica (nunca vuelve a publicar) | ✅ Visible (inmediatamente a través del evento actualizado de los metadatos de los participantes) | ❌ No visible |
| Ya publica (deja de publicar y vuelve a publicar) | ✅ Visible (inmediatamente a través del evento actualizado de los metadatos de los participantes) | ✅ Visible más adelante (cuando vuelve a publicar a través del evento de incorporación del participante) |