使用 Unity 通过 Firebase 进行匿名身份验证

您可以使用 Firebase Authentication 创建和使用临时匿名账号来进行 Firebase 身份验证。借助临时匿名账号,尚未注册应用的用户也可以使用受安全规则保护的数据。如果匿名用户决定注册您的应用,您可以将匿名用户的登录凭据与匿名账号关联,这样他们就可以在以后的会话中继续使用其受保护的数据。

准备工作

  1. 您必须先将 Firebase Unity SDK(具体而言就是 FirebaseAuth.unitypackage)添加到您的 Unity 项目中,然后才能使用 Firebase Authentication

    如需查找关于这些初始设置步骤的详细说明,请参阅将 Firebase 添加至您的 Unity 项目

  2. 如果您尚未将您的应用与 Firebase 项目关联,请在 Firebase 控制台中进行关联。
  3. 启用匿名身份验证:
    1. Firebase 控制台中,打开 Auth 部分。
    2. Sign-in Methods(登录方法)页面中,启用匿名登录方法。
    3. 可选:如果您已将项目升级为采用 Firebase Authentication with Identity Platform,则可以启用自动清理。启用此设置后,系统会自动删除超过 30 天的匿名账号。在启用了自动清理的项目中,匿名身份验证将不再计入用量限额或结算配额。请参阅自动清理

匿名进行 Firebase 身份验证

当某个未登录的用户使用需要进行 Firebase 身份验证的应用功能时,您可以按以下步骤操作,让用户匿名登录:

FirebaseAuth 类是所有 API 调用都需要通过的门户,此类可通过 FirebaseAuth.DefaultInstance 访问。
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;
1. 调用 Firebase.Auth.FirebaseAuth.SignInAnonymouslyAsync
auth.SignInAnonymouslyAsync().ContinueWith(task => {
  if (task.IsCanceled) {
    Debug.LogError("SignInAnonymouslyAsync was canceled.");
    return;
  }
  if (task.IsFaulted) {
    Debug.LogError("SignInAnonymouslyAsync encountered an error: " + task.Exception);
    return;
  }

  Firebase.Auth.AuthResult result = task.Result;
  Debug.LogFormat("User signed in successfully: {0} ({1})",
      result.User.DisplayName, result.User.UserId);
});

将匿名账号转成永久账号

当匿名用户注册您的应用时,您可能需要允许其使用新账号继续之前的操作。例如,您可能需要将用户在注册之前添加到购物车中的商品移到其新账号的购物车中。为此,请完成以下步骤:

  1. 当用户注册时,可按照用户身份验证提供方的登录流程逐步进行,直到需要调用某一 Firebase.Auth.FirebaseAuth.SignInAndRetrieveDataWithCredentialAsync 方法时停止。例如,获取用户的 Google ID 令牌、Facebook 访问令牌或电子邮件地址和密码。
  2. 为新的身份验证提供方获取 Firebase.Auth.Credential

  3. Firebase.Auth.Credential 对象传递给登录用户的 LinkWithCredentialAsync 方法:

如果对 LinkWithCredentialAsync 的调用成功完成,用户的新账号便可以访问匿名账号的 Firebase 数据。

自动清理

如果您已将项目升级为采用 Firebase Authentication with Identity Platform,则可以在 Firebase 控制台中启用自动清理。启用此功能即表示您允许 Firebase 自动删除超过 30 天的匿名账号。在启用了自动清理的项目中,匿名身份验证不会计入用量限额或结算配额。

  • 启用自动清理后创建的任何匿名账号都可能会在创建 30 天后随时自动删除。
  • 现有匿名账号将在启用自动清理 30 天后自动删除。
  • 如果您关闭了自动清理,计划删除的匿名账号仍将按照计划删除。
  • 如果您通过将匿名账号与任何登录方法相关联来“升级”该账号,则系统不会自动删除该账号。

如果您想在启用此功能前了解多少用户会受到影响,并且您已将项目升级为采用 Firebase Authentication with Identity Platform,则可以在 Cloud Logging 中按 is_anon 进行过滤。

后续步骤

在用户可以进行 Firebase 身份验证后,您可以使用 Firebase 规则控制用户对您 Firebase 数据库中的数据的访问权限。