如何实现手游中的账户系统|游戏后端

栏目: 后端 · 发布时间: 6年前

内容简介:作者:崔毅然在这篇文章中,我们使用 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 登录也完成了。


以上所述就是小编给大家介绍的《如何实现手游中的账户系统|游戏后端》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Uberland

Uberland

Alex Rosenblat / University of California Press / 2018-11-19 / GBP 21.00

Silicon Valley technology is transforming the way we work, and Uber is leading the charge. An American startup that promised to deliver entrepreneurship for the masses through its technology, Uber ins......一起来看看 《Uberland》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

URL 编码/解码
URL 编码/解码

URL 编码/解码

html转js在线工具
html转js在线工具

html转js在线工具