本文介紹接入 Android 過程中常見的問題及相應的解決方案。
自訂 JSAPI 時,handleEvent 和 interceptEvent 有什麼區別?
解答:如果監聽容器自己處理的事件,需要將自訂 JSAPI 添加到 handleEvent
裡,並返回 true
。返回 true
,表示事件將停止傳遞;返回 false
,表示事件將繼續傳遞給其他外掛程式。如果監聽容器的其他事件,需要將自訂 JSAPI 添加到 interceptEvent
中。
自訂 JSAPI 時,已經添加了事件,為什麼還要在 onPrepare 裡添加一次?
解答:自訂 JSAPI 時,雖然已經在 config.setEvents("event");
中添加了事件,但是容器的外掛程式是懶載入的,即在頁面建立的時候載入。通過外部的 config.setEvents
來注入要監聽的事件名稱,當真正有 JS 調用的時候,才會去執行個體化對應的外掛程式對象。真正執行個體化的外掛程式的事件分發用的是外掛程式內 onPrepare
的事件。所以,要確保 config.setEvents("event")
的事件和內部 onPrepare
的事件保持一致。
自訂 JSAPI 外掛程式註冊的 page、session 和 service 三者的區別是什嗎?
解答:page 對應一個 WebView。session 對應 mPaaS 應用的一個 App 對象。service 是全域的一個單例。
如果註冊為 page 層級,每次建立 WebView 都會建立一個外掛程式執行個體,對應的外掛程式的 onRelease 在 WebView 銷毀時回調。
如果註冊為 session 層級,每次建立一個 App 對象都會建立一個外掛程式。
如果註冊為 service 層級,全域只建立一次外掛程式,在第一次開啟容器的時候建立。
驗簽是驗證離線包的來源還是做完整性校正?
解答:在離線包發布平台,如果您配置了簽名私密金鑰,平台下發的 AMR 檔案就會帶上離線包的簽名資訊(通過私密金鑰對離線包的 Hash 值加密後得到的密文)。驗簽的時候會使用在專案中預置的公開金鑰進行簽名的驗證(解密上一步的密文得到 Hash 值,本地計算離線包的 Hash,判斷兩者是否相同)。該過程保證了離線包的內容完整,也保證了離線包的來源正確。
開啟離線包 ProgressBar 無法隱藏的原因是什嗎?
解答:這種情況可能是由於資源離線失敗,頁面 fallback 到了線上模式,在 fallback 模式下面 H5 容器強制限制 ProgressBar,無法通過設定 SHOW_PROGRESS
啟動參數來隱藏頁面載入進度條(Progress Bar)。