如何實現手遊中的帳戶系統|遊戲開發

做者:崔毅然html

在這篇文章中,咱們使用 LeanCloud 做爲後端來實現遊戲內的帳戶系統。這篇文章以 Unity 遊戲引擎中的 C# 語言爲示例,主要講解如何實現幾種主流的登陸方式,包括遊客登陸、遊客帳號升級、手機號驗證碼登陸、用戶名密碼註冊及登陸。後端

接入 SDK

首先要接入 LeanCloud 的 SDK,接入方式能夠參考文檔bash

遊客登陸

爲了讓玩家儘快體驗遊戲,每個遊戲都會有遊客登陸的功能。遊客登陸在 LeanCloud 中能夠這樣來實現:微信

var user = await AVUser.LogInAnonymouslyAsync();
複製代碼

調用上述代碼成功後,LeanCloud 會自動生成一個遊客用戶登陸,進入「控制檯」 - 「存儲」-「_User」表就能夠看到表中新增了一條數據。在客戶端登陸的遊客信息會一直被 SDK 存在本地,直到玩家刪除遊戲或主動退出登陸。但就像全部遊戲中的遊客登陸同樣,當該遊客退出登陸後會丟失本身所有的遊戲數據,爲了保存遊戲數據,須要將遊客帳號升級爲正式帳號。app

遊客帳號升級

爲了避免丟失玩家的數據,咱們會在遊戲內建議玩家升級帳號爲正式玩家。例如綁定微信登陸、綁定用戶名密碼及手機號,綁定成功後玩家就能以正式的登陸方式獲取到本身的遊戲數據。ui

升級爲微信登陸

假設咱們已經經過某些方法(例如使用 ShareSDK)拿到了微信的 openId、access_token、unionId 等,能夠這樣在 LeanCloud 中將遊客帳號關聯到微信登陸中:spa

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);
複製代碼

關聯成功後,玩家之後就能夠用微信登陸了,登陸代碼見下文的第三方帳戶登陸。code

綁定用戶名、密碼及手機號
var currentUser = AVUser.CurrentUser;
currentUser.Username = "username";
currentUser.Password = "password";
user.MobilePhoneNumber = "186xxxxxxxx";
await currentUser.SaveAsync();
複製代碼

若是保存了手機號,保存成功後 LeanCloud 會自動向該手機號發送一條驗證碼,用戶輸入驗證碼後驗證手機號:orm

await AVUser.VerifyMobilePhoneAsync("6位數字驗證碼");
複製代碼

手機號碼驗證成功後,該玩家之後就能以手機號登陸了,這樣就保證了遊戲數據不會丟失。cdn

手機號+驗證碼登陸、用戶名及密碼登陸的代碼見下文。

手機號 + 驗證碼登陸

這種登陸方式下,若是 _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 登陸也完成了。

相關文章
相關標籤/搜索