需求场景:
最近公司做了一个小游戏想通过小游戏来吸一波粉丝到指定的订阅号,类似关注公众号后领取100钻石。(模仿微信爱微游,疯狂游乐场)游戏有用户系统(根据openid记录每个用户的钻石数量,皮肤数量等等),问题来了订阅号是没有网页授权的,只有跟订阅号发生交互后才能获取到用户的信息也包括openid,也就是说只有先来订阅号这边关注才能获取用户的唯一标识openid,才能进行游戏,这样不利于一个链接就能传播,不利于形成爆款。有的同学就问了为啥不直接用服务号,因为服务号每个月只能发四次推送不利于维护粉丝。在此需求场景下,下面是解决思路。
主要功能:
1.获取到玩家的唯一标示openid(作为玩家在游戏中的id)
2.判断玩家是否关注了公众号,未关注引导关注,关注后领取钻石
3.分享功能(日常操作,此文不详细讲述)
解决思路:
可以准备两个公众号一个是服务号用来进行网页授权,一个是订阅号(引导玩家关注这个订阅号),玩家通过朋友分享的链接或者在朋友圈看到的链接进入游戏后通过服务号的接口进行网页授权,这里说一个坑,授权有两种方式:
应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),
snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
必须使用snsapi_userinfo方式在未关注服务号的情况下只有这种方式才能获取到用户的信息(有的同学肯定疑惑为啥要获取信息获取openid不久行啦,下面会讲)。获取到玩家的微信信息主要有:
{ "openid":" OPENID",
" nickname": NICKNAME,
"sex":"1",
"province":"PROVINCE"
"city":"CITY",
"country":"COUNTRY",
"headimgurl": "http://thirdwx.qlogo.cn/mmopen/g3MonUZtNHkdmzicIlibx6iaFqAc56vxLSUfpb6n5WKSYVY0ChQKkiaJSgQ1dZuTOgvLLrhJbERQQ4eMsv84eavHiaiceqxibJxCfHe/46",
"privilege":[ "PRIVILEGE1" "PRIVILEGE2" ],
"unionid": "o6_bmasdasdsad6_2sgVt7hMZOPfL"
}
这些信息都会存入数据库的service_user表,为了实现第二个功能,就是判断玩家是否关注,因为关注的根本就是另一个公众号(订阅号)所以不能用openid的,那就只能用用户的一些基本信息做判断啦,玩家在关注了订阅号后就跟订阅号产生了互动就可以获取到玩家的基本信息,此时获取到的用户信息存入数据库的另一张表subscription_user。
当玩家进入游戏被引导关注订阅号后会根据获取到的该玩家的nickname,sex,city去查订阅号的用户表subscription_user表如果查到了说明玩家关注了订阅号粉丝转化成功,发放钻石。当然发放钻石的openid是有记录的,每个玩家只能领取一次奖励。有的小伙伴就会问啦那我关注后领取了钻石在取消关注怎么办,嗯,从技术上角度是可以获取到取消关注玩家的信息的,难道让玩家的钻石凭空消失? 从产品和人文关怀角度当然不能这么做,这就是运营人员的事情了,可以从公众号的内容上留住玩家,也可以定期发放礼包,只要游戏好玩有趣还是可以留住大部分玩家的。最后有相关疑问可以加我微信d523205909,备注csdn。