【微信小程序】插件开发功能和小程序基础库文档
【微信小程序】插件开发功能文档对微信小程序开发者可开发完整的插件页面,并具有微信分享、页面跳转等能力【微信小程序开发电话】便于插件开发者在插件内提供完整的服务流程、同时可便捷地被其他小程序接入使用。
【微信小程序】插件开发功能文档:微信小程序定制开发电话
插件功能页
插件功能页从小程序基础库版本 2.1.0 开始支持。
插件不能直接调用 wx.login 等较为敏感的接口。在需要访问一些敏感接口时,可以使用插件功能页的方式。使用插件功能页可以实现以下这些功能:
获取用户信息,包括 openid 和昵称等(相当于 wx.login 和 wx.getUserInfo 的功能)。
支付(相当于 wx.requestPayment )。
需要注意的是:插件使用支付功能,需要进行额外的权限申请,申请位置位于管理后台的“小程序插件 -> 基本设置 -> 支付能力”设置项中。另外,无论是否通过申请,主体为个人小程序在使用插件时,都无法正常使用插件里的支付功能。
在具体使用功能页时,插件可以在插件的自定义组件中放置一个 <functional-page-navigator> 组件,用户在点击这个组件区域时,可以跳转到一个固定的页面,允许用户执行登录或其他操作。
激活功能页特性
功能页是 插件所有者小程序 中的一个特殊页面。
插件所有者小程序,指的是与插件 AppID 相同的小程序。例如,“小程序示例”小程序开发了一个“小程序示例插件”,无论这个插件被哪个小程序使用,这个插件的插件所有者小程序都是“小程序示例”。
启用插件功能页时,需要在插件所有者小程序 app.json 文件中添加 functionalPages 定义段,其值为 true 。
{ "functionalPages": true }
注意,新增或改变这个字段时,需要这个小程序发布新版本,才能在正式环境中使用插件功能页。
跳转到功能页
在插件需要登录时,可以在插件的自定义组件中放置一个 <functional-page-navigator> 组件。
代码示例:
<functional-page-navigator name="loginAndGetUserInfo" args="" version="develop" bind:success="loginSuccess"> <button>登录到插件</button> </functional-page-navigator>
用户在点击这个区域时,会自动跳转到插件所有者小程序的功能页。功能页会提示用户进行登录或其他相应的操作。操作结果会以组件事件的方式返回。
具体用法和支持的功能页列表详见 组件说明 。
目前,功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。
功能页函数
在使用支付功能页时,插件所有者小程序需要提供一个函数来响应支付请求。这个响应函数应当写在小程序根目录中的 functional-pages/request-payment.js 文件中,名为 beforeRequestPayment 。如果不提供这段代码,将通过 fail 事件返回失败。
注意:功能页函数不应 require 其他非 functional-pages 目录中的文件,其他非 functional-pages 目录中的文件也不应 require 这个目录中的文件。这样的 require 调用在未来将不被支持。
代码示例:
// functional-pages/request-payment.js exports.beforeRequestPayment = function(paymentArgs, callback) { paymentArgs // 就是 functional-page-navigator 的 args 属性中 paymentArgs // 在这里可以执行一些支付前的参数处理逻辑,包括通知后台调用统一下单接口 // 在 callback 中需要返回两个参数: err 和 requestPaymentArgs // err 应为 null (或者一些失败信息) // requestPaymentArgs 将被用于调用 wx.requestPayment callback(null, { // 这里的参数与 wx.requestPayment 相同,除了 success/fail/complete 不被支持 timeStamp: timeStamp, nonceStr: nonceStr, package: package, signType: signType, paySign: paySign, }) }
这个目录和文件应当被放置在插件所有者小程序代码中(而非插件代码中),它是插件所有者小程序的一部分(而非插件的一部分)。 如果需要新增或更改这段代码,需要发布插件所有者小程序,才能在正式版中生效;需要重新预览插件所有者小程序,才能在开发版中生效。
Bugs & Tips
Bug:在微信版本 6.6.7 中,功能页被拉起时会触发 App 的部分生命周期并使得功能页启动时间变得比较长。在后续的微信版本中这一行为会发生变更,使 App 生命周期不再被触发。
兼容
小程序的功能不断的增加,但是旧版本的微信客户端并不支持新功能,所以在使用这些新能力的时候需要做兼容。
文档会在组件,API等页面描述中带上各个功能所支持的版本号。
可以通过 wx.getSystemInfo 或者 wx.getSystemInfoSync 获取到小程序的基础库版本号。
也可以通过 wx.canIUse 详情 来判断是否可以在该基础库版本下直接使用对应的API或者组件
兼容方式 - 版本比较
微信客户端和小程序基础库的版本号风格为 Major.Minor.Patch(主版本号.次版本号.修订号)。 开发者可以根据版本号去做兼容,以下为参考代码:
function compareVersion(v1, v2) { v1 = v1.split('.') v2 = v2.split('.') var len = Math.max(v1.length, v2.length) while (v1.length < len) { v1.push('0') } while (v2.length < len) { v2.push('0') } for (var i = 0; i < len; i++) { var num1 = parseInt(v1[i]) var num2 = parseInt(v2[i]) if (num1 > num2) { return 1 } else if (num1 < num2) { return -1 } } return 0 } compareVersion('1.11.0', '1.9.9') // 1
兼容方式 - 接口
对于新增的 API,可以用以下代码来判断是否支持用户的手机。
if (wx.openBluetoothAdapter) { wx.openBluetoothAdapter() } else { // 如果希望用户在最新版本的客户端上体验您的小程序,可以这样子提示 wx.showModal({ title: '提示', content: '当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试。' }) }
兼容方式 - 参数
对于 API 的参数或者返回值有新增的参数,可以判断用以下代码判断。
wx.showModal({ success: function(res) { if (wx.canIUse('showModal.cancel')) { console.log(res.cancel) } } })
兼容方式 - 组件
对于组件,新增的组件或属性在旧版本上不会被处理,不过也不会报错。如果特殊场景需要对旧版本做一些降级处理,可以这样子做。
Page({ data: { canIUse: wx.canIUse('cover-view') } })
<video controls="{{!canIUse}}"> <cover-view wx:if="{{canIUse}}">play</cover-view> </video>
functional-page-navigator
这个组件从小程序基础库版本 2.1.0 开始支持。
仅在插件的自定义组件中有效,用于跳转到插件功能页。
属性名 | 类型 | 默认值 | 说明 | 最低版本 |
---|---|---|---|---|
version | String | release | 跳转到的小程序版本,有效值 develop(开发版),trial(体验版),release(正式版) ,仅在当前小程序为开发版或体验版时此参数有效;如果当前小程序是体验版或正式版,则打开的小程序必定是正式版 | 2.1.0 |
name | String | 要跳转到的功能页 | 2.1.0 | |
args | Object | null | 功能页参数,参数格式与具体功能页相关 | 2.1.0 |
bindsuccess | EventHandle | 功能页返回,且操作成功时触发, detail 格式与具体功能页相关 | 2.1.0 | |
bindfail | EventHandle | 功能页返回,且操作失败时触发, detail 格式与具体功能页相关 | 2.1.0 |
name 有效值:
值 | 说明 | 接受的 args | success 返回的 detail | fail 返回的 detail | 最低版本 |
---|---|---|---|---|---|
loginAndGetUserInfo | 获取用户信息,对应 wx.login 和 wx.getUserInfo | 与 wx.getUserInfo接受的 args 相同(除回调函数外) | wx.login 和 wx.getUserInfo 的结果的并集 | 与 wx.login 或 wx.getUserInfo 相同 | 2.1.0 |
requestPayment | 支付,对应 wx.requestPayment | fee 字段,表示需要显示在页面中的金额,单位为分; paymentArgs 字段,任意数据,传递给功能页中的响应函数 | 与 wx.requestPayment相同 | 与 wx.requestPayment相同 | 2.1.0 |
示例代码:
<!-- sample.wxml --> <functional-page-navigator name="loginAndGetUserInfo" bind:success="loginSuccess"> <button>登录到插件</button> </functional-page-navigator>
// redirect.js navigator.js Component({ methods: { loginSuccess: function(e) { console.log(e.detail.code) // wx.login 的 code console.log(e.detail.userInfo) // wx.getUserInfo 的 userInfo } } })
Tips:
功能页是插件所有者小程序中的一个特殊页面,开发者不能自定义这个页面的外观。
在功能页展示时,一些与界面展示相关的接口将被禁用(接口调用返回 fail )。
这个组件本身可以在开发者工具中使用,但功能页的跳转目前不支持在开发者工具中调试,请在真机上测试。
扫二维码手机查看该文章