小程式能力需要用戶端來支撐:
基礎庫與用戶端的關係
小程式能力需要用戶端來支撐:
每一版基礎庫新增能力都需要運行在特定版本及以上的用戶端中。
高版本基礎庫的某些新能力無法相容低版本用戶端。
關於基礎庫相容方法,參見 相容基礎庫。您可以通過 my.SDKVersion
查看當前基礎庫版本號碼。
相容基礎庫
現階段,小程式組件和 API 能力正在逐步完善和豐富,但是老版本用戶端並不支援這些新增的能力,因此建議開發人員做對應的相容性處理。
您可通過介面 my.canIUse(String)
實現相容性判斷,詳見 介面說明 。
相容樣本
新增 API 相容性處理
對於新增 API,可以參照下面的代碼來判斷當前基礎庫是否支援該 API:
if (my.getLocation) {
my.getLocation();
} else {
// 如果希望使用者在最新版本的用戶端上體驗您的小程式,可以這樣提示
my.alert({
title: '提示',
content: '目前的版本過低,無法使用此功能,請升級最新版本'
});
}
API 新增參數相容性處理
對於 API 新增參數,可通過如下方式判斷是否支援,並寫入您的後續處理方式:
if (my.canIUse('getLocation.object.type')) {
// 在此處寫入您的後續處理方式
} else {
console.log('目前的版本不支援該參數')
}
API 新增傳回值相容性處理
對於 API 新增傳回值,可通過如下方式判斷是否支援,並寫入您的後續處理方式:
if (my.canIUse('getSystemInfo.return.storage')) {
// 在此處寫入您的後續處理方式
} else {
console.log('目前的版本不支援該傳回值')
}
組件新增屬性相容性處理
組件新增屬性在舊版本用戶端上無法實現,但也不會報錯。若要對屬性做降級處理可參見以下代碼:
Page({
data: {
canIUse: my.canIUse('button.open-type.share')
}
})
基礎庫版本
基礎庫版本 | 基礎庫對應基準版本 | |
---|---|---|
1.9.0 | 10.1.32 | |
1.14.1 | 10.1.60 |
基礎庫整合說明
iOS
iOS 中無需進行基礎庫整合。
Android
由於基準版本的迭代,不同的基準版本需要採用不同的整合基礎庫的方式。在整合基礎庫前,請確認您的基準版本。
10.1.68.7 及以後的基準版本
在啟動時設定該 Provider 執行個體。範例程式碼如下:
H5Utils.setProvider(H5AppCenterPresetProvider.class.getName(),new TinyAppCenterPresetProvider());
如果用戶端中有使用 H5 公用資源套件,需要繼承 TinyAppCenterPresetProvider
類,並將公用資源套件相關代碼合并至繼承的類的執行個體中。
10.1.60 系列、10.1.68.6 及以前的基準版本
實現
H5AppCenterPresetProvider
介面類。程式碼範例如下:package com.mpaas.demo.nebula; import com.alipay.mobile.nebula.appcenter.H5PresetInfo; import com.alipay.mobile.nebula.appcenter.H5PresetPkg; import com.alipay.mobile.nebula.provider.H5AppCenterPresetProvider; import java.io.File; import java.io.InputStream; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; public class H5AppCenterPresetProviderImpl implements H5AppCenterPresetProvider { private static final String TAG = "H5AppCenterPresetProviderImpl"; // 設定小程式專用資源包,此 ID 固定,不可設定其他值 private static final String TINY_COMMON_APP = "66666692"; // 預置包的 asset 目錄 private final static String NEBULA_APPS_PRE_INSTALL = "nebulaPreset" + File.separator; // 預置包集合 private static final Map<String, H5PresetInfo> NEBULA_LOCAL_PACKAGE_APP_IDS = new HashMap(); static { H5PresetInfo h5PresetInfo2 = new H5PresetInfo(); // 內建目錄的檔案名稱 h5PresetInfo2.appId = TINY_COMMON_APP; h5PresetInfo2.version = "1.0.0.0"; h5PresetInfo2.downloadUrl = ""; NEBULA_LOCAL_PACKAGE_APP_IDS.put(TINY_COMMON_APP, h5PresetInfo2); } @Override public Set<String> getCommonResourceAppList() { Set<String> appIdList = new HashSet<String>(); appIdList.add(getTinyCommonApp()); return appIdList; } @Override public H5PresetPkg getH5PresetPkg() { H5PresetPkg h5PresetPkg = new H5PresetPkg(); h5PresetPkg.setPreSetInfo(NEBULA_LOCAL_PACKAGE_APP_IDS); h5PresetPkg.setPresetPath(NEBULA_APPS_PRE_INSTALL); return h5PresetPkg; } /** * 設定可以降級的資源套件 ID */ @Override public Set<String> getEnableDegradeApp() { return null; } @Override public String getTinyCommonApp() { return TINY_COMMON_APP; } @Override public InputStream getPresetAppInfo() { return null; } @Override public InputStream getPresetAppInfoObject() { return null; } }
根據用戶端整合的版本下載相應的小程式基礎庫,將基礎庫複製到上一步中指定的
asset
目錄下並重新命名。基於上一步的程式碼範例,小程式基礎庫路徑為assets/nebulaPreset/66666692
。在啟動時設定該 Provider 執行個體。程式碼範例如下:
H5Utils.setProvider(H5AppCenterPresetProvider.class.getName(), new H5AppCenterPresetProviderImpl());
說明如果用戶端中有使用 H5 公用資源套件,請將公用資源套件相關代碼合并至該
H5AppCenterPresetProvider
的執行個體類中。如有更多問題,參見 程式碼範例。