背景

我们发现大部分小程序都市运用 wx.getUserInfo 接口,来获得用户信息原本设计这个接口不时,我们但愿开发者在真正需要用户信息的情形下才去调取这个接口,但良多开发者见面直接调用这个接口,致使用户在利用小程序的时分发生困扰,归纳起来有几点:

  • 开发者在小程序首页直接调用 wx.getUserInfo 进行授权,弹框获得用户信息,会见使得一部分用户点击“拒绝”按钮
  • 在开发者没有处理用户拒绝弹框的情形下,用户必须授权头像昵称等信息才干继承利用小程序,会导致某些用户放弃应用该小程序
  • 用户没有很好的方法重新授权,尽管我们增加了设置页面,可以让用户取舍重新授权,但良多用户并不知道可以这么操作

此外,我们发现开发者默认将 wx.login 和 wx.getUserInfo 绑定应用,这个是由于我们一开始的设计缺点和实例代码招致的(wx.getUserInfo 必须经过 wx.login 在后台生成 session_key后才干调用)同时,我们收到开发者的反馈,但愿用户进入小程序首页便能获得到用户的 unionId,以便辨认到用户是不是以前关注了同主体大众号或运用过同主体的App

为了解决以上题目,针对获得用户信息微信团队更新了三个能力:

1.应用组件来获得用户信息

2.若用户满足必定条件,则可以用wx.login 获得到的code直接换到unionId

3.wx.getUserInfo 不需要依赖 wx.login 就能调用获得数据

 

获得用户信息组件引见

组件变化:

  • open-type属性增加 getUserInfo :用户点击时分会见触发 bindgetuserinfo 事件
  • 新增事件 bindgetuserinfo :当 open-type为 getUserInfo 常常,用户点击会面触发可以从事件返回参数的 detail 字段中获得到和 wx.getUserInfo 返回参数雷同的数据

示例:

<button open-type=”getUserInfo” bindgetuserinfo=”userInfoHandler”> Click me button>

和 wx.getUserInfo 不同之处在于:

1.API wx.getUserInfo 只会晤弹一次框,用户拒绝授权之后,再次调用将不会弹框;

2.组件 由于是用户主动触发,不受弹框次数限制,只要用户没有授权,都市再次弹框

通过获得用户信息的组件,就可以解决用户再次授权的题目。

 

直接获得unionId

开发者申请 userinfo 授权重要为了获得 unionid,我们勉励开发者在不骚扰用户的情形下合理得到unionid,而仅在必要时才向用户弹窗申请利用昵称头像为此,凡应用“获得用户信息组件”获得用户昵称头像的小程序,在满足以下全体条件常常,将可以静默取得 unionid:

1.在微信开放平台下存在同主体的App、民众号、小程序

2.用户关注了某个雷同主体大众号,或曾经在某个雷同主体App、民众号上进行过微信登录授权

这样但是让其他同主体的App、民众号、小程序的开发者快捷取得已有用户的数据

不依靠登录的用户信息获得

某些工具类的容易量小程序不需要登录行为,但是也想获得用户信息,那么就可以在 wx.getUserInfo 的时分加一个参数 withCredentials: false 直接获得到用户信息,可以少一次网络恳求

这样可以在不给用户弹窗授权的情形下直接展示用户的信息

最佳实践

1.调用 wx.login 获得 code,然后从微信后端换取到 session_key,用于解密 getUserInfo返回的敏感数据

2.利用 wx.getSetting 获得用户的授权情形

1) 如果用户已经授权,直接调用 API wx.getUserInfo 获得用户最新的信息;
2) 用户未授权,在界面中显示一个按钮提醒用户登入,当用户点击并授权后就获得到用户的最新信息

3.获得到用户数据后可以进行展示或者发送给自己的后端

 

One More Thing

除了获得用户方案介绍之外,再聊一聊好多初次接触微信小程序的开发者所不容易明白的一些概念:

1.关于OpenId和UnionId

OpenId 是一个用户对于一个小程序/民众号的标识,开发者可以通过这个标识辨认出用户。

UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定雷同账号的主体开发者但是通过UnionId,实现大都个小程序、民众号、甚至APP 之间的数据互通了

同一个用户的这两个 ID 对于同一个小程序来说是永久不变的,就算用户删了小程序,下次用户进入小程序,开发者仍旧可以通过后台的记录标识出来

2.关于 getUserInfo 和 login

许多开发者会晤把 login 和 getUserInfo 捆绑调用当成登录使用,其实 login 已经可以完成登录,getUserInfo 只是获得额外的用户信息

在 login 获得到 code 后,会见发送到开发者后端,开发者后端通过接口去微信后端换取到 openid 和sessionKey(现在见面将 unionid 也一并返回)后,把自定义登录态 3rd_session返回给前端,就已经完成登录行为了而 login 行为是静默,不必授权的,用户不会发觉

getUserInfo 只是为了提供更优质的服务而存在,比如展示头像昵称,断定性别,开发者但是经过 unionId 和其他大众号上已有的用户画像结合来提供历史数据因此开发者不必在用户刚刚进入小程序的时分就强制要求授权

可以在官方的文档中看到 login 的最佳实践:

Q & A

Q1: 为什么 login 的时分不直接返回 openid,而是如果用这么复杂的方法来经过后台好几层处理之后才干拿到?

A: 为了防备坏人在网络链路上做手脚,所以小程序端恳求开发者服务器的的请求都需要二次验证才是可信的因为我们采用了小程序端只给 code ,由服务器端拿着 code 和 AppSecrect 去微信服务器恳求的方法,才会给到开发者对应的openId 和用于加解密的 session_key。

立即

咨询

400电话

电话咨询

400-1875-778

微信咨询

李经理

微信扫一扫加好友

下载源码

返回顶部