在某些情況下,例如SDK尚未完成初始化時,會導致資料上報出現問題。本文介紹如何使用ARMS前端監控SDK實現資料預上報。
會導致資料上報出現問題的情形
以下情形會導致資料上報出現問題:
- 在頁面剛剛載入時,有一些資料需要上報,但此時SDK可能還未完成初始化,或者不確定是否已完成初始化。
- 在應用的初始化邏輯中調用setConfig方法,但由於SDK是非同步載入的,此時可能還未載入完成。
解決辦法
SDK在__bl
對象上增加了一個pipe屬性,用於將預調用的資訊緩衝到此變數中。例如:
__bl.pipe = [
// 將當前頁面的HTML也作為一個API上報。
['api', '/index.html', true, performance.now, 'SUCCESS'], //相當於__bl.api(api, success, time, code, msg)。
// SDK初始化完成後即開啟SPA自動解析。
['setConfig', {enableSPA: true}]
];
如果只上報單條資料,也可以直接寫成:
__bl.pipe = ['msg', '我是另一個普通的訊息'];
其中數組的第0個表示方法名,後面依次是入參。SDK初始化完成後,就會依次調用預先掛載到window.__bl.pipe
上的方法及參數。
說明 在SDK初始化完成前,如果多次設定
__bl.pipe
的值,則以最後設定的為準。如果不能確定SDK是否初始化完成,又不想添加太多判斷邏輯,也可以在SDK初始化完成後調用pipe(支援IE9及以上)。
例如,單頁面應用中,設定autoSend: false
後,在應用初始化後上報第一次PV,此時並不確定SDK是否初始化完成。
// 設定頁面name為 'homepage',並且上報PV。
__bl.pipe = ['setPage', 'homepage'];