快速開始
H5 容器和離線包支持 原生 AAR 接入 和 組件化接入 兩種接入方式。通過使用 H5 容器可以實(shí)現(xiàn)在應(yīng)用內(nèi)打開一個(gè)在線網(wǎng)頁、前端調(diào)用 Native 接口、前端調(diào)用自定義 JSAPI、自定義 H5 頁面的 TitleBar、使用 UC 內(nèi)核等相關(guān)功能。使用 H5 離線包可以實(shí)現(xiàn)發(fā)布、預(yù)置、啟動(dòng)和更新離線包等相關(guān)功能。
前置條件
若采用原生 AAR 方式接入,需先完成 將 mPaaS 添加到您的項(xiàng)目中 的前提條件和后續(xù)相關(guān)步驟。
若采用組件化方式接入,需先完成 組件化接入流程。
添加 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。
配置小程序包請求時(shí)間間隔
mPaaS 支持配置小程序包的請求時(shí)間間隔,可全局配置或單個(gè)配置。
全局配置:在 Android 工程的
assets/config
路徑下,創(chuàng)建custom_config.json
文件,并在文件內(nèi)填入以下內(nèi)容:{ "value": "{\"config\":{\"al\":\"3\",\"pr\":{\"4\":\"86400\",\"common\":\"864000\"},\"ur\":\"1800\",\"fpr\":{\"common\":\"3888000\"}},\"switch\":\"yes\"}", "key": "h5_nbmngconfig"\ }
其中
\"ur\":\"1800\"
是設(shè)置全局更新間隔的值,1800
為默認(rèn)值,代表間隔時(shí)長,單位為秒,您可修改此值來設(shè)置您的全局離線包請求間隔,范圍為 0 ~ 86400 秒(即 0 ~ 24 小時(shí),0 代表無請求間隔限制)。重要其他參數(shù)請勿隨意修改。
單個(gè)配置:即只對當(dāng)前小程序包配置。可在控制臺中前往 添加離線包 > 擴(kuò)展信息 中填入
{"asyncReqRate":"1800"}
來設(shè)置請求時(shí)間間隔。詳情參見 創(chuàng)建 H5 離線包 中的 擴(kuò)展信息。
驗(yàn)證請求時(shí)間間隔配置是否生效:您可以打開?個(gè)接入 H5 離線包的工程,在 logcat 日志中過濾 H5BaseAppProvider
關(guān)鍵字,若能看到如下信息,則說明配置已經(jīng)生效。
lastUpdateTime: xxx updateRate: xxx
使用 SDK
mPaaS Nebula H5 容器提供統(tǒng)一的接口類 MPNebula
來實(shí)現(xiàn) H5 容器及離線包的操作。調(diào)用過程如下:
啟動(dòng) H5 離線包。
啟動(dòng)一個(gè)離線包:
/** * 啟動(dòng)離線包 * * @param appId 離線包 ID */ public static void startApp(String appId);
啟動(dòng)一個(gè)離線包(帶啟動(dòng)參數(shù)):
/** * 啟動(dòng)離線包 * * @param appId 離線包 ID * @param params 啟動(dòng)參數(shù) */ public static void startApp(String appId, Bundle params);
啟動(dòng)一個(gè)在線頁面。
啟動(dòng)一個(gè)在線頁面:
/** * 啟動(dòng)在線 URL * * @param url 在線地址 */ public static void startUrl(String url)
啟動(dòng)一個(gè)在線頁面(帶啟動(dòng)參數(shù)):
/** * 啟動(dòng)在線 URL * * @param url 在線地址 * @param param 啟動(dòng)參數(shù) */ public static void startUrl(String url, Bundle param);
設(shè)置自定義
UserAgent
。首先需要實(shí)現(xiàn)一個(gè) UA 設(shè)置器,如下所示:
public class H5UaProviderImpl implements H5UaProvider { @Override public String getUa(String defaultUaStr) { //不要修改 defaultUaStr,或者返回一個(gè)不包含 defaultUaStr 的結(jié)果 return defaultUaStr + " AlipayClient/mPaaS"; } }
然后通過調(diào)用設(shè)置 UA 接口:
/** * 設(shè)置 UA * * @param uaProvider UA 設(shè)置器,需開發(fā)者實(shí)現(xiàn) getUa 方法 */ public static void setUa(H5UaProvider uaProvider)
進(jìn)行設(shè)置:
MPNebula.setUa(new H5UaProviderImpl());
設(shè)置自定義容器 View。
容器提供方法可以設(shè)置自定義的標(biāo)題欄、導(dǎo)航菜單、下拉刷新頭部以及 WebView 的承載布局,具體實(shí)現(xiàn),可參考 代碼示例 獲取代碼示例,查看 AAR 接入方式下 H5 容器和離線包的代碼示例。
首先,需要先實(shí)現(xiàn)一個(gè) View 設(shè)置器,如下所示:
public class H5ViewProviderImpl implements H5ViewProvider { @Override public H5WebContentView createWebContentView(Context context) { // 此處返回自定義的 WebView 的承載布局,若返回 null 則使用默認(rèn) View return null; } @Override public H5TitleView createTitleView(Context context) { // 此處返回自定義的標(biāo)題欄,若返回 null 則使用默認(rèn) View return null; } @Override public H5PullHeaderView createPullHeaderView(Context context, ViewGroup viewGroup) { // 此處返回自定義的下拉刷新頭部,若返回 null 則使用默認(rèn) View return null; } @Override public H5NavMenuView createNavMenu() { // 此處返回自定義的導(dǎo)航菜單,若返回 null 則使用默認(rèn) View return null; } }
然后通過 View 設(shè)置接口:
/** * 設(shè)置容器相關(guān)的自定義 view,如標(biāo)題欄、菜單欄、web layout、下拉刷新 view 等等 * @param viewProvider 自定義 view provider */ public static void setCustomViewProvider(H5ViewProvider viewProvider);
執(zhí)行設(shè)置過程:
MPNebula.setCustomViewProvider(new H5ViewProviderImpl());
說明若要設(shè)置自定義標(biāo)題欄,需要先設(shè)置 bundle name,否則可能會(huì)找不到資源。
// 此處必須設(shè)置標(biāo)題欄資源所在的 bundle 名稱,如果不設(shè)置,會(huì)導(dǎo)致資源無法加載導(dǎo)致標(biāo)題欄無法生效 H5Utils.setProvider(H5ReplaceResourceProvider.class.getName(), new H5ReplaceResourceProvider() { @Override public String getReplaceResourcesBundleName() { return BuildConfig.BUNDLE_NAME; } }); MPNebula.setCustomViewProvider(new H5ViewProviderImpl());
將單個(gè)容器的視圖嵌入到頁面。
根據(jù)實(shí)際情況選擇以下方法將 H5 頁面嵌入到單個(gè)容器的視圖(view)中,接口提供同步方法和異步方法。
同步方法
/** * 獲取 H5 容器的視圖(view) * * @param activity 頁面上下文 * @param param 啟動(dòng)參數(shù),內(nèi)部可包含 appid 或是 URL * @return H5 容器的視圖(view) */ public static View getH5View(Activity activity, Bundle param);
異步方法
/** * 異步獲取 H5 容器的視圖(view) * * @param activity 頁面上下文 * @param param 啟動(dòng)參數(shù),內(nèi)部可包含 appid 或是 URL * @param h5PageReadyListener 異步回調(diào) */ public static void getH5ViewAsync(Activity activity, Bundle param, H5PageReadyListener h5PageReadyListener);
說明在使用上述同步、異步方法嵌入容器時(shí),需要提前獲取對應(yīng)離線包的信息。
使用異步方法不占用主線程,不會(huì)影響性能。