SDK de transmissão do IVS: troca de tokens | streaming em tempo real
A troca de tokens permite que você faça upgrade ou downgrade dos recursos do token do participante e atualize os atributos do token no SDK de transmissão móvel, sem exigir que os participantes se reconectem. Isso é útil em cenários como co-hospedagem, em que os participantes podem começar com recursos somente para assinantes e, posteriormente, precisarem de recursos de publicação.
Limitações:
A troca de tokens só funciona com tokens criados em seu servidor usando um par de chaves. Ela não funciona com tokens criados por meio da API CreateParticipantToken.
Se você usar a troca de tokens para alterar os atributos que impulsionam os layouts de composição do servidor (como featuredParticipantAttribute e participantOrderAttribute), o layout de uma composição ativa não será atualizado até que o participante se reconecte.
Troca de tokens
A troca de tokens é simples: chame a API exchangeToken no objeto Stage/IVSStage e forneça o novo token. Se os capabilities do novo token forem diferentes dos do token anterior, os recursos do novo token serão avaliados imediatamente. Por exemplo, se o token anterior não tiver o recurso publish e o novo token tiver, as funções de estratégia de estágio para publicação serão invocadas, permitindo que a aplicação de host decida se deseja publicar imediatamente com o novo recurso ou esperar. O mesmo vale para os recursos removidos: se o token anterior tinha a capacidade publish e o novo token não, o participante imediatamente cancela a publicação sem invocar as funções de estratégia de palco para publicação.
Ao trocar um token, o token anterior e o novo devem ter os mesmos valores para os seguintes campos de carga útil:
topicresourcejtiwhip_urlevents_url
Esses campos são imutáveis. A troca de um token que modifica um campo imutável faz com que o SDK rejeite imediatamente a troca.
Os campos restantes podem ser alterados, incluindo:
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)
Receber atualizações
Uma função em StageRenderer/IVSStageRenderer recebe atualizações sobre participantes remotos já publicados que trocam seus tokens para atualizar seu userId ou attributes. Participantes remotos que ainda não estão publicando terão seus userId e attributes atualizados expostos por meio das funções de renderizador onParticipantJoined/participantDidJoinexistentes se eventualmente publicarem.
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. } }
Visibilidade das atualizações
Quando um participante troca um token para atualizar seu userId ou attributes, a visibilidade dessas alterações depende do estado atual de publicação:
Se o participante não estiver publicando: a atualização será processada silenciosamente. Se eles acabarem sendo publicados, todos os SDKs receberão a atualização
userIdeattributescomo parte do evento de publicação inicial.Se o participante já estiver publicando: a atualização será transmitida imediatamente. No entanto, apenas os SDKs para dispositivos móveis versão 1.37.0 ou mais recente recebem a notificação. Os participantes do SDK da web, dos SDKs móveis mais antigos e da composição do servidor não veem a alteração até que o participante cancele a publicação e republique.
Esta tabela esclarece a matriz de suporte:
| Estado do participante | Observador: SDK móvel 1.37.0 ou mais recente | Observador: SDKs móveis mais antigos, SDK da web, composição do servidor |
|---|---|---|
| Não está publicando (depois começa) | ✅ Visível (na publicação por meio do evento participante que ingressou) | ✅ Visível (na publicação por meio do evento participante que ingressou) |
| Já está publicando (nunca republica) | ✅ Visível (imediatamente por meio do evento atualizado de metadados do participante) | ❌ Não visível |
| Já está publicando (cancela e republica) | ✅ Visível (imediatamente por meio do evento atualizado de metadados do participante) | ⚠️ Com o tempo, visível (após republicação por meio do evento em que o participante ingressou) |