内容简介:作者:崔毅然在这篇文章中,我们使用 LeanCloud 作为后端来实现游戏内的账户系统。这篇文章以 Unity 游戏引擎中的 C# 语言为示例,主要讲解如何实现几种主流的登录方式,包括游客登录、游客账号升级、手机号验证码登录、用户名密码注册及登录。
作者:崔毅然
在这篇文章中,我们使用 LeanCloud 作为后端来实现游戏内的账户系统。这篇文章以 Unity 游戏引擎中的 C# 语言为示例,主要讲解如何实现几种主流的登录方式,包括游客登录、游客账号升级、手机号验证码登录、用户名密码注册及登录。
接入 SDK
首先要接入 LeanCloud 的 SDK,接入方式可以参考 文档 。
游客登录
为了让玩家尽快体验游戏,每一个游戏都会有游客登录的功能。游客登录在 LeanCloud 中可以这样来实现:
var user = await AVUser.LogInAnonymouslyAsync();
调用上述代码成功后,LeanCloud 会自动生成一个游客用户登录,进入「控制台」 - 「存储」-「_User」表就可以看到表中新增了一条数据。在客户端登录的游客信息会一直被 SDK 存在本地,直到玩家删除游戏或主动退出登录。但就像所有游戏中的游客登录一样,当该游客退出登录后会丢失自己全部的游戏数据,为了保存游戏数据,需要将游客账号升级为正式账号。
游客账号升级
为了不丢失玩家的数据,我们会在游戏内建议玩家升级账号为正式玩家。例如绑定微信登录、绑定用户名密码及手机号,绑定成功后玩家就能以正式的登录方式获取到自己的游戏数据。
升级为微信登录
假设我们已经通过某些方法(例如使用 ShareSDK)拿到了微信的 openId、access_token、unionId 等,可以这样在 LeanCloud 中将游客账号关联到微信登录中:
var authData = new Dictionary<string, object> { { "access_token", "ACCESS_TOKEN" }, { "expires_in", 7200 }, { "openid", "OPENID" },// openId 是用户在当前微信应用下的唯一 Id }; // unionId 是用户在整个微信内的唯一 Id var unionId = "ox7NLs06ZGfdxbLiI0e0F1po78qE"; AVUserAuthDataLogInOption options = new AVUserAuthDataLogInOption { UnionIdPlatform = "weixin",// 这里指定用微信平台 AsMainAccount = true }; var user = AVUser.CurrentUser; // 绑定微信登录,第二个参数 weixinapp1是自定义的当前微信应用的标识 await user.AssociateAuthDataAndUnionIdAsync(authData, "weixinapp1", unionId, options);
关联成功后,玩家以后就可以用微信登录了,登录代码见下文的第三方账户登录。
绑定用户名、密码及手机号
var currentUser = AVUser.CurrentUser; currentUser.Username = "username"; currentUser.Password = "password"; user.MobilePhoneNumber = "186xxxxxxxx"; await currentUser.SaveAsync();
如果保存了手机号,保存成功后 LeanCloud 会自动向该手机号发送一条验证码,用户输入验证码后验证手机号:
await AVUser.VerifyMobilePhoneAsync("6位数字验证码");
手机号码验证成功后,该玩家以后就能以手机号登录了,这样就保证了游戏数据不会丢失。
手机号+验证码登录、用户名及密码登录的代码见下文。
手机号 + 验证码登录
这种登录方式下,如果 _User 表中没有这个手机号,则视为新用户,会自动注册账号并登录;如果 _User 表中某个用户已经有了这个手机号(例如曾使用过该手机号登录,或通过游客账号升级绑定的信息),则直接登录。
首先,调用发送登录验证码的接口:
await AVCloud.RequestSMSCodeAsync("18611111111");
然后使用验证码来登录
var user = await AVUser.SignUpOrLogInByMobilePhoneAsync("18611111111", "6位短信验证码");
用户名 + 密码注册登录
这种是最常见的登录方式,稍微有一点麻烦的是,需要玩家记住自己的用户名和密码。
注册
如果 _User 表中没有相应的用户名密码信息,例如从未注册过,也没有通过游客升级的方式增加用户名密码,需要先注册。
var user = new AVUser(); user.Username = "Tom"; user.Password = "cat!@#123"; await user.SignUpAsync(); Debug.Log(user.Username); 登录 var user = await AVUser.LogInAsync("username", "password"); Debug.Log(user.Username);
第三方登录
微信或 QQ 登录可以让玩家更便捷的登录游戏。利用 LeanCloud 第三方登录的模块就可以完成这种场景。
微信登录
假设现在开发者已经通过某些方法(例如使用 ShareSDK)拿到了微信的 openId、access_token、unionId 等,无需注册就可以在 LeanCloud 中直接登录。如果游客已经升级绑定了微信信息,也可以通过这种方式来登录。
var authData = new Dictionary<string, object> { { "access_token", "ACCESS_TOKEN" }, { "expires_in", 7200 }, { "openid", "OPENID" },// openId 是用户在当前微信应用下的唯一 Id }; // unionId 是用户在整个微信内的唯一 Id var unionId = "ox7NLs06ZGfdxbLiI0e0F1po78qE"; AVUserAuthDataLogInOption options = new AVUserAuthDataLogInOption { UnionIdPlatform = "weixin",// 这里指定用微信平台 AsMainAccount = true }; // 绑定微信登录,第二个参数 weixinapp1 是自定义的当前微信应用的标识 var user = await AVUser.LogInWithAuthDataAndUnionIdAsync(authData, "weixinapp1", unionId, options);
在 LogInWithAuthDataAndUnionIdAsync
这个方法中,第二个参数是自己定义的微信应用的名字,第三个参数 unionId 是用户在多个微信应用之间互通的唯一 id。如果我们有多个微信应用,就可以通过 unionId 登录来实现多个微信应用之间的账号互通。
其他平台
如果是其他平台,例如 facebook 是没有 unionId 的,这个时候只需要 access_token、expires_in、uid 三个自定义字段就可以了。
var authData = new Dictionary<string, object> { { "access_token", "ACCESS_TOKEN" }, { "expires_in", 7200 }, { "uid", "FACEBOOK_UID" }, }; var user = await AVUser.LogInWithAuthDataAsync(authData, "facebook");
由于 LeanCloud 默认只支持微信、QQ、新浪微博登录,因此对 Facebook 需要额外去设置一下唯一索引,设置唯一索引的方式非常简单,只需要进入控制台,在 _User 表中选择「其他」-「索引」,将 authData.facebook.uid 建立唯一索引,并且勾选上「允许缺失值」选项,这样 Facebook 登录也完成了。
以上所述就是小编给大家介绍的《如何实现手游中的账户系统|游戏后端》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 挖洞经验 | 绕过Facebook CSRF防护机制实现账户劫持
- 挖洞经验 | 通过密码重置功能构造HTTP Leak实现任意账户劫持
- 挖洞经验 | 从XSS漏洞到四步CSRF利用实现账户劫持
- EA Games 漏洞致3亿账户面临账户劫持威胁
- SQL2008的sa账户被禁用其他账户无法连接的快速解决方法
- 多账户的统一登录
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
JavaScript高级程序设计:第2版
Nicholas Zakas / 李松峰、曹力 / 人民邮电出版社 / 2010-7 / 89.00元
《JavaScript高级程序设计(第2版)》在上一版基础上进行了大幅度更新和修订,融入了近几年来JavaScript应用发展的最新成果,几乎涵盖了所有需要理解的重要概念和最新的JavaScript应用成果。从颇具深度的JavaScript语言基础到作用域(链),从引用类型到面向对象编程,从极其灵活的匿名函数到闭包的内部机制,从浏览器对象模型(BOM)、文档对象模型(DOM)到基于事件的Web脚本......一起来看看 《JavaScript高级程序设计:第2版》 这本书的介绍吧!