本
文
摘
要
登录流程这一块,之前做功能没有接触到这一块,最近做登录踩了几个坑,下面来梳理一下:
我们这款app,之前是h5版的,在线上运营了大概一年,效果还比较好,但是h5版本的没有服务器,数据是采用云函数存储在云服务器的,当前看数据可以,打算快速的出一个app版本,先上台湾市场,看看效果,于是就接入了服务器,大部分的逻辑还是在前端,大约花了1-2个月左右接入完成,2020年11月份左右推出了app台版的,留存也比较好,次留大约有60%-70%,前后端各一个开发人员,之后又搭了一台h5端的服务器,把云函数数据库数据迁移到mysql,正式接入了服务器,服务器接入之后,准备先把一部分涉及到道具相关的逻辑迁移到后端,12月初左右国内的app版号申请又下来了,然后又出了国内版本,接了vivo,好游快爆,apple3个平台,前面两个平台上了之后数据还可以,apple只是审核通过还没来得及上线,在1月初,老板突然说要国内大上,大约20个渠道,订的1月29好上线,然后一个月内,我们匆匆忙忙接完上线了,坑就此埋下来了。
我们接的sdk不是渠道原生的sdk,不然也没有那么快,两个星期就匆匆忙忙接完了,我们公司出了一个聚合sdk,整合在市面上主流的大部分sdk,对于我们开发来了,就不用针对单个渠道单个处理。
登录方式是:oppo,vivo,华为,小米,应用宝,4399,bilibili,360,阿里游戏,联想,233等这些渠道是只能使用该平台的账号才能登录,官方包、 taptap,好游快爆,金立,魅族,百度,美图等这些渠道包支持微信登录和游客登录两种方式。
游客登录是不经过sdk服务器,登录流程大致如下:
微信登录和第三方平台账号登录需要经过sdk服务器,登录流程大致是:客户端先向sdk,sdk返回heiToken和channelToken,然后客户端拿着heiToken和channelToken,设备id,渠道名请求游戏服务器,游戏服务器拿着这些参数去请求sdk服务器认证,然后sdk服务器返回第三方的openId,服务器根据openId和platform查找是否有对应的用户,然后返回给前端用户信息。
上线之后,根据玩家反馈给客服的情况,大致有以下几个坑:
1.为什么应用宝登录登录和官方包微信登录不是同一个号?
这个问题其实算一种设计方案,看策划要求是否选择分渠道还是不分渠道,前期我们接的匆忙,这些问题也没考虑到,之前默认按分渠道创建账号,所以两个平台的微信登录创建了两个不同的账号,在后续优化中,我们询问了公司的sdk开发的小伙伴,我们自己接入的微信和登录和应用宝自带的微信登录,他们在微信那边申请的appid是两个不同的公司主体,所以两种微信登录方式返回了不同的openId,但是我们的官方包和美图、金立、好游等这些渠道的包是采用的一个包体,只是渠道名不一样,微信登录返回的openId是一样的,由于我们游戏服务器是根据platform+openId来确认唯一用户标识,所以尽管这些包都是返回一样的openId,但是还是创建了不同的游戏账号。
如果要做成不分渠道创建玩家账号,游戏服这边还需要建立一个各个平台openId和游戏id的关联关系表,考虑到改动量比较大,当前这种分渠道创建账号也能接受,所以这个问题就暂时不做优化,希望大家在接平台的时候一定要问清楚需不需要分平台创建账号。
2.当前已有游客账号,再用微信登录是否需要自动绑定游客账号还是重新创建新号?
这个问题正常的流程应该是检查到该设备上有游客账号登录过,微信登录时要么自动绑定到玩家游客账号上要么弹出提示询问玩家是否要绑定到当前的游客账号上,但是我们在接入登录的时候没有考虑到这个问题,微信登录直接又给玩家创建了一个新账号,苹果的微信登录是上线之后接入的,所以玩家下载新包之后,微信登录发现是新号,就不能理解,以为是新号,所以我们在之后的优化中,在微信登录的时候也向游戏服传游客登录时取的设备唯一码,微信登录时,游戏服先向sdk或者微信的openId,然后根据openId+platform查找是否创建了账号,如果没有,再根据设备码+游客平台查找是否有游客账号,如果有游客账号,前端弹出提示询问玩家是否需要合并账号,还是重新创建游客账号。
3.苹果游客登录为什么会丢账号?
客户端在游客登录的时候获取的设备唯一码方法不对,大致的意思是:苹果不让获取设备唯一码,然后用了一个什么方法随机生成了一个唯一码,放在内存中,如果当前手机上没有别的app应用用到这个方法取唯一码,在卸载改游戏清缓存之后,这个唯一码可能丢失。再次下载该游戏进入可能会新生成一个唯一码,就会出现丢账号的请求。根据前端同事的说法,这个取唯一码是前端这边自己调用的方法,公司的聚合sdk有针对取唯一设备码提供有方法,但是如果现在修改获取唯一码的方法,可能导致苹果上之前的老游客账号大面积丢失账号,考虑到这中丢账号是小概率事件,所以我们暂时不修改这个取唯一设备码的方法,针对游客账号每次登录进游戏强弹一个提示,告诉玩家可能有丢账号的风险,提示玩家尽快绑定账号。