UnionID 机制说明
如果开发者拥有多个移动应用、公众账号、小程序等,可通过unionId来区分用户的唯一性。
不同账号(移动应用、公众号、小程序)用户的openId是不同的,但如果都绑定在同一个开放平台下,那么用户的unionId是唯一的。
即:同一用户,对同一个微信开放平台下的不同应用,UnionID是相同的。
怎么获取unionId
在微信开放平台下存在同主体的App、公众号、小程序。
- 静默获取unionId的条件
-
用户关注了某个相同主体公众号,开发者可以直接通过 wx.login + code2Session 获取到该用户 UnionID。
-
用户已经在某个相同主体App、公众号上进行过微信登录授权,开发者也可以直接通过 wx.login + code2Session 获取到该用户 UnionID。
-
用户在小程序中支付完成后,开发者可以直接通过getPaidUnionId接口获取该用户的 UnionID。
- 用户主动授权获取unionId
button
组件的属性设置为open-type=getUserInfo
,用户点击时候会触发bindgetuserinfo
事件,可以从事件返回参数的detail
字段中获取到加密后的用户信息包括unionId- 调用接口 wx.getUserInfo,从解密数据中获取 UnionID。注意本接口需要用户授权。
不依赖用户授权去获取用户信息
某些工具类的轻量小程序不需要登录行为,但是也想获取用户信息,那么就可以在 wx.getUserInfo 的时候加一个参数 withCredentials: false 直接获取到用户信息,可以少一次网络请求。
这样可以在不给用户弹窗授权的情况下直接展示用户的信息。
只能获取到用户的头像昵称等数据,拿不到unionId
关于OpenId和UnionId
OpenId 是一个用户对于一个小程序/公众号的标识,开发者可以通过这个标识识别出用户。
UnionId 是一个用户对于同主体微信小程序/公众号/APP的标识,开发者需要在微信开放平台下绑定相同账号的主体。开发者可通过UnionId,实现多个小程序、公众号、甚至APP 之间的数据互通了。
同一个用户的这两个 ID 对于同一个小程序来说是永久不变的,就算用户删了小程序,下次用户进入小程序,开发者依旧可以通过后台的记录标识出来。