使用自定义身份验证系统和 Unity 进行 Firebase 身份验证

您可以通过修改身份验证服务器来将 Firebase 身份验证与自定义身份验证系统集成,以便在用户成功登录时生成自定义的签名令牌。您的应用会接收此令牌并将其用于 Firebase 身份验证。

开始之前

    您必须先创建一个 Firebase 项目,并将 Firebase Unity SDK 软件包添加到您的 Unity 项目中,然后才能使用 Firebase 身份验证

    设置:

    前提条件

    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

    Android 版 Firebase Unity SDK 需要使用 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) {
        // Create and hold a reference to your FirebaseApp, i.e.
        //   app = Firebase.FirebaseApp.DefaultInstance;
        // where app is a Firebase.FirebaseApp property of your application class.
    
        // Set a flag here indicating 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

  • 获取项目的服务器密钥:
    1. 转到项目设置中的服务帐号页面。
    2. 点击“服务帐号”页面中 Firebase Admin SDK 部分底部的“生成新的私钥”
    3. 新服务帐号的公钥/私钥对会自动保存到您的计算机上。请将此文件复制到您的身份验证服务器。
  • 进行 Firebase 身份验证

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

    使用来自身份验证服务器的令牌调用 Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync

    1. 当用户登录您的应用时,将其登录凭据(例如,其用户名和密码)发送到您的身份验证服务器。您的服务器将检查凭据,并在凭据有效的情况下返回一个自定义令牌
    2. 在您从身份验证服务器收到自定义令牌之后,将该令牌传递至 Firebase.Auth.FirebaseAuth.SignInWithCustomTokenAsync 以便用户登录:
      auth.SignInWithCustomTokenAsync(custom_token).ContinueWith(task => {
        if (task.IsCanceled) {
          Debug.LogError("SignInWithCustomTokenAsync was canceled.");
          return;
        }
        if (task.IsFaulted) {
          Debug.LogError("SignInWithCustomTokenAsync 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();

    发送以下问题的反馈:

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