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

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

开始之前

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

    设置:

    前提条件

    Android

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

    iOS

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

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

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

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

    如果您还没有 Firebase 项目,请在 Firebase 控制台中创建一个。如果您已经有与自己的移动应用相关联的现有 Google 项目,请点击导入 Google 项目。如果没有,请点击添加项目

    Android

    1. 点击将 Firebase 添加到您的 Android 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
    2. 当出现提示时,输入您的应用的软件包名称。请务必输入您的应用使用的软件包名称,因为您只有在向 Firebase 项目添加应用时,才能设置此名称。
    3. 按照说明下载 google-services.json 文件。您随时可以再重新下载此文件
    4. 将此文件复制到您项目的素材资源文件夹内的任意位置。

    iOS

    1. 点击将 Firebase 添加到您的 iOS 应用,然后按设置步骤操作。如果您是导入现有 Google 项目,系统可能会自动执行这些操作,您只需下载配置文件即可。
    2. 当出现提示时,输入您的应用的软件包 ID。请务必输入您的应用使用的软件包 ID,因为您只有在向 Firebase 项目添加应用时,才能设置此 ID。
    3. 按照说明下载 GoogleService-Info.plist 文件。您随时可以再重新下载此文件
    4. GoogleService-Info.plist 文件添加到项目中。

    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 按钮。

    构建您的应用

    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. 获取项目的服务器密钥:
    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();

发送以下问题的反馈:

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