最近有朋友问到我,snsgame中邀请开通是如何实现的,如何鉴别身份的合法性等,能不能实现类似gmail那样通过邮件扩散的方式.
其实这个问题要分为两个场景:
场景一:用户有帐号,只要开通相关的应用(如果邀请开通开心农场)。
场景二:用户没有帐号,需要开通帐号(如果邀请开通gmail)。
下面分别介绍下两个场景如何实现邀请开通。
场景一:
因为邀请人和被邀请人都有登陆帐号,所以鉴权就很简单了,假设发送邀请人的ID是:test_user1,被邀请人的ID是:test_user2。
操作流程:
1.发送邀请时,用两个ID加上一个密钥(KEY),进行MD5加密,得到INVITE_KEY。
2.收到邀请的人开通相关应用时,把INVITE_KEY和邀请人的ID放到HTTP参数中透传给后台,后台用传入的发起人的ID和被邀请人的ID以及KEY,MD5加密,看结果是不是与INVITE_KEY相同,如果相同则说明合法,否则就是非法的。
场景二:
一个已注册gmail的用户,可以发邀请,邀请好友开通,并且邀请资格只有50次。邀请发出,次数即减一,不考虑对方是否开通成功。
发送者的邮件地址如下: [email protected] , 被邀请用户选择的用户名是[email protected]。
操作流程:
1. 用两个邮件的用户名(test_user1/test_user2)和一个密钥KEY,进行MD5加密,得到密文INVITE_KEY,并且该INVITE_KEY以及用户名拼接到邮件开通链接中。
2. 收到邮件的人,点击开通链接,发送HTTP请求到后台,后台从链接中解出两个用户名以及INVITE_KEY, 并用相同的加密方式,对解出来的用户名进行加密,并与INVITE_KEY匹配,如果成功,说明是合法的,这时可以给test_user2开通帐号并提示键入密码。
这里存在一个问题,密文INVITE_KEY是否有过期时间,以及test_user2如果被其他人抢注的怎么办?
因此,这里在要在发送邀请时,需要判断test_user2是否已被注册,如果没有被注册的话,把test_user2写到一个临时表,并标识该用户名在后续的一段时间内(VALID_TIME)不能再接送邀请了。 在第二步中,在校验成功后,判断test_user2是否在VALID_TIME中,以及test_user2对应的INVITE_KEY是否一致,如果在的话,才开通,如果不在的话,说明test_user2用户名已超过合法的时间被清理掉了,这时其他用户可以选择使用了,如果不一致的话,说明该用户名已被第二个用户使用,而第一个用户的选择已过期。开通成功后,把test_user2从临时表中删掉。
以上就是snsgame邀请开通和帐户邀请开通常用的方式,现在大部分互联网应用都采用邀请开通的方式进行内测,公测,原因就在于互联网应用特性都会先投入使用再根据用户体验和反馈进行修改,另外也是基于服务器压力的原因采用这种灰度放量的方式。