小程序开放平台

文档中心
起步
游戏引擎
运行时
运行环境
运行环境
运行机制
JavaScript支持情况
小程序更新机制
基础库
低版本兼容
调试
Adapter
基础能力
开放能力
性能优化

低版本兼容

开发
>
开发指南
>
运行时
>
基础库
>
低版本兼容
>
更新时间:2024-11-25 14:50:36

为了避免新版本的基础库给线上小程序带来未知的影响,小红书客户端都是携带 稳定版 的基础库发布的。 小红书客户端一周一版进行迭代。基础库小功能以及 bugfix 会根据测试进展,决定是否跟当周版本。 对于比较大的能力变动,会通过后台灰度新版本基础库,各项指标(稳定性、性能等)达到要求后,会下掉跟着下个客户端发版周期,进行上线。

基础库与客户端之间的关系

小程序的能力需要小红书客户端来支撑,每一个基础库都只能在对应的客户端版本上运行,高版本的基础库无法兼容低版本的客户端。

基础库版本号

major.minor.patch: 版本关系严格跟随 语义化 走。通常:

  • major:有大的 breakchange,上下不兼容;
  • minor:功能性 feature,SDK 框架层,并未出现 breakchange,但通常,开发者需要根据自己使用的 feature 自行判断;
  • patch:线上功能修复。

兼容

小程序的功能不断的增加,但是就版本的小红书客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。 开发者可以通过以下方式进行低版本的兼容:

版本号比较

小程序基础库的版本号风格为 major.minor.patch。 文档中会在组件,API 等页面描述中带上各个功能所要求的最低基础库版本号。 开发者可以在小程序中通过调用 xhs.getSystemInfo 或者 xhs.getSystemInfoSync 获取到当前小程序运行的基础库的版本号。通过版本号比较的方式进行运行笛版本兼容逻辑。 版本号比较适用于所有情况。部分场景下也可以使用后面提到的方法完成。

注意:不要直接使用字符串比较的方法进行版本号比较。

版本号比较可以参考以下代码:

function compareVersion(v1, v2) {
  v1 = v1.split('.')
  v2 = v2.split('.')
  const len = Math.max(v1.length, v2.length)

  while (v1.length < len) {
    v1.push('0')
  }
  while (v2.length < len) {
    v2.push('0')
  }

  for (let i = 0; i < len; i++) {
    const num1 = parseInt(v1[i])
    const num2 = parseInt(v2[i])

    if (num1 > num2) {
      return 1
    } else if (num1 < num2) {
      return -1
    }
  }

  return 0
}

compareVersion('1.11.0', '1.9.9') 
const version = xhs.getSystemInfoSync().SDKVersion

if (compareVersion(version, '1.1.0') >= 0) {
  xhs.openBluetoothAdapter()
} else {
  // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
  xhs.showModal({
    title: '提示',
    content: '当前小红书版本过低,无法使用该功能,请升级到最新小红书版本后重试。'
  })
}

API 存在判断

对于新增的 API,可以通过判断该 API 是否存在来判断是否支持用户使用的基础库版本。例如:

if (xhs.openBluetoothAdapter) {
  xhs.openBluetoothAdapter()
} else {
  // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示
  xhs.showModal({
    title: '提示',
    content: '当前小红书版本过低,无法使用该功能,请升级到最新小红书版本后重试。'
  })
}

xhs.canIUse

除了直接通过版本号判断,也可以通过 xhs.canIUse 来判断是否可以在该基础库版本下直接使用。例如:

API 参数或返回值

对于 API 的参数或者返回值有新增的参数,可以判断用以下代码判断。

xhs.showModal({
  success: function(res) {
    if (xhs.canIUse('showModal.success.cancel')) {
      console.log(res.cancel)
    }
  }
})

组件

对于组件,新增的组件或属性在旧版本上不会被处理,不过也不会报错。如果特殊场景需要对旧版本做一些降级处理,可以这样子做。

Page({
  data: {
    canIUse: xhs.canIUse('cover-view')
  }
})
<video controls="{{!canIUse}}">
  <cover-view xhs:if="{{canIUse}}">play</cover-view>
</video>

设置最低基础库版本

注意:用户进入小红书时,App版本低于设置的最低基础库 小红书会自动提示升级。这个升级提示是强提示,用户不能跳过。一般严重 bug 才建议进行基础库版本设置

为便于开发者解决低版本基础库无法兼容小程序的新功能的问题,开发者可设置小程序最低基础库版本要求。 开发者可以登录专业号平台,进入「店铺 - 小程序基础设置 - 基础库最低版本设置」进行配置。

设置后,若用户基础库版本低于设置值,则无法正常打开小程序,并提示用户更新客户端版本。