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

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

要求

实现

注册 Facebook 应用程序

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

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

  1. 输入 应用程序的名称。
  2. 输入 联系人电子邮件
  1. 导航至 Settings 选项卡。
  2. 然后转到 Basic 子选项卡。
  3. 找到 Application ID
    • 将其复制到易于访问的安全位置。 我们稍后将使用它来设置 Facebook SDK。
  1. 在列表中找到 应用
  2. 验证它是否具有分配的 用户令牌
  1. 应用程序管理器 页上,导航到 + 添加产品
  2. 找到 Facebook 登录 条目,然后选择 入门

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

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

设置 Facebook SDK

打开您的 Unity 项目

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

Inspector 窗口将显示当前的 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. 选择 发送成功 按钮,如下图所示。
  • 查看控制台输出。 这时应该显示我们的调试语句,如下图所示。
  • 如果未看到任何错误,则表示身份验证成功。

在 Android 上运行应用程序

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

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

接下来,在 Facebook Application Console 中:

  1. 导航到 基本 设置。
  2. 选择 + 添加平台,如下面提供的示例所示。
  • 然后,从可用平台列表中选择 Android

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

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

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

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

在 iOS 上运行应用程序

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

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

接下来,在 Facebook Application Console 中:

  1. 导航到 基本 设置。
  2. 选择 + 添加平台,如下面提供的示例所示。
  • 从可用平台列表中选择 iOS

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

  • 填入 程序包 ID
  • 选择 Save 按钮(Save 按钮隐藏在页面右下角处)。
  • 接下来,像往常一样构建应用程序。
  • 完成后,使用 XCode 打开项目
  • 选择项目以打开项目设置
  • 验证 Bundle ID 是否与您的唯一程序包 ID 匹配。
  • 确保选择了正确的设备。
  • 选择正确的 Identity Team

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

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

通过 PlayFab Game Manager 进行检查

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

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

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