小程序能力需要客户端来支撑:
基础库与客户端的关系
小程序能力需要客户端来支撑:
每一版基础库新增能力都需要运行在特定版本及以上的客户端中。
高版本基础库的某些新能力无法兼容低版本客户端。
关于基础库兼容方法,参见 兼容基础库。您可以通过 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
的实例类中。如有更多问题,参见 代码示例。