关于如何判断用户是否关注公众号的方法,之前写过一篇文章 (微信小程序里判断是否关注了公众号,这个方法很简单)https://mp.weixin.qq.com/s/Nt3fdvey59_s34eBRFFvSQ,但是产品经理觉得这个样子用户体验很差,得优化,当听到他这么说的时候,心里有一万只草泥马在奔腾,但是又能怎样呢,还是要操起代码来改。
后来想了一种方法,就是启用公众号服务器配置,监听关注或取关事件,存储数据库,监听到用户关注的事件,就在数据库标记该用户已关注,监听到用户取关的事件,就把数据库标记该用户是否关注的字段改成未关注,这样把这个字段查给前端,前端就可以知道当前登录用户是否关注公众号,弹出引导用户关注的提示语。
这个实现起来也挺麻烦的,但是总比之前那个体验要好了吧,也比较实时的监控到用户的关注取关动作。好了,这样用了一段时间,产品经理又来找我了,他说这个功能还得优化,听到这话,我特么差点把刚喝的水吐他脸上,其实不是不小心,想故意吐他一脸的水。
这次优化的理由是什么呢?产品经理说,当前的做法只对这个功能加上去后进来的用户关注取关有效,那之前的那些用户呢,明明已经老早就关注了的,现在一进我们应用还是会弹出来提示去关注公众号,又得重新取关,再重新关注才会生效,这样不行。
怎么说呢,之前改的时候就和他说过针对之前的用户会有这个问题,得重新取关再关注才可以,因为监听事件的代码是后来加上的,那在这之前那些已关注的用户都没有监听到他们关注的事件,自然而然就没法在数据库标记是否已关注啊。反正产品经理经常耍赖,这次也不例外,就扔下两个字,“继续优化”,就走了。
接下来,重点来了,经过观察,其实还有一个更简单的方法来解决这种体验差,历史数据又没监听到是否关注的问题。那就是初始化的时候看用户是否有unionid,如果有,那就是已关注,如果没有,那就是未关注或者取关的。这个是很实时的,不管你是什么时候关注的,又或者关注完取关的,就差在有没有unionId。
在初始化的接口里面判断一下用户是否携带unionId并且有值就好了。微信是否会返回unionId这个字段,前提是要小程序和公众号绑定在同一个微信开放平台上才可以。如果有更好的方法欢迎不吝赐教哦,说出来共勉。
直接爬一遍所有关注用户,不就没有缺少之前关注的用户数据的问题了:https://developers.weixin.qq.com/doc/offiaccount/User_Management/Getting_a_User_List.html