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