全部產品
Search
文件中心

Mobile Platform as a Service:快速開始

更新時間:Jul 13, 2024

H5 容器和離線包支援 原生 AAR 接入組件化接入 兩種接入方式。通過使用 H5 容器可以實現在應用內開啟一個線上網頁、前端調用 Native 介面、前端調用自訂 JSAPI、自訂 H5 頁面的 TitleBar、使用 UC 核心等相關功能。使用 H5 離線包可以實現發布、預置、啟動和更新離線包等相關功能。

前置條件

添加 SDK

原生 AAR 方式

參考 AAR 組件管理,通過 組件管理(AAR) 在工程中安裝 H5 容器 組件。

組件化方式

在 Portal 和 Bundle 工程中通過 組件管理 安裝 H5 容器 組件。更多資訊,參考 管理組件依賴

初始化 mPaaS

如果使用 原生 AAR 接入,需要初始化 mPaaS。在 Application 中添加以下代碼:

public class MyApplication extends Application {
    
    @Override
    public void onCreate() {
        super.onCreate();
        // mPaaS 初始化
        MP.init(this);    
    }
}

詳情請參考:初始化 mPaaS

配置小程式包請求時間間隔

mPaaS 支援配置小程式包的請求時間間隔,可全域配置或單個配置。

  • 全域配置:在 Android 工程的 assets/config 路徑下,建立 custom_config.json 檔案,並在檔案內填入以下內容:

    {
    "value": "{\"config\":{\"al\":\"3\",\"pr\":{\"4\":\"86400\",\"common\":\"864000\"},\"ur\":\"1800\",\"fpr\":{\"common\":\"3888000\"}},\"switch\":\"yes\"}",
    "key": "h5_nbmngconfig"\
    }

    其中 \"ur\":\"1800\" 是設定全域更新間隔的值,1800 為預設值,代表間隔時間長度,單位為秒,您可修改此值來設定您的全域離線包請求間隔,範圍為 0 ~ 86400 秒(即 0 ~ 24 小時,0 代表無請求間隔限制)。

    重要

    其他參數請勿隨意修改。

  • 單個配置:即只對當前小程式包配置。可在控制台中前往 添加離線包 > 擴充資訊 中填入 {"asyncReqRate":"1800"} 來佈建要求時間間隔。詳情參見 建立 H5 離線包 中的 擴充資訊

驗證請求時間間隔配置是否生效:您可以開啟⼀個接入 H5 離線包的工程,在 logcat 日誌中過濾 H5BaseAppProvider 關鍵字,若能看到如下資訊,則說明配置已經生效。

lastUpdateTime: xxx updateRate: xxx

使用 SDK

mPaaS Nebula H5 容器提供統一的介面類 MPNebula 來實現 H5 容器及離線包的操作。調用過程如下:

  1. 啟動 H5 離線包。

    • 啟動一個離線包:

      /**
      * 啟動離線包
      *
      * @param appId 離線包 ID
      */
      public static void startApp(String appId);
    • 啟動一個離線包(帶啟動參數):

      /**
      * 啟動離線包
      *
      * @param appId  離線包 ID
      * @param params 啟動參數
      */
      public static void startApp(String appId, Bundle params);
  2. 啟動一個線上頁面。

    • 啟動一個線上頁面:

      /**
      * 啟動線上 URL
      *
      * @param url 線上地址
      */
      public static void startUrl(String url)
    • 啟動一個線上頁面(帶啟動參數):

      /**
      * 啟動線上 URL
      *
      * @param url   線上地址
      * @param param 啟動參數
      */
      public static void startUrl(String url, Bundle param);
  3. 設定自訂 UserAgent

    1. 首先需要實現一個 UA 設定器,如下所示:

      public class H5UaProviderImpl implements H5UaProvider {
      @Override
      public String getUa(String defaultUaStr) {
       //不要修改 defaultUaStr,或者返回一個不包含 defaultUaStr 的結果
       return defaultUaStr + " AlipayClient/mPaaS"; 
      }
      }
    2. 然後通過調用設定 UA 介面:

      /**
      * 設定 UA
      *
      * @param uaProvider UA 設定器,需開發人員實現 getUa 方法
      */
      public static void setUa(H5UaProvider uaProvider)
    3. 進行設定:

      MPNebula.setUa(new H5UaProviderImpl());
  4. 設定自訂容器 View。

    容器提供方法可以設定自訂的標題列、導覽功能表、下拉重新整理頭部以及 WebView 的承載布局,具體實現,可參考 擷取程式碼範例,查看 AAR 接入方式下 H5 容器和離線包的程式碼範例。

    1. 首先,需要先實現一個 View 設定器,如下所示:

      public class H5ViewProviderImpl implements H5ViewProvider {
      @Override
      public H5WebContentView createWebContentView(Context context) {
       // 此處返回自訂的 WebView 的承載布局,若返回 null 則使用預設 View
       return null;
      }
      
      @Override
      public H5TitleView createTitleView(Context context) {
       // 此處返回自訂的標題列,若返回 null 則使用預設 View
       return null;
      }
      
      @Override
      public H5PullHeaderView createPullHeaderView(Context context, ViewGroup viewGroup) {
       // 此處返回自訂的下拉重新整理頭部,若返回 null 則使用預設 View
       return null;
      }
      
      @Override
      public H5NavMenuView createNavMenu() {
       // 此處返回自訂的導覽功能表,若返回 null 則使用預設 View
       return null;
      }
      }
    2. 然後通過 View 設定介面:

      /**
      * 設定容器相關的自訂 view,如標題列、功能表列、web layout、下拉重新整理 view 等等
      * @param viewProvider 自訂 view provider
      */
      public static void setCustomViewProvider(H5ViewProvider viewProvider);
    3. 執行設定過程:

      MPNebula.setCustomViewProvider(new H5ViewProviderImpl());
      說明

      若要設定自訂標題列,需要先設定 bundle name,否則可能會找不到資源。

      // 此處必須設定標題列資源所在的 bundle 名稱,如果不設定,會導致資源無法載入導致標題列無法生效
      H5Utils.setProvider(H5ReplaceResourceProvider.class.getName(), new H5ReplaceResourceProvider() {
      @Override
      public String getReplaceResourcesBundleName() {
       return BuildConfig.BUNDLE_NAME;
      }
      });
      MPNebula.setCustomViewProvider(new H5ViewProviderImpl());
  5. 將單個容器的視圖嵌入到頁面。

    根據實際情況選擇以下方法將 H5 頁面嵌入到單個容器的視圖(view)中,介面提供同步方法和非同步方法呼叫。

    • 同步方法

      /**
      * 擷取 H5 容器的視圖(view)
      *
      * @param activity 頁面上下文
      * @param param    啟動參數,內部可包含 appid 或是 URL
      * @return H5 容器的視圖(view)
      */
      public static View getH5View(Activity activity, Bundle param);
    • 非同步方法呼叫

      /**
      * 非同步擷取 H5 容器的視圖(view)
      *
      * @param activity            頁面上下文
      * @param param               啟動參數,內部可包含 appid 或是 URL
      * @param h5PageReadyListener 非同步回調
      */
      public static void getH5ViewAsync(Activity activity, Bundle param, H5PageReadyListener h5PageReadyListener);
      說明
      • 在使用上述同步、非同步方法呼叫嵌入容器時,需要提前擷取對應離線包的資訊。

      • 使用非同步方法呼叫不佔用主線程,不會影響效能。