使用 Facebook 和 Unity 设置 PlayFab 身份验证

本教程指导您完成使用 Facebook 和 Unity 进行 PlayFab 身份验证的示例。

要求

实现

注册 Facebook 应用程序

首先导航到 Facebook Developer Portal

  1. 将鼠标移到 我的应用 按钮上方。
  2. 选择 添加新应用,如下图所示。

Facebook 添加新应用程序

此时将打开一个新的 Application 弹出窗口。

  1. 输入 应用程序的名称。
  2. 输入 联系人电子邮件

注意

确保提供您自己的 唯一应用程序名称电子邮件,如下图所示。

Facebook 新的应用程序 ID

  1. 导航至 Settings 选项卡。
  2. 然后转到 Basic 子选项卡。
  3. 找到 Application ID
    • 将其复制到易于访问的安全位置。 我们稍后将使用它来设置 Facebook SDK。

Facebook 保存应用程序 ID

导航到 Facebook Access Token Tool

  1. 在列表中找到 应用
  2. 验证它是否具有分配的 用户令牌

注意

如果没有 已分配的用户令牌,请使用屏幕右侧的按钮申请一个。 每当您需要新的用户令牌,请访问此页面。 如果在电脑上进行测试期间出现授权失败,最有可能的原因是令牌到期。 请刷新页面以获取新的用户令牌,然后重新测试。

Facebook 访问令牌工具

  1. 应用程序管理器 页上,导航到 + 添加产品
  2. 找到 Facebook 登录 条目,然后选择 入门

Facebook 登录开始

此时应会打开一个包含登录产品设置的页面。

  1. 确保已打开 登录 产品 设置 页。
  2. 验证 客户端 OAuthWeb OAuth 是否都已打开。

Facebook 登录产品设置

设置 Facebook SDK

打开您的 Unity 项目

  1. 在文件菜单中选择 Facebook
  2. 然后选择 Edit Settings

编辑 Facebook Unity 项目设置

Inspector 窗口将显示当前的 Facebook SDK 配置。

  • 在相应字段中输入应用程序 ID,如下图所示。

在 Facebook SDK 配置中输入应用程序 ID

简单的身份验证脚本

创建一个新的游戏对象,将其重命名为 PlayfabFacebookAuthExample,如下图所示。

创建新游戏对象

  1. 创建名为 Playfab FacebookAuthExample.cs的脚本。
  2. 将其添加到 游戏对象 如下图所示。

将示例脚本添加到游戏对象

PlayfabFacebookAuthExample.cs 中,放置以下代码。

// Import statements introduce all the necessary classes for this example.
using Facebook.Unity;
using PlayFab;
using PlayFab.ClientModels;
using UnityEngine;
using LoginResult = PlayFab.ClientModels.LoginResult;

public class PlayfabFacebookAuthExample : MonoBehaviour
{
    // holds the latest message to be displayed on the screen
    private string _message;

    public void Start()
    {
        SetMessage("Initializing Facebook..."); // logs the given message and displays it on the screen using OnGUI method

        // This call is required before any other calls to the Facebook API. We pass in the callback to be invoked once initialization is finished
        FB.Init(OnFacebookInitialized);  

    }

    private void OnFacebookInitialized()
    {
        SetMessage("Logging into Facebook...");

        // Once Facebook SDK is initialized, if we are logged in, we log out to demonstrate the entire authentication cycle.
        if (FB.IsLoggedIn)
            FB.LogOut();

        // We invoke basic login procedure and pass in the callback to process the result
        FB.LogInWithReadPermissions(null, OnFacebookLoggedIn);
    }

    private void OnFacebookLoggedIn(ILoginResult result)
    {
        // If result has no errors, it means we have authenticated in Facebook successfully
        if (result == null || string.IsNullOrEmpty(result.Error))
        {
            SetMessage("Facebook Auth Complete! Access Token: " + AccessToken.CurrentAccessToken.TokenString + "\nLogging into PlayFab...");

            /*
             * We proceed with making a call to PlayFab API. We pass in current Facebook AccessToken and let it create
             * and account using CreateAccount flag set to true. We also pass the callback for Success and Failure results
             */
            PlayFabClientAPI.LoginWithFacebook(new LoginWithFacebookRequest { CreateAccount = true, AccessToken = AccessToken.CurrentAccessToken.TokenString},
                OnPlayfabFacebookAuthComplete, OnPlayfabFacebookAuthFailed);
        }
        else
        {
            // If Facebook authentication failed, we stop the cycle with the message
            SetMessage("Facebook Auth Failed: " + result.Error + "\n" + result.RawResult, true);
        }
    }

    // When processing both results, we just set the message, explaining what's going on.
    private void OnPlayfabFacebookAuthComplete(LoginResult result)
    {
        SetMessage("PlayFab Facebook Auth Complete. Session ticket: " + result.SessionTicket);
    }

    private void OnPlayfabFacebookAuthFailed(PlayFabError error)
    {
        SetMessage("PlayFab Facebook Auth Failed: " + error.GenerateErrorReport(), true);
    }

    public void SetMessage(string message, bool error = false)
    {
        _message = message;
        if (error)
            Debug.LogError(_message);
        else
            Debug.Log(_message);
    }

    public void OnGUI()
    {
        var style = new GUIStyle { fontSize = 40, normal = new GUIStyleState { textColor = Color.white }, alignment = TextAnchor.MiddleCenter, wordWrap = true };
        var area = new Rect(0,0,Screen.width,Screen.height);
        GUI.Label(area, _message,style);
    }
}

测试

在编辑器中运行应用程序

  1. 选择 Play 按钮。 Facebook 完成初始化(并且进行了身份验证调用)后,游戏视图中将显示 Facebook 身份验证对话框。
  2. 输入 用户令牌
  3. 选择 发送成功 按钮,如下图所示。

在 Facebook Auth 对话框中输入用户令牌

  • 查看控制台输出。 这时应该显示我们的调试语句,如下图所示。
  • 如果未看到任何错误,则表示身份验证成功。

调试控制台输出

在 Android 上运行应用程序

在 Android 上启动应用程序之前,您需要执行其他配置步骤:

  • 首先,您需要确保选择了 Android 平台,并且设置了唯一的程序包 ID(如下面的示例所示)。

注意

请确保创建您自己的唯一程序包 ID

设置 Android 程序包 ID

提示

可选步骤:安装 Open SSL 并将其添加到 PATH 环境变量中。 如果未将其添加到 PATH 环境变量,Unity 将在构建期间生成一个无害的错误。 此错误不会 停止构建,也不影响执行。

接下来,在 Facebook Application Console 中:

  1. 导航到 基本 设置。
  2. 选择 + 添加平台,如下面提供的示例所示。

Facebook App Console 添加平台

  • 然后,从可用平台列表中选择 Android

Facebook 选择 Android 平台

此时会显示一个具有平台特定设置的面板。

  • 填入 程序包 ID
  • 选择 SaveSave 按钮隐藏在页面右下角处)。

Android 平台设置

像往常一样在 Android 设备上构建和运行应用程序。

  • 应用程序应会显示 Facebook 登录页面来作为欢迎页面。
  • 登录后,在屏幕上查看不断更改的消息。
  • 最后,您应会看到一条消息,指示在 PlayFab 中成功完成身份验证。 下面提供的示例显示了整个过程。

Android 上的 PlayFab Facebook 身份验证

在 iOS 上运行应用程序

在 iOS 上启动应用程序之前,您必须执行其他配置步骤。

  • 首先,确保已选择 iOS 平台。
  • 然后,设置唯一的 捆绑 ID 如下面提供的示例所示。
  • 请确保创建您自己的唯一程序包 ID

设置 iOS 捆绑包 ID

接下来,在 Facebook Application Console 中:

  1. 导航到 基本 设置。
  2. 选择 + 添加平台,如下面提供的示例所示。

Facebook App Console 添加平台

  • 从可用平台列表中选择 iOS

Facebook 选择 iOS 平台

此时会显示一个具有平台特定设置的面板。

  • 填入 程序包 ID
  • 选择 Save 按钮(Save 按钮隐藏在页面右下角处)。

iOS 平台设置

  • 接下来,像往常一样构建应用程序。
  • 完成后,使用 XCode 打开项目

使用 XCode 打开 iOS 项目

  • 选择项目以打开项目设置
  • 验证 Bundle ID 是否与您的唯一程序包 ID 匹配。

iOS 项目设置:验证捆绑包 ID

  • 确保选择了正确的设备。

iOS 项目设置:选择设备

  • 选择正确的 Identity Team

iOS 项目设置:选择 Identity Team

最后,像往常一样运行应用程序。

  • 启动后,应用程序将允许您使用 Web 浏览器登录 Facebook。
  • 完成后,将调用 PlayFab 身份验证,并显示一条消息来说明结果。

iOS 上的 PlayFab Facebook 身份验证

通过 PlayFab Game Manager 进行检查

在 Game Manager 中打开您的 PlayFab 作品。

  • 导航到仪表板。
  • 请查看 PlayStream Debugger 面板来检查最新事件。 您应会看到以下示例中显示的 Facebook 身份验证事件。

PlayStream Debugger Facebook 身份验证事件

至此,您已成功实现 PlayFab 的 Facebook 身份验证集成。