IVS 廣播 SDK:符記交換 | 即時串流
符記交換可讓您在行動廣播 SDK 中升級或降級參與者符記功能並更新符記屬性,而不需要參與者重新連線。此功能適用於共同託管等案例,因參與者可能僅以訂閱功能開始,之後則需要發布功能。
限制:
符記交換僅適用於使用鍵值對在伺服器上建立的符記。它不適用於透過 CreateParticipantToken API 建立的符記。
如果您使用符記交換來變更驅動 server-side-composition 配置的屬性 (例如 featuredParticipantAttribute 和 participantOrderAttribute),則在參與者重新連線之前,作用中合成的配置將不會更新。
交換符記
交換符記相當簡單:呼叫 Stage / IVSStage 物件上的 exchangeToken API,並提供新的符記。如果新符記 capabilities 的與先前符記所擁有的不同,則系統會立即評估新符記的功能。例如,如果先前的符記沒有 publish 功能,而新的符記有,則會調用用於發布的階段策略函數,讓主機應用程式決定是否要使用新功能立即發布,或選擇稍後再發布。移除的功能也是如此:如果先前的符記具有 publish 功能,但新的符記沒有,則參與者會立即取消發布,而不會調用階段策略函數進行發布。
交換符記時,先前和新的符記必須具有下列承載欄位的相同值:
topicresourcejtiwhip_urlevents_url
這些欄位不可變。交換修改不可變欄位的符記會導致 SDK 立即拒絕交換。
其餘欄位可以變更,包括:
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)
接收更新
StageRenderer / IVSStageRenderer 中的函數會收到有關已發布的遠端參與者的更新,這些參與者交換其符記以更新其 userId 或 attributes。尚未進行發布的遠端參與者,若日後開始發布,其更新後的 userId 與 attributes 將透過既有的 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. } }
更新可見性
當參與者交換符記以更新其 userId 或 attributes 時,這些變更的可見性取決於其目前的發布狀態:
如果該參與者尚未進行發布:則該更新將以無提示的方式處理。若日後開始發布,所有 SDK 都將收到已更新的
userId和attributes,作為初始發布事件的一部分。如果參與者已經發布:則該更新會立即廣播。不過,只有行動 SDK v1.37.0+ 會收到通知。在參與者取消發布和重新發布之前,Web SDK、舊版行動 SDK 和伺服器端合成上的參與者不會看到變更。
此表說明支援情況的對應矩陣:
| 參與者狀態 | 觀察者:行動 SDK 1.37.0+ | 觀察者:舊版 SDK、Web SDK、伺服器端合成 |
|---|---|---|
| 不發布 (然後啟動) | ✅ 可見 (透過參與者加入的事件發布時可見) | ✅ 可見 (透過參與者加入的事件發布時可見) |
| 已發布 (從未重新發布) | ✅ 可見 (透過參與者中繼資料更新事件立即可見) | ❌ 不可見 |
| 已發布 (取消發布並重新發布) | ✅ 可見 (透過參與者中繼資料更新事件立即可見) | ⚠️ 最終可見 (透過參與者加入的事件重新發布時可見) |