经常在 Taro 社区和 Taro QQ 群看到类似的反馈:
微信小程序更新了用户授权的相关,不知道 Taro 适配了没有。
Taro 什么时候支持 getUserProfile 方法
什么时候支持 wx.onCopyUrl 这个接口
这些问题其实都是“微信等小程序平台更新了 API,而 Taro 团队还没有及时适配”,遇到这种情况应该怎么办?如果你直接使用Taro.xxx
进行调用很有可能会遇到如下错误信息:
旧版本调用 Taro 暂未适配 API 时的报错如截图所示,新版本是这种报错VM826 WAService.js:2 TypeError: _tarojs_taro__WEBPACK_IMPORTED_MODULE_7___default.a.startFacialRecognitionVerify is not a function
其实这种情况特别容易解决,官方也给我们了解决办法,总的来说有以下 2 种办法:
1. 直接使用各平台前缀进行调用
比如微信更新了授权接口,在使用微信原生开发时的调用语句是
wx.getUserProfile({
desc: '用于完善会员资料',
success: (res) => {},
})
那我们在 Taro 代码中也直接这样写就可以使用,如果是跨端项目或者稳妥起见,则需要添加判断语句,只在特定端使用。
// 以下代码可以在Taro项目中使用微信新出的API
if (process.env.TARO_ENV === 'weapp') {
wx.getUserProfile({
desc: '用于完善会员资料',
success: (res) => {},
})
}
上面的示例代码是微信小程序的,但支付宝小程序、头条小程序等平台新接口也是一样的道理,直接使用就可以了。因为没有类型定义,编译器可能报错,但不影响编译和运行。
2. 使用 Taro 插件为小程序平台注入 API
其实这种接口没法及时适配的情况 Taro 官方也知道,为了大家能使用最新的 API,最近官方出了一个插件 @tarojs/plugin-inject
就是帮我们解决这个问题的。
插件地址:https://github.com/NervJS/taro-plugin-inject
安装 在 Taro 项目根目录下安装
npm i @tarojs/plugin-inject --save
使用 引入插件
请确保 Taro CLI 已升级至 Taro 3.1.0 的最新版本。
修改项目 config/index.js
中的 plugins 配置为如下
const config = {
plugins: [
[
'@tarojs/plugin-inject',
{
// 配置项
},
],
],
}
配置项有很多种,具体的参数可以去查看官方说明,我这里只针对 api 修改做出示例。
支持小程序新增同步的 API 需要配置 syncApis:
const config = {
plugins: [
[
'@tarojs/plugin-inject',
{
// 配置需要新增的 API
syncApis: ['a'],
},
],
],
}
运行时即可调用此新增的 API:
Taro.a()
支持小程序新增异步的 API 需要配置 asyncApis
const config = {
plugins: [
[
'@tarojs/plugin-inject',
{
// 配置需要新增的 API
asyncApis: ['b'],
},
],
],
}
运行时即可调用此新增的 API:
Taro.b()
.then(() => {})
.catch(() => {})
以上两种方式都可以解决最新 API 使用的问题,第 1 种办法是 Taro1、Taro2、Taro3 都通用的操作办法,第 2 种办法只支持最新的 Taro3,可以根据自己的实际情况选择方案。