通过 Unity 使用基于密码的帐号进行 Firebase 身份验证

借助 Firebase 身份验证,您可以让您的用户使用其电子邮件地址和密码进行 Firebase 身份验证,还可以管理您的应用的基于密码的帐号。

开始之前

使用 Firebase 身份验证之前,您必须先创建一个 Firebase 项目,并将 Firebase Unity SDK 软件包添加到 Unity 项目中。

设置:

前提条件

Android

  • Unity 5.0 或更高版本
  • Android NDK 版本 10d 或更高版本

iOS

  • Unity 5.0 或更高版本
  • Xcode 8.0 或更高版本

如果您还没有 Unity 项目,可以下载一个快速入门示例,试用一下特定的 Firebase 功能。如果使用快速入门示例,请不要忘记从项目设置中获取软件包标识符,下一步中会用到该标识符。

在 Firebase 控制台中设置您的应用

要将 Firebase 添加到您的应用,您需要有一个 Firebase 项目以及适用于您的应用的 Firebase 配置文件。

要创建 Firebase 项目:

  1. 如果您还没有 Firebase 项目,请在 Firebase 控制台中创建一个。点击添加项目。如果您已经有与自己的移动应用相关联的现有 Google 项目,请从项目名称下拉菜单中选择该项目。否则,请输入项目名称以创建新项目。
  2. 可选:修改您的项目 ID。系统会自动为您的项目指定唯一 ID,此 ID 将用在公开显示的 Firebase 功能(例如数据库网址)以及您的 Firebase 托管子域名中。如果您想使用特定子域名,现在就可以更改此 ID。
  3. 执行其余的设置步骤,然后点击创建项目(如果您使用现有的项目,则点击添加 Firebase),开始为您的项目配置资源。这通常需要几分钟的时间。此过程完成后,您就会看到项目概览。

Android

  1. 点击将 Firebase 添加到您的 Android 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
  2. 出现提示时,输入应用的软件包名称。请务必输入应用在使用的软件包名称;只有在将应用添加到 Firebase 项目时您才能进行此设置。
  3. 在此过程中,您要下载一个 google-services.json 文件。您可以随时重新下载此文件
  4. 添加初始化代码后,运行您的应用以向您已成功安装 Firebase 的 Firebase 控制台发送验证。

iOS

  1. 点击将 Firebase 添加到您的 iOS 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
  2. 出现提示时,输入应用的软件包 ID。请务必输入应用在使用的软件包 ID;只有在将应用添加到 Firebase 项目时您才能进行此设置。
  3. 在此过程中,您要下载 GoogleService-Info.plist 文件。您可以随时重新下载此文件
  4. 添加初始化代码后,运行您的应用以向您已成功安装 Firebase 的 Firebase 控制台发送验证。
  5. 将从 Firebase 控制台下载的 GoogleService-Info.plist 拖动到 Unity 项目中的任意文件夹内。

将 Firebase Unity SDK 添加到您的应用

  1. 下载 Firebase Unity SDK
  2. 依次选择 Assets > Import Package > Custom Package 菜单项。
  3. 从之前下载的 Firebase Unity SDK 导入 FirebaseAuth.unitypackage 软件包。
  4. 当出现 Import Unity Package 窗口时,点击 Import 按钮。

初始化 SDK

Firebase Unity SDK (Android) 需要使用 Google Play 服务。必须先将 Google Play 服务更新为最新版本,然后才能使用该 SDK。您应在应用开头处添加以下代码,以便检查 Google Play 服务版本是否符合 Firebase Unity SDK 的要求,并视情况将其更新为相应版本,然后再调用 SDK 中的任何其他方法。

Firebase.FirebaseApp.CheckAndFixDependenciesAsync().ContinueWith(task => {
  var dependencyStatus = task.Result;
  if (dependencyStatus == Firebase.DependencyStatus.Available) {
    // Set a flag here indiciating that Firebase is ready to use by your
    // application.
  } else {
    UnityEngine.Debug.LogError(System.String.Format(
      "Could not resolve all Firebase dependencies: {0}", dependencyStatus));
    // Firebase Unity SDK is not safe to use here.
  }
});

编译您的应用

Android

  1. 依次选择 File > Build Settings 菜单选项。
  2. 选择 Platform 列表中的 Android
  3. 点击 Switch Platform,选择 Android 作为目标平台。
  4. 等待 Unity 状态栏右下角的旋转进度条(正在编译)图标停止旋转。
  5. 点击 Build and Run

iOS

  1. 依次选择 File > Build Settings 菜单选项。
  2. 选择 Platform 列表中的 iOS
  3. 点击 Switch Platform,选择 iOS 作为目标平台。
  4. 等待 Unity 状态栏右下角的旋转进度条(正在编译)图标停止旋转。
  5. 点击 Build and Run

访问 Firebase.Auth.FirebaseAuth

FirebaseAuth 类是所有 API 调用都需要通过的一道“关卡”。 此类可通过 FirebaseAuth.DefaultInstance 访问。
Firebase.Auth.FirebaseAuth auth = Firebase.Auth.FirebaseAuth.DefaultInstance;

创建一个基于密码的帐号

要创建一个带有密码的新用户帐号,请在您的应用的登录代码中完成以下步骤:

  1. 当新用户使用您的应用注册表单注册时,需完成您的应用要求的所有新帐号验证步骤,例如验证新帐号的密码是否输入正确并且符合您规定的密码复杂度要求。
  2. 通过将新用户的电子邮件地址和密码传递给 FirebaseAuth.CreateUserWithEmailAndPassword 来创建一个新帐号:
    auth.CreateUserWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("CreateUserWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      // Firebase user has been created.
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("Firebase user created successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

使用电子邮件地址和密码让用户登录

使用密码让用户登录的步骤与创建新帐号的步骤类似。在您的应用的登录函数中,执行以下操作:

  1. 当用户登录到您的应用时,将该用户的电子邮件地址和密码传递给 FirebaseAuth.SignInWithEmailAndPassword
    auth.SignInWithEmailAndPasswordAsync(email, password).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithEmailAndPasswordAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithEmailAndPasswordAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    
  2. 您也可以像其他工作流一样创建凭据并登录:
    Firebase.Auth.Credential credential =
        Firebase.Auth.EmailAuthProvider.GetCredential(email, password);
    auth.SignInWithCredentialAsync(credential).ContinueWith(task => {
      if (task.IsCanceled) {
        Debug.LogError("SignInWithCredentialAsync was canceled.");
        return;
      }
      if (task.IsFaulted) {
        Debug.LogError("SignInWithCredentialAsync encountered an error: " + task.Exception);
        return;
      }
    
      Firebase.Auth.FirebaseUser newUser = task.Result;
      Debug.LogFormat("User signed in successfully: {0} ({1})",
          newUser.DisplayName, newUser.UserId);
    });
    

后续步骤

在用户首次登录后,系统会创建一个新的用户帐号,并将其与该用户登录时使用的凭据(即用户名和密码、电话号码或者身份验证提供方信息)相关联。此新帐号存储在您的 Firebase 项目中,无论用户采用何种方式登录,您项目中的每个应用都可以使用此帐号来识别用户。

  • 在您的应用中,您可以从 Firebase.Auth.FirebaseUser 对象获取用户的个人资料基本信息:

    Firebase.Auth.FirebaseUser user = auth.CurrentUser;
    if (user != null) {
      string name = user.DisplayName;
      string email = user.Email;
      System.Uri photo_url = user.PhotoUrl;
      // The user's Id, unique to the Firebase project.
      // Do NOT use this value to authenticate with your backend server, if you
      // have one; use User.TokenAsync() instead.
      string uid = user.UserId;
    }
    
  • 在您的 Firebase 实时数据库和 Cloud Storage 安全规则中,您可以从 auth 变量获取已登录用户的唯一身份用户 ID,然后用此 ID 来控制用户可以访问哪些数据。

您可以通过将身份验证提供方凭据关联至现有用户帐号,让用户可以使用多个身份验证提供方服务登录您的应用。

要让用户退出登录,可调用 SignOut()

auth.SignOut();

发送以下问题的反馈:

此网页
需要帮助?请访问我们的支持页面