在工作階段回應緩慢時,將事件加入佇列

媒體收集 API 為 RESTful API,這表示您可以發出 HTTP 要求並等候回應。唯有當您在開始播放視訊時發出工作階段要求來取得工作階段 ID 時,才需要注意這項重點。這很重要,因為所有後續追蹤呼叫都需要此工作階段 ID。

您的播放器可能會​在工作階段回應從後端返回之前 (連同工作階段 ID 參數) 引發事件。如果發生這種情形,應用程式必須將所有在工作階段要求與其回應之間抵達的追蹤事件加入佇列。當「工作階段」回應抵達時,您應該先處理所有已加入佇列的事件,接著才能開始以 Events 呼叫處理​即時​事件。

注意

事件要求除了 HTTP 回應代碼外,不會將資料傳回用戶端。

請查閱發佈中的參考播放器,取得在接受工作階段 ID 之前處理事件的方法。例如:

var eventData = {};            // JSON payload 
eventData.playerTime = getPlayerTime(); // Required 
eventData.eventType = "play";           // Required 
eventData.params = {};                  // Optional for events 
 
VideoPlayer.prototype._collectEvent =  
  function(eventData) { 
 
    // If we don't have a Session ID yet,  
    // queue the event and return... 
    if (!sessionStarted) { 
        console.log("[Player] Queueing event "); 
        _pendingEvents.push(eventData); 
        return; 
    } 
 
    // If we DO have a Session ID, process the 
    // tracking event...     
    apiClient.request({ 
        "baseUrl": "{endpoint}", 
        "path": "api/v1/{sid}/events", // events request 
        "method": "POST", 
        "data": eventData 
    }).then((response) => {   
        […] 
    } 
} 
 
VideoPlayer.prototype.collectEvent =  
  function (eventType, eventParams) { 
         
    if (typeof eventParams === 'undefined') {   
        eventParams = {}; 
    } 
 
    this._collectEvent({                   
        eventType: eventType,            // Required 
        playerTime: getPlayerTime(),     // Required 
        params: eventParams              // Optional  
    });                                    
}; 
 
VideoPlayer.prototype.getPlayerTime = function() { 
    return { 
        playhead: this.getPlayhead(),    // playhead value in seconds 
        ts: this.getCurrentTimestamp()   // timestamp value in milliseconds 
    }; 
};

處理任何已加入佇列的事件 - 參考播放器會依照下列方法處理已加入佇列的事件:

    […] 
    this._processPendingEvents();    // Once you have a Session ID, 
    […]                              // process any queued events 
 
VideoPlayer.prototype._processPendingEvents =  
  function() { 
    this._pendingEvents.forEach((eventData) => { 
        this._collectEvent(eventData); 
    }); 
 
    this._pendingEvents = []; 
}

繼續處理後續發生的追蹤事件。

本頁內容