微信小程序获取用户唯一标识,详解unionid机制与应用
发布时间:11-02来源:微信小程序工具|微信小程序开发|微信小程序制作平台-龙图应用【XcxIP.com】
做微信小程序开发的,迟早要跟用户身份这事儿较劲。刚开始接触时,很多人习惯了用openid,觉得这东西够用了,每个用户在小程序里都有一个专属ID,存进数据库,下次登录还能认出来。但做着做着就发现不对劲——公司又做了个公众号,或者上了个APP,用户在小程序里的身份跟他在其他平台的身份对不上号了。这时候你才意识到,openid只是“一把钥匙开一把锁”,而unionid才是那把能打开所有门的“万能钥匙”。

先说清楚openid和unionid到底差在哪儿。openid是微信针对“某个小程序”给用户生成的唯一标识,同一个用户在你家小程序里是A,在隔壁小程序里就是B,互不相通。而unionid是微信针对“同一主体”下的所有应用生成的统一标识,只要这些应用都绑在同一个开放平台账号下,用户不管从哪个入口进来,拿到的unionid都是同一个。打个比方,openid是你在不同餐厅办的会员卡,卡号各不相关;unionid是你的身份证号,走到哪儿都是那一个。
那怎么才能拿到unionid呢?门槛在于你得先把小程序、公众号、APP这些应用都绑定到微信开放平台的一个账号下,然后在前端调用拿到code,把code传给后端,后端再用code去微信的接口换session_key和openid。如果用户已经关注过同主体下的公众号,或者登录过同主体下的APP,那么返回的数据里就会带上unionid。但这里有个坑——如果用户从来没碰过你其他应用,第一次进小程序,那返回的数据里可能就只有openid,没有unionid。
遇到这种情况,不少人就懵了,以为代码写错了。其实这是微信的规则:必须用户至少跟同主体下的另一个应用产生过关联,unionid才会暴露出来。解决的办法也简单,可以引导用户去关注公众号,或者在小程序里触发一次绑定操作,之后再调用接口就能拿到unionid了。还有一种更省事的方案,直接在小程序后台的“设置-开发设置-用户信息”里,把“获取用户unionid”的权限打开,这样即使没有其他应用关联,也能通过某些接口拿到,但这个权限不是所有类目都能开的。
说到unionid的实际应用,最典型的就是用户体系打通。比如你有个电商项目,小程序是主要入口,但用户也会在公众号里看文章点链接进商城,还可能下载了APP。如果三个平台各存一套用户ID,那用户的积分、订单、收藏全对不上,后台数据乱七八糟。用了unionid之后,用户在小程序里注册,公众号里登录,APP上消费,后端一查unionid,就知道是同一人,所有数据自动合并。不仅省事,用户体验也顺滑得多。
另一个高频场景是消息推送和营销触达。小程序没法主动给用户发消息,但公众号可以。如果你知道用户的unionid,就能把他在小程序里的行为和公众号的openid关联起来,然后通过公众号模板消息给他推送订单状态、优惠活动。很多做私域运营的团队就是这么干的——先用小程序做交易,再用公众号做触达,中间靠unionid把两套系统缝起来。没有unionid,你就只能干瞪眼,看着用户在小程序里下了单,却没法在公众号里给他发个“您有优惠券待领取”。
还有做数据分析和用户画像的,unionid的价值更明显。单看某个小程序的用户行为,你只能得到一个片面的画像。打通unionid之后,你能看到同一个用户在小程序里浏览了什么、在公众号里点了什么、在APP里买了什么,行为轨迹拼在一起,才能还原出一个完整的用户形象。然后你就能做更精准的推荐,比如他在小程序里看了半天鞋子没下单,你在公众号里给他推个鞋子的优惠券,转化率可能就上来了。
不过,unionid也不是万能的,有几个坑得提前知道。第一个是绑定关系的前提——所有应用必须在同一主体下,而且都得绑定到同一个开放平台账号。如果公司主体不同,或者某个应用忘了绑,那unionid就拿不到。第二个是数据同步的时效性,用户第一次进小程序时可能没有unionid,必须在后端做一次判断,如果没拿到,就主动触发一次获取流程,不能干等着。第三个是隐私合规的问题,unionid算是用户标识,存储和使用都得遵守个人信息保护法的要求,不能随便存,更不能随便传。
另外,老项目改造的时候要格外小心。很多早期项目只存了openid,后来要接unionid,就得在用户表里加一个unionid字段,然后写一个数据回填的脚本,把老用户一个个去微信接口查一遍。这个过程如果用户量大了,接口调用次数会很多,得做限流和分批处理。而且有些老用户可能因为没关联过其他应用,永远拿不到unionid,这部分数据就得想办法用其他维度去匹配,比如手机号。
再往深了说,unionid的获取策略其实也跟你产品的注册流程有关。如果你的小程序是强制绑手机号的,其实可以先把手机号作为用户主键,unionid作为辅助标识,这样即使unionid暂时拿不到,也不影响用户正常使用。等后续用户触发了关联,再补上unionid,数据自然就串起来了。这种思路在很多成熟团队里已经是标配了,毕竟微信的规则没法改,但咱们的业务流程可以设计得灵活点。
说到底,unionid这套机制,本质上是微信在帮开发者做“跨应用身份识别”的标准化方案。你不用自己去搞什么设备指纹、账号合并的算法,只要按微信的规则来,把应用绑好、把接口调通、把数据存对,就能实现一套用户体系覆盖所有微信生态的入口。虽然前期配置有点繁琐,但后期省下的维护成本、带来的运营效率提升,绝对值回票价。
如果你现在正准备从零开发一个小程序,或者正在改造一个老项目,建议一开始就把unionid的设计考虑进去,别等数据堆成山了再回填,那才叫真的头大。微信这盘棋下得大,你得跟着它的规则走,才能玩得转。
