简单来说,这次能力更新,为 button
组件的 open-type
属性赋予了新的有效值 getUserInfo
(声明需要获取用户信息)。
同时,官方还宣布,如果提审的小程序出现「启动即要求授权」和「强制要求授权」的情况,将会无法通过审核。
那么,开发者应该如何适配新推出的获取用户资料方式呢?在新方式下,还需要注意一些什么呢?
知晓程序(微信号 zxcx0101)今天就来为你讲解,如何使用新方法获取用户资料。
关注「知晓程序」微信公众号,在后台回复「开发」,获取知晓程序小程序开发文章精选干货文章。
如何使用新方法获取用户资料?
我们以「虚荣数据库」小程序为例,来展示如何将旧的登录模式升级到新的模式。
在旧版的「虚荣数据库」中,小程序调用获取用户数据模式是这样的:处理登录、获取用户数据和注销行为的方法存储于小程序实例(app.js
)中,便于实际页面调用。
大致步骤是这样的:
简单的代码如下:
在新的方式中,获取用户数据的实体,从 wx.getUserInfo()
函数,变成了按钮上的事件函数。
使用新的方式获取用户信息,过程大致如下:
app.js
中的登录函数,同时额外传入用户数据。之后的事情,一切照旧。
厘清了新旧方法之间的差异,代码的修改思路就比较清晰了。
首先,我们将触发登录事件的元素,统一改为 button
元素,还要加上 open-type='getUserInfo'
参数。
同时,我们还要加入 bindgetuserinfo
参数,并在其中填入加入获取用户数据的页面实例方法。
然后,我们在相应事件中,将用户数据传入小程序实例的 login()
方法。
接下来,只需要让 app.js
按新的方法处理用户数据,就可以了。
现在,来跑一下小程序——嗯,一切正常。
如何向下兼容旧版微信?
想必很多人在使用新方法的时候,都会担心旧版微信的兼容问题。
的确,这种登录方法在版本太老旧的微信上,是无法正常完成的。
不过不用担心,我们可以使用微信提供的 wx.canIUse()
方法,来做到接口兼容性核查,在旧版微信上引导用户更新,或是选择使用旧方式获取用户信息。
我们先在按钮上,用 bindtap
来额外绑定一个兼容性检查事件:
然后,我们在相应的函数中,进行兼容性检查:
在开发者工具中,将「基础库版本」调低,再次运行,可以看到小程序成功做出了判断。
在本例中,我们选择提示、引导用户更新微信;你也可以选择调用 wx.getUserInfo()
接口,直接获取用户资料。
想看完整的代码示例?关注微信公众号「知晓程序」,回复「源码」,即可获得利用新方式获取用户资料的源码 Demo。
还需要注意什么问题?
如果小程序需要判断不同用户,但不需要使用用户资料(头像、昵称等),只需调用 wx.login()
接口,再用自己的服务器调用接口,即可获取用户的 OpenID,无需用户额外授权。
在新方式下,若用户首次拒绝授权,可以通过再次点击按钮重新请求授权。开发者只需提示用户需要授权即可,无需调用小程序权限开关界面,要求用户手动打开授权开关。
另外,转换到新方式时,可以将相应视觉元素用 button
打包,并为相应 button
设定无背景色、无边框等属性,达到隐藏触发按钮的目的,减少对界面的改动。
当然,如果你的小程序是刚启动就会要求用户授权的,那么你应该尽快修改小程序,使用新的按钮回调方式,获取用户的资料。
微信官方已经提示开发者,不应在小程序启动时直接向用户授权获取用户资料,小程序也不应该强制让用户授权访问用户资料。否则,小程序将不予通过审核。