H5 容器和離線包支援 原生 AAR 接入 和 組件化接入 兩種接入方式。通過使用 H5 容器可以實現在應用內開啟一個線上網頁、前端調用 Native 介面、前端調用自訂 JSAPI、自訂 H5 頁面的 TitleBar、使用 UC 核心等相關功能。使用 H5 離線包可以實現發布、預置、啟動和更新離線包等相關功能。
前置條件
若採用原生 AAR 方式接入,需先完成 將 mPaaS 添加到您的專案中 的前提條件和後續相關步驟。
若採用組件化方式接入,需先完成 組件化接入流程。
添加 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 容器及離線包的操作。調用過程如下:
啟動 H5 離線包。
啟動一個離線包:
/** * 啟動離線包 * * @param appId 離線包 ID */ public static void startApp(String appId);
啟動一個離線包(帶啟動參數):
/** * 啟動離線包 * * @param appId 離線包 ID * @param params 啟動參數 */ public static void startApp(String appId, Bundle params);
啟動一個線上頁面。
啟動一個線上頁面:
/** * 啟動線上 URL * * @param url 線上地址 */ public static void startUrl(String url)
啟動一個線上頁面(帶啟動參數):
/** * 啟動線上 URL * * @param url 線上地址 * @param param 啟動參數 */ public static void startUrl(String url, Bundle param);
設定自訂
UserAgent
。首先需要實現一個 UA 設定器,如下所示:
public class H5UaProviderImpl implements H5UaProvider { @Override public String getUa(String defaultUaStr) { //不要修改 defaultUaStr,或者返回一個不包含 defaultUaStr 的結果 return defaultUaStr + " AlipayClient/mPaaS"; } }
然後通過調用設定 UA 介面:
/** * 設定 UA * * @param uaProvider UA 設定器,需開發人員實現 getUa 方法 */ public static void setUa(H5UaProvider uaProvider)
進行設定:
MPNebula.setUa(new H5UaProviderImpl());
設定自訂容器 View。
容器提供方法可以設定自訂的標題列、導覽功能表、下拉重新整理頭部以及 WebView 的承載布局,具體實現,可參考 擷取程式碼範例,查看 AAR 接入方式下 H5 容器和離線包的程式碼範例。
首先,需要先實現一個 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; } }
然後通過 View 設定介面:
/** * 設定容器相關的自訂 view,如標題列、功能表列、web layout、下拉重新整理 view 等等 * @param viewProvider 自訂 view provider */ public static void setCustomViewProvider(H5ViewProvider viewProvider);
執行設定過程:
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());
將單個容器的視圖嵌入到頁面。
根據實際情況選擇以下方法將 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);
說明在使用上述同步、非同步方法呼叫嵌入容器時,需要提前擷取對應離線包的資訊。
使用非同步方法呼叫不佔用主線程,不會影響效能。