玩家和登录

重启后依然保留的游客账号、显示名称,以及将游客关联到邮箱或 Google。

代码注释和 API 名称保留英文,以便与 SDK 保持一致。

本页内容

游客登录#

在启动时调用一次。它会恢复已保存的会话(必要时刷新),或创建一个新游客,让同一位玩家保留自己的进度。

C#
var signIn = await Majacloud.Auth.SignInAnonymouslyAsync();
if (signIn.Ok)
{
    var player = signIn.Value;
    Debug.Log(player.PlayerId + " " + player.DisplayName + " guest: " + player.IsGuest);
}
每个网络每 15 分钟最多创建 30 个新游客,以阻止脚本批量创建账号。

显示名称#

游客会获得自动生成的名称,例如 Guest 4821。玩家可以自行设置名称,排行榜会显示该名称。

C#
var renamed = await Majacloud.Auth.SetDisplayNameAsync("Nova");
if (!renamed.Ok) Debug.Log(renamed.Error.Message); // e.g. Validation: too long

关联时会在你的 MAJACLOUD 服务器上打开一个安全网页,玩家可以在其中使用邮箱和密码或 Google 登录或注册。游客的进度(分数、存档、钱包)会迁移到该账号,游戏也会收到新的会话——在任何设备上都是如此。

C#
// Opens the sign-in page, waits for the player, then switches the session
var linked = await Majacloud.Auth.LinkAccountAsync(new MajacloudLinkOptions { ReturnUrl = "mygame://auth" });
if (linked.Ok) Debug.Log("Signed in as " + linked.Value.DisplayName);

// WebGL: browsers only open tabs from a click, so start first and open inside the handler
var flow = await Majacloud.Auth.StartLinkAsync(new MajacloudLinkOptions { OpenBrowser = false });
linkButton.onClick.AddListener(() => flow.Value.OpenInBrowser());
var result = await flow.Value.WaitForCompletionAsync();
  1. SDK 会创建一次性密钥(PKCE),并启动登录流程。
  2. 玩家在网页上完成操作;SDK 会持续轮询,直到流程完成。
  3. SDK 使用该密钥将流程兑换为会话,因此被盗的链接毫无用处。
  4. 流程在 15 分钟后过期(页面打开期间会自动延长)。

返回游戏#

如果没有返回 URL,页面会提示玩家自行返回游戏。要自动将玩家送回游戏,请在 API 密钥 ▸ 玩家登录返回 URL 中添加你的自定义 URL scheme(例如 mygame),并将 mygame://auth 作为返回 URL 传入。

事件#

在玩家切换、退出登录,或会话无法再刷新时做出响应:

C#
Majacloud.Auth.PlayerChanged += player => nameLabel.text = player?.DisplayName;
Majacloud.Auth.SignedOut += () => ShowTitleScreen();
Majacloud.Auth.SessionExpired += () => ShowSignIn();

退出登录#

退出登录会在服务器上撤销会话,并在设备上清除它。下次登录会创建一个新游客。

C#
await Majacloud.Auth.SignOutAsync();   // revokes the session on the server
Majacloud.Auth.ClearLocalSession();   // or only forget it on this device

从服务器读取玩家#

使用私密密钥,你的服务器可以读取任何玩家,包括邮箱和钱包余额:

JavaScript
// Node.js, created with secretKey
const found = await admin.server.getPlayer('player_3f9c…');
if (found.ok) console.log(found.value.player.email, found.value.player.wallets);

在控制台中管理#

玩家页面列出每位玩家及其登录方式、分数、存档和钱包。你可以在这里重命名或停用玩家、让其在所有设备上退出登录、发送密码重置链接,或删除玩家。

搜索页面标题、小标题和正文。

↑↓ 选择 ↵ 打开 Esc 关闭