小程序基础库说明

基础库与客户端的关系

小程序能力需要客户端来支撑:

  • 每一版基础库新增能力都需要运行在特定版本及以上的客户端中。
  • 高版本基础库的某些新能力无法兼容低版本客户端。

关于基础库兼容方法,参见 兼容基础库。您可以通过 my.SDKVersion 查看当前基础库版本号。

兼容基础库

现阶段,小程序组件和 API 能力正在逐步完善和丰富,但是老版本客户端并不支持这些新增的能力,因此建议开发者做对应的兼容性处理。

您可通过接口 my.canIUse(String) 实现兼容性判断,详见 接口说明

兼容示例

新增 API 兼容性处理

对于新增 API,可以参照下面的代码来判断当前基础库是否支持该 API:

  1. if (my.getLocation) {
  2. my.getLocation();
  3. } else {
  4. // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样提示
  5. my.alert({
  6. title: '提示',
  7. content: '当前版本过低,无法使用此功能,请升级最新版本'
  8. });
  9. }

API 新增参数兼容性处理

对于 API 新增参数,可通过如下方式判断是否支持,并写入您的后续处理方式:

  1. if (my.canIUse('getLocation.object.type')) {
  2. // 在此处写入您的后续处理方式
  3. } else {
  4. console.log('当前版本不支持该参数')
  5. }

API 新增返回值兼容性处理

对于 API 新增返回值,可通过如下方式判断是否支持,并写入您的后续处理方式:

  1. if (my.canIUse('getSystemInfo.return.storage')) {
  2. // 在此处写入您的后续处理方式
  3. } else {
  4. console.log('当前版本不支持该返回值')
  5. }

组件新增属性兼容性处理

组件新增属性在旧版本客户端上无法实现,但也不会报错。若要对属性做降级处理可参见以下代码:

  1. Page({
  2. data: {
  3. canIUse: my.canIUse('button.open-type.share')
  4. }
  5. })

基础库版本

基础库版本 基础库对应基线版本
1.9.0 10.1.32 下载地址
1.14.1 10.1.60 下载地址

基础库集成说明

iOS

iOS 中无需进行基础库集成。

Android

由于基线版本的迭代,不同的基线版本需要采用不同的集成基础库的方式。在集成基础库前,请确认您的基线版本。

10.1.68.7 及以后的基线版本

在启动时设置该 Provider 实例。示例代码如下:

  1. H5Utils.setProvider(H5AppCenterPresetProvider.class.getName(),new TinyAppCenterPresetProvider());
说明: 如果客户端中有使用 H5 公共资源包,需要继承 TinyAppCenterPresetProvider 类,并将公共资源包相关代码合并至继承的类的实例中。

10.1.60 系列、10.1.68.6 及以前的基线版本

  1. 实现 H5AppCenterPresetProvider 接口类。代码示例如下:

    1. package com.mpaas.demo.nebula;
    2. import com.alipay.mobile.nebula.appcenter.H5PresetInfo;
    3. import com.alipay.mobile.nebula.appcenter.H5PresetPkg;
    4. import com.alipay.mobile.nebula.provider.H5AppCenterPresetProvider;
    5. import java.io.File;
    6. import java.io.InputStream;
    7. import java.util.HashMap;
    8. import java.util.HashSet;
    9. import java.util.Map;
    10. import java.util.Set;
    11. public class H5AppCenterPresetProviderImpl implements H5AppCenterPresetProvider {
    12. private static final String TAG = "H5AppCenterPresetProviderImpl";
    13. // 设置小程序专用资源包,此 ID 固定,不可设置其他值
    14. private static final String TINY_COMMON_APP = "66666692";
    15. // 预置包的 asset 目录
    16. private final static String NEBULA_APPS_PRE_INSTALL = "nebulaPreset" + File.separator;
    17. // 预置包集合
    18. private static final Map<String, H5PresetInfo> NEBULA_LOCAL_PACKAGE_APP_IDS = new HashMap();
    19. static {
    20. H5PresetInfo h5PresetInfo2 = new H5PresetInfo();
    21. // 内置目录的文件名称
    22. h5PresetInfo2.appId = TINY_COMMON_APP;
    23. h5PresetInfo2.version = "1.0.0.0";
    24. h5PresetInfo2.downloadUrl = "";
    25. NEBULA_LOCAL_PACKAGE_APP_IDS.put(TINY_COMMON_APP, h5PresetInfo2);
    26. }
    27. @Override
    28. public Set<String> getCommonResourceAppList() {
    29. Set<String> appIdList = new HashSet<String>();
    30. appIdList.add(getTinyCommonApp());
    31. return appIdList;
    32. }
    33. @Override
    34. public H5PresetPkg getH5PresetPkg() {
    35. H5PresetPkg h5PresetPkg = new H5PresetPkg();
    36. h5PresetPkg.setPreSetInfo(NEBULA_LOCAL_PACKAGE_APP_IDS);
    37. h5PresetPkg.setPresetPath(NEBULA_APPS_PRE_INSTALL);
    38. return h5PresetPkg;
    39. }
    40. /**
    41. * 设置可以降级的资源包 ID
    42. */
    43. @Override
    44. public Set<String> getEnableDegradeApp() {
    45. return null;
    46. }
    47. @Override
    48. public String getTinyCommonApp() {
    49. return TINY_COMMON_APP;
    50. }
    51. @Override
    52. public InputStream getPresetAppInfo() {
    53. return null;
    54. }
    55. @Override
    56. public InputStream getPresetAppInfoObject() {
    57. return null;
    58. }
    59. }
  2. 根据客户端集成的版本下载相应的小程序基础库,将基础库复制到上一步中指定的 asset 目录下并重新命名。基于上一步的代码示例,小程序基础库路径为assets/nebulaPreset/66666692

  3. 在启动时设置该 Provider 实例。代码示例如下:

    1. H5Utils.setProvider(H5AppCenterPresetProvider.class.getName(), new H5AppCenterPresetProviderImpl());
    说明
    • 如果客户端中有使用 H5 公共资源包,请将公共资源包相关代码合并至该 H5AppCenterPresetProvider 的实例类中。
    • 如有更多问题,参见 代码示例