事情起源于《合成海报的小程序插件》和《小程序插件数据统计》,想着在票圈海报的数据统计中,加入 openid 信息做为用户唯一标识,统计回访情况。本以为和小程序获取 openid 一样,静默授权即可。结果发现插件获取用户信息,比小程序中严格的多,openid 也需要显式的用户授权。用户信息授权用到了插件功能页,遇到了一些困难,记录一下。
小程序插件功能页的用途,官网有详细介绍,这里不赘述。
现象
用微信开发者工具导入官方的代码片段,只是修改了appid,其他无任何修改。
手机调试的时候无任何反应。
根本原因
插件所有者小程序 的功能页特性未激活。具体来说,在插件所有者小程序的 app.json 文件中添加 functionalPages 定义段,并令其值为 true ,例如:
1 | { |
其中最重要而容易遗漏的步骤,是先切换到“小程序模式“(下图),再激活功能页特性。一开始就是因为没有厘清 小程序插件 ,和 插件所有者小程序 两个概念,绕了些弯路。
具体步骤
- 微信开发工具打开项目后,先将插件模式切换到 小程序模式 ,这时控制台会有报错,将 miniprogram 目录下 app.json 文件中,
plugins.myPlugin.verion
的值改为 latest ,报错消失;
添加 functionalPages 定义段,并令其值为 true ,例如:
1
2
3
4
5{
"functionalPages": {
"independent": true
}
}然后点微信开发者工具中的“预览”上传一次代码到开发环境,扫码访问。 这样功能页就打包到开发版小程序中了;
切换回 插件模式,在开发者工具上打开插件项目,将插件中
functional-page-navigator
中的 version 属性设置为 develop, app.json 文件中,plugins.myPlugin.verion
的值改回 dev点击预览可以生成插件预览二维码,用测试用的真机扫码即可预览功能页;如果更改了插件代码,重新生成并扫描插件的预览二维码即可;
如果过了一段时间之后,跳转功能页时出现“开发版已过期”这样的提示,从第1步开始重试一次
一句话总结
其实就是要理解,插件功能页是打包到 插件所有者小程序 中并发布的(通过 "functionalPages": true
申明)。可以把插件模式下的宿主小程序,当作第三方小程序,用户触发授权的时候,跳转到 插件所有者小程序 的插件功能页,在上面确认授权。