IVS 廣播 SDK:符記交換 | 即時串流 - Amazon IVS

IVS 廣播 SDK:符記交換 | 即時串流

符記交換可讓您在行動廣播 SDK 中升級或降級參與者符記功能並更新符記屬性,而不需要參與者重新連線。此功能適用於共同託管等案例,因參與者可能僅以訂閱功能開始,之後則需要發布功能。

限制:

  • 符記交換僅適用於使用鍵值對在伺服器上建立的符記。它不適用於透過 CreateParticipantToken API 建立的符記。

  • 如果您使用符記交換來變更驅動 server-side-composition 配置的屬性 (例如 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 中的函數會收到有關已發布的遠端參與者的更新,這些參與者交換其符記以更新其 userIdattributes。尚未進行發布的遠端參與者,若日後開始發布,其更新後的 userIdattributes 將透過既有的 onParticipantJoined / participantDidJoin 轉譯器函數對外提供。

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

更新可見性

當參與者交換符記以更新其 userIdattributes 時,這些變更的可見性取決於其目前的發布狀態:

  • 如果該參與者尚未進行發布:則該更新將以無提示的方式處理。若日後開始發布,所有 SDK 都將收到已更新的 userIdattributes,作為初始發布事件的一部分。

  • 如果參與者已經發布:則該更新會立即廣播。不過,只有行動 SDK v1.37.0+ 會收到通知。在參與者取消發布和重新發布之前,Web SDK、舊版行動 SDK 和伺服器端合成上的參與者不會看到變更。

此表說明支援情況的對應矩陣:

參與者狀態 觀察者:行動 SDK 1.37.0+ 觀察者:舊版 SDK、Web SDK、伺服器端合成
不發布 (然後啟動) ✅ 可見 (透過參與者加入的事件發布時可見) ✅ 可見 (透過參與者加入的事件發布時可見)
已發布 (從未重新發布) ✅ 可見 (透過參與者中繼資料更新事件立即可見) ❌ 不可見
已發布 (取消發布並重新發布) ✅ 可見 (透過參與者中繼資料更新事件立即可見) ⚠️ 最終可見 (透過參與者加入的事件重新發布時可見)