使用微信 openid 作为用户唯一标识然后接入微信支付,付款的用户登录微信即激活,这个方案按理说还是挺完美的,但是有一个致命的问题就是用户只能够在其安装并登录了对应用户的设备上才能激活。假如用户有主力机、备用机和一个平板的话,那他大概率只会在主力机上安装微信,备用机和平板就没办法激活了。也就是说这个方案不存在多设备激活的可能性。
当然做比如使用被微信激活的设备生成二维码或者激活码来激活次要设备再限制登录之类的,但是这个有点奇葩了,用户估计很难接受。另外假如后续接入支付宝的话这套流程又很难兼容。综上感觉除非是和微信生态强绑定的项目,否则不太适合这套方案。
另一个方案是使用激活码,直接使用订单号作为激活码然后限制登录,允许二次交易。虽然可能存在泄露激活码然后被他人盗用的问题,但这个是用户的责任开发者可以不用管。这个算是成熟的方案了,没有什么太大的问题。
这次发帖的话主要还是想再探讨一下用邮箱作为认证的可行性,对比上次改动如下:
1.用户首次打开 APP 时生成并持久化一个 UUID 作为唯一凭证,在登录时将 UUID 、设备信息和邮箱发送到后台
2.后台将传上来的信息保存到数据库,然后加密信息发送邮件到用户邮箱
3.用户点击邮箱中的超链接,后台解密验证后在数据库里标记设备登录,并在网页中通知用户回到 APP 刷新状态
4.APP 状态分为“未登录可以查询登录状态或者立即登录”、“已登录可以退出登录或点击立即激活”和“已激活”三种状态。用户用持久化的 UUID 查询登录状态则进入“已登录”的状态
5.已登录用户点击立即激活,如果后台未查到购买记录则发起购买,付费成功后 APP 自动重新询问激活
6.如果查询到购买记录则新增一行激活记录并返回激活凭证保存到 APP 本地,并作废旧的激活记录以限制设备数量
7.如果连登录记录都查不到的话则踢出用户回退到未登录的状态
8.已激活的用户打开 APP 时定时去询问,如果本地的激活凭证过期则回退到已登录的状态
对比之前的流程省略了用户复制邮件内容的过程,能够解决微信登录多设备难激活的问题,之后假如对接支付宝也不会有很大的兼容问题,要说复杂肯定是比纯激活码方案要复杂的,这里先探讨可行性。目前能够想到的可能会遇到的问题:
1.需要搭建邮件服务器,虽然听说可以找 163 之类的托管一个邮件域名,但毕竟还是多引入了一个环节,可能存在邮件被用户邮箱封禁的问题
2.接口需要做一定的频率保护,针对同一个 UUID 或者同一个邮箱地址限定比如只能一分钟发一次邮件
3.用户可能会要求更换邮箱但保持购买记录,这个只能联系开发者手动处理了
4.用户可能卖掉第二第三设备的激活名额但是之后又想反悔,需要解除某些设备的绑定,这个只能联系开发者删掉邮箱的登录记录
大家有什么意见或者建议都可以提出来,这里先提前感谢大家了!