mPaaS H5 容器知識清單 | FAQ · 第一期

FAQ mPaaS H5容器知識清單第一期.png

mPaaS 離線包是什麼?

Hybrid 開發模式已不是什麼新鮮的話題,不只能夠快速發佈新業務,同時無需考慮 App 發版時間,爲業務更新迭代提供了極強的靈活性。相比於 Web 開發,Hybrid 開發模式提供了豐富的設備 API,讓業務形態能夠更加多元和豐富。html

mPaaS 離線包源自於支付寶原生方案,經歷了嚴苛的業務考驗,讓你直接和支付寶使用同一套框架層代碼,擁有統一容器及內核,相對系統內核獲取更低 Crash 率和 ANR 率,適配性強,並具有良好的、彈性的擴展能力,結合具體業務需求定製 JSAPI。git

它解決什麼問題?

  • 減小白屏
  • 解決 Hybrid App 跨平臺兼容與適配
  • 提高 Hybrid App 性能
  • 原生開發下的包大小優化

下面開始 mPaaS H5 容器知識清單 · FAQ 第一期

問題一、HTML5 容器加載時,若是加載錯誤僅回調 H5_PAGE_FINISHED,並無回調 H5_PAGE_ERROR。如何處理 H5_PAGE_ERROR,用原生的錯誤展現界面。github

答: H5_PAGE_ERROR 事件是容器內部事件,會被內部插件攔截,目前開發者沒法直接使用。 能夠實現 H5ErrorPageView,在 errorPageCallback 啓動原生頁面。web

Step1: 新建一個 HTML 格式的自定義錯誤頁框架

<!doctype html>
<html lang="zh-cn">
 
<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="width=device-width,maximum-scale=1.0,minimum-scale=1.0,user-scalable=no" />
  <meta name="format-detection" content="telephone=no" />
  <title>自定義錯誤</title>
</head>
 
<body>
    <p>這個頁面是一個自定義錯誤頁</p>
</body>
 
</html>
複製代碼

Step2: 實現 H5ErrorPageView。將剛纔建立的錯誤頁,設置給 APWebViewide

public class H5ErrorPageViewImpl implements H5ErrorPageView {
    @Override
    public boolean enableShowErrorPage() {
        // true 表示啓動自定義錯誤頁
        return true;
    }
    @Override
    public void errorPageCallback(H5Page h5Page, APWebView view, String errorUrl, int statusCode, String errorMsg, String subErrorMsg) {
        // 獲取錯誤頁的 html,demo 中放到了 raw 中,也能夠放在其餘地方
        String html = H5ResourceManager.readRawFromResource(R.raw.custom_error, LauncherApplicationAgent.getInstance().getApplicationContext().getResources());
        // 將錯誤頁設置給 webview
        view.loadDataWithBaseURL(errorUrl, html, "text/html", "utf-8", errorUrl);
    }
}
複製代碼

Step3: 註冊 H5ErrorPageView。在打開 H5 容器以前,將自定義的 H5ErrorPageView 註冊給容器。性能

H5Utils.setProvider(H5ErrorPageView.class.getName(),new H5ErrorPageViewImpl());
複製代碼

具體請參考:tech.antfin.com/docs/2/1269…優化

問題2:自定義 JSAPI 調取攝像頭拍完照後,插件不能繼承 H5Acitivity,沒法寫 onActivityResult 回調this

答: 目前您可使用一個透明 activity 來啓動相機,並接收返回參數,而後再經過廣播(或其餘手段通知您的 JSAPI) 因爲咱們在 H5Activity 中作了很多的工做,因此暫時不能開發繼承 H5Activity,不過這是一個很是好的 issue,後續咱們看是否能夠開發一些 H5Activity 的回調來解決這個問題。spa

問題3:Android 如何不預置 H5 的狀況下,直接下載離線包?

答:上傳離線包到 mPaaS MDS 發佈服務,使用 MPNebula.startApp 方法便可。

補充:目前 H5 容器沒有使用 MPnebula.startApp(),而是直接用的內嵌形式的。如何解決?

h5Page = h5Service.createPage(this, bundle);
h5Page.getPluginManager().register(new NativeLoadingPlugin());
FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(
AUFrameLayout.LayoutParams.MATCH_PARENT, AUFrameLayout.LayoutParams.WRAP_CONTENT);

mContainer.addView(h5Page.getContentView(), lp);
複製代碼

答:MPNebula.updateAll

目前 mPaaS H5 容器 Demo 源碼已發佈,歡迎 Star 咱們從而進一步瞭解特性和亮點。

mPaaS 釘釘羣引流.png
相關文章
相關標籤/搜索