相关文档
- 小程序与小游戏获取用户信息接口调整,请开发者注意升级
- 小程序•小故事(4)——获取用户信息
- 小程序•小故事(6)——微信登录能力优化
- 获取用户信息方案介绍
- code2Session
- UnionID 机制说明
文档总结
上面的文档有必要都看一遍,关心的变化简单总结了下。
一些变化
wx.getUserInfo以后都不能呼出弹窗了,但还能获取用户信息wx.login能获取unionIdwx.getUserInfo不需要依赖wx.login就能调用得到数据button新增事件 bindgetuserinfo :当 open-type为 getUserInfo 时,用户点击会触发。可以从事件返回参数的 detail 字段中获取到和 wx.getUserInfo 返回参数相同的数据。open-data用于展示微信开放的数据。
之前为什么要用 wx.getUserInfo
开发者申请 userinfo 授权主要为了获取 unionid,我们鼓励开发者在不骚扰用户的情况下合理获得 unionid,而仅在必要时才向用户弹窗申请使用昵称头像。为此,凡使用“获取用户信息组件”获取用户昵称头像的小程序,在满足以下全部条件时,将可以静默获得 unionid:
- 在微信开放平台下存在同主体的App、公众号、小程序。
- 用户关注了某个相同主体公众号,或曾经在某个相同主体App、公众号上进行过微信登录授权。
这样可让其他同主体的App、公众号、小程序的开发者快速获得已有用户的数据。
最佳实践
1.调用 wx.login 获取 code,然后从微信后端换取到 session_key,用于解密 getUserInfo返回的敏感数据。
2.使用 wx.getSetting 获取用户的授权情况
- 如果用户已经授权,直接调用 API wx.getUserInfo 获取用户最新的信息;
- 用户未授权,在界面中显示一个按钮提示用户登入,当用户点击并授权后就获取到用户的最新信息。
3.获取到用户数据后可以进行展示或者发送给自己的后端。
关于产品
如果某些特殊小程序在使用前一定需要用户登录,或者已经进行到需要用户登录的操作时,可以将 button 组件(其中 open-type 属性指定为 getUserInfo)放置到页面中,页面上可以大致说明以下要点:
- 为什么需要我授权?
- 需要我什么信息?
- 授权后我得到什么好处呢?
接下来在页面上放置一个明显的登录按钮, 建议这个页面上不要有额外的点击区域,以免分散用户注意力,让用户专注于登录这件事情。
简单的开发建议
当用户打开小程序时访问第一个页面时,先通过 wx.login,获取用户 openID 。这时无需弹框授权,开发者拿到 openID 可以建立自身的帐号 ID。
在第一步中,拿到 openID 后,判断是新用户还是老用户。如果是老用户,可以直接登录;如果是新用户,可先在小程序首页展示你的信息服务,让用户对这个小程序有大概的了解,再引导用户进行下一步的操作。
当需要获取用户头像昵称的时候,对用户展示一个登录页面,这个页面只有一个最重要的操作,引导用户进行登录。
FAQ
Q1:
后台要维护用户信息 --- Azleal
我们的小程序业务是功能都需要授权才能使用的(也就是必须拿到unionid获取用户信息) --- elemeNT
我在小程序与服务号的数据需要互通,通过unionId来确定用户的唯一性,如果在用户进入小程序后不强制他授权,单凭一个openid来存储他的用户数据,在用户下次从服务号进入时。不就会产生重复数据吗?就没做到数据互通了 --- ﺭ并向你吐了趴口水ﺭ五年.
另外看到官方提到 要强制推行,我想说我们目前所有用户是通过unionid注册的。那么这些用户就不得不使用 openid重新登录 、注册一遍。更重要的是,之前他们的相关数据都会对应不上(因为你们也不允许强制用户登录授权) --- 羊毛
现在这种方案,不能满足我们的需求,我们的小程序,必须一进入就要获取他的信息,然后加载他的数据; --- 韩文
A1: 调用wx.login已经可以获取到用户的登录态,已经可以做用户账号的管理。 UserInfo 中带的 UnionId 是额外的信息,没有它完全可以完成登录
对于需要和开发平台绑定的业务进行数据互通的情况,一个新用户进来没有互通数据的情况下也是可以体验到所有业务,那么对于没有授权unionId的用户,可以将其当成是新用户,当真正授权unionId之后再做绑定完全是可以的
Q2:
我需要确保用户的唯一性,这样就必须取unionID,否则用户删除了小程序,或者换了设备, 下次再进来这个小程序,该用什么来区分是上次来过的用户呢?? --- WEI+
A2: 如果你本身没有其他公众号、App、小程序,那么也就没必要拿到unionid,因为unionid是打通你在开放平台下所有应用的标识
如果只有一个小程序,用 openid 足以, openid 是一个用户对于一个小程序的标识,永远不变
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 和其他公众号上已有的用户画像结合来提供历史数据。因此开发者不必在用户刚刚进入小程序的时候就强制要求授权。