身份验证

请按照以下分步教程了解基本SDK功能的使用。

通过用户名/邮箱和密码进行用户登录

本说明解释如何使用SDK方法实现以下内容:

  • 用户注册
  • 重新发送注册验证邮件请求
  • 用户登录
  • 用户密码重置

您可以使用用户名或邮箱地址来认证用户身份。以下示例中,我们使用用户的用户名来进行认证,使用邮箱地址来进行注册验证及重置密码。

Note
如果您在网站上(例如Web商店)使用了登录管理器小组件,请确保该网站与您的应用程序实现相同的用户认证方法。小组件默认使用邮箱地址进行认证。如要设置通过用户名进行用户登录,请联系您的帐户经理。

示例中的逻辑与界面比您在应用程序中的简单得多。演示项目提供了一种可能的认证系统实现方案。

实现用户注册

创建页面界面

为注册页面创建一个场景并在页面上添加以下元素:

  • 用户名字段
  • 用户邮箱地址字段
  • 用户密码字段
  • 注册按钮

下图为页面结构的示例。

创建页面控制器

  1. 创建一个继承自MonoBehaviour基类的脚本RegistrationPage
  2. 声明网页界面元素的变量并Inspector面板中设置它们的值
  3. 添加逻辑来处理对注册按钮的点击:

    1. Start方法中,订阅点击事件。
    2. 添加一个在点击该按钮后调用的匿名方法。
    3. 在该方法中,声明usernameemailpassword变量,并按页面中相应字段的值对其进行初始化。
    4. 调用XsollaLogin.Instance.Registration SDK方法,并向其传入usernameemailpassword变量以及下列方法:

      • OnSuccess — 注册成功时调用
      • OnError — 发生错误时调用

Note

在脚本示例中,OnSuccessOnError方法调用标准Debug.Log方法。错误代码和描述在error参数中传递。

您还可以添加其他动作,例如打开一个包含重新发送注册邮件请求的页面或在注册成功时打开一个登录页面。

注册页面的脚本示例:

Copy
Full screen
Small screen
using UnityEngine;
using UnityEngine.UI;
using Xsolla.Core;
using Xsolla.Login;

namespace Recipes
{

  public class RegistrationPage : MonoBehaviour
  {
    // Declaration of variables for UI elements on the page

    [SerializeField] private InputField UsernameInput;

    [SerializeField] private InputField EmailInputField;

    [SerializeField] private InputField PasswordInputField;

    [SerializeField] private Button RegisterButton;

    private void Start()
    {
      // Handling the button click
      RegisterButton.onClick.AddListener(() =>
      {
        var username = UsernameInput.text;
        var email = EmailInputField.text;
        var password = PasswordInputField.text;

        XsollaLogin.Instance.Registration(username, email, password, OnSuccess, OnError);
      });
    }

    private void OnSuccess()
    {
      UnityEngine.Debug.Log("Registration successful");
      // Some actions
    }

    private void OnError(Error error)
    {
      UnityEngine.Debug.Log($"Registration failed. Description: {error.errorMessage}");
      // Some actions
    }
  }
}

设置注册验证邮件

成功注册后,用户将在指定邮箱中收到一封注册验证邮件。您可以在发布商帐户中自定义发送给用户的邮件

如果您开发的是Android应用程序,请设置深度链接以在用户验证注册后将用户返回到应用程序。

Note
如果您安全性标准允许,可禁用通过邮箱地址进行注册验证。请联系您的帐户经理进行禁用或发送邮件至am@xsolla.com与我们联系。

实现重新发送注册验证邮件请求

创建页面界面

为包含重新发送验证邮件请求的页面创建一个场景并在页面上添加以下元素:

  • 用户名/邮箱字段
  • 重新发送按钮

下图为页面结构的示例。

创建页面控制器

  1. 创建一个继承自MonoBehaviour基类的脚本ResendConfirmationEmail
  2. 声明网页界面元素的变量并Inspector面板中设置它们的值
  3. 添加逻辑来处理对重新发送邮件按钮的点击:

    1. Start方法中,订阅点击事件。
    2. 添加一个在点击该按钮后调用的匿名方法。
    3. 在该方法中,声明username变量,并按页面中相应字段的值对其进行初始化。
    4. 调用XsollaLogin.Instance.ResendEmail SDK方法,并向其传入username变量以及OnSuccessOnError方法。

重新发送邮件页面的脚本示例:

Copy
Full screen
Small screen
using UnityEngine;
using UnityEngine.UI;
using Xsolla.Core;
using Xsolla.Login;

namespace Recipes
{
  public class ResendConfirmationEmail : MonoBehaviour
  {
    // Declaration of variables for UI elements on the page

    [SerializeField] private InputField UsernameInput;

    [SerializeField] private Button ResendEmailButton;

    private void Start()
    {
      // Handling the button click
      ResendEmailButton.onClick.AddListener(() =>
      {
        var username = UsernameInput.text;

        XsollaLogin.Instance.ResendEmail(username, OnSuccess, OnError);
      });
    }

    private void OnSuccess()
    {
      UnityEngine.Debug.Log("Resend confirmation email successful");
      // Some actions
    }

    private void OnError(Error error)
    {
      UnityEngine.Debug.Log($"Resend confirmation email failed. Description: {error.errorMessage}");
      // Some actions
    }
  }
}

如果请求成功,用户将在注册时指定的邮箱中收到一封注册验证邮件。

实现用户登录

创建页面界面

为登录页面创建一个场景并在页面上添加以下元素:

  • 用户名字段
  • 密码字段
  • 记住我复选框
  • 登录按钮

下图为页面结构的示例。

创建页面控制器

  1. 创建一个继承自MonoBehaviour基类的脚本AutorizationPage
  2. 声明网页界面元素的变量并Inspector面板中设置它们的值
  3. 添加逻辑来处理对登录按钮的点击:

    1. Start方法中,订阅点击事件。
    2. 添加一个在点击该按钮后调用的匿名方法。
    3. 在该方法中,声明usernamepassword变量,并按页面中相应字段的值对其进行初始化。创建rememberMe变量,并使用一个复选框状态对其进行初始化以记住帐户。
    4. 调用XsollaLogin.Instance.SignIn SDK方法,并向其传入usernamepasswordrememberMe变量以及OnSuccessOnError方法。

Note
用户成功登录后,将在token参数中传入授权令牌。授权令牌在向艾克索拉服务器发送的请求中需用到。

登录页面的脚本示例:

Copy
Full screen
Small screen
using UnityEngine;
using UnityEngine.UI;
using Xsolla.Core;
using Xsolla.Login;

namespace Recipes
{
  public class AuthorizationPage : MonoBehaviour
  {
    // Declaration of variables for UI elements on the page

    [SerializeField] private InputField UsernameInput;

    [SerializeField] private InputField PasswordInputField;

    [SerializeField] private Toggle RememberMeToggle;

    [SerializeField] private Button AuthorizationButton;

    private void Start()
    {
      // Handling the button click

      AuthorizationButton.onClick.AddListener(() =>
      {
        var username = UsernameInput.text;
        var password = PasswordInputField.text;
        var rememberMe = RememberMeToggle.isOn;

        XsollaLogin.Instance.SignIn(username, password, rememberMe, OnSuccess, OnError);
      });
    }

    private void OnSuccess(string token)
    {
      UnityEngine.Debug.Log($"Authorization successful. Token: {token}");
      // Some actions
    }

    private void OnError(Error error)
    {
      UnityEngine.Debug.Log($"Authorization failed. Description: {error.errorMessage}");
      // Some actions
    }
  }
}

实现密码重置

创建页面界面

为密码重置页面创建一个场景并在页面上添加以下元素:

  • 用户名/邮箱字段
  • 密码重置按钮

下图为页面结构的示例。

创建页面控制器

  1. 创建一个继承自MonoBehaviour基类的脚本ResetPasswordPage
  2. 声明网页界面元素的变量并Inspector面板中设置它们的值
  3. 添加逻辑来处理对密码重置按钮的点击:

    1. Start方法中,订阅点击事件。
    2. 添加一个在点击该按钮后调用的匿名方法。
    3. 在该方法中,声明username变量,并按页面中相应字段的值对其进行初始化。
    4. 调用XsollaLogin.Instance.ResetPassword SDK方法,并向其传入username变量以及OnSuccessOnError方法。

密码重置页面的脚本示例:

Copy
Full screen
Small screen
using UnityEngine;
using UnityEngine.UI;
using Xsolla.Core;
using Xsolla.Login;

namespace Recipes
{
    public class ResetPasswordPage : MonoBehaviour
    {
        // Declaration of variables for UI elements on the page

        [SerializeField] private InputField UsernameInput;

        [SerializeField] private Button ResetPasswordButton;

        private void Start()
        {
            // Handling the button click

            ResetPasswordButton.onClick.AddListener(() =>
            {
                var username = UsernameInput.text;

                XsollaLogin.Instance.ResetPassword(username, OnSuccess, OnError);
            });
        }

        private void OnSuccess()
        {
            UnityEngine.Debug.Log("Password reset successful");
            // Some actions
        }

        private void OnError(Error error)
        {
            UnityEngine.Debug.Log($"Password reset failed. Description: {error.errorMessage}");
            // Some actions
        }
    }
}

成功发出密码重置请求后,用户将收到一封包含密码重置链接的邮件。您可以在发布商帐户 > 登录管理器项目 > 常规设置 > URL > 回调URL中配置重定向地址。

本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
隐藏

社交网络帐户登录

本指南说明如何使用SDK方法实现通过社交网络帐户进行用户注册和登录。

通过用户名/邮箱地址和密码进行用户认证不同,您无需实现单独的用户注册逻辑。如果用户的首次登录是通过社交网络进行,将自动创建一个帐户。

如果您在应用程序中将社交网络登录设置为一种备选认证方法,则在满足下列条件的情况下,社交网络帐户将自动与现有用户帐户关联:

  • 已使用用户名/邮箱地址和密码注册的用户通过社交网络帐户登录您的应用程序。
  • 社交网络返回一个邮箱地址。
  • 社交网络帐户中的用户邮箱地址与注册您的应用程序时使用的邮箱地址一致。

Note
您可以实现社交网络帐户的手动关联。您可以在应用程序中添加一个让用户将社交网络帐户与帐户关联的页面。在页面控制器中,请使用LinkSocialProvider SDK方法。

示例展示了如何设置通过Facebook帐户进行用户登录。您可以用相同的方法设置其他社交网络。

示例中的逻辑与界面比您在应用程序中的简单得多。演示项目提供了一种可能的认证系统实现方案。

创建页面界面

为登录页创建一个场景并在其中添加社交网络登录按钮。下图为页面结构的示例。

创建页面控制器

  1. 创建一个继承自MonoBehaviour基类的脚本SocialAuthorizationPage
  2. 声明应用程序登录页界面元素的变量并Inspector面板中设置它们的值
  3. 添加逻辑来处理对登录按钮的点击:

    1. Start方法中,订阅点击事件。
    2. 添加一个在点击该按钮后调用的匿名方法。
    3. 要传入登录页URL,请在匿名方法中声明url变量。在SocialProvider参数中传递一个Facebook值,从而通过GetSocialNetworkAuthUrl SDK方法初始化该变量。
    4. 要打开一个浏览器,请调用BrowserHelper.Instance.Open方法。如要使用内置浏览器,请向方法传入url变量和true值。

Note
社交网络登录不适用于外部浏览器。SDK包含一个由艾克索拉研发的内置浏览器。您可以使用艾克索拉内置浏览器或其他内置浏览解决方案。

    1. 要获取令牌并关闭浏览器,请跟踪用户成功登录后的页面URL变化:
      1. 声明singlePageBrowser变量并通过BrowserHelper.Instance.GetLastBrowser SDK方法对其进行初始化。
      2. 订阅有效页面URL更改事件并将OnUrlChanged方法设置为处理程序。

  1. 实现令牌获取:
    1. 使用ParseUtils.TryGetValueFromUrl工具方法解析OnUrlChanged方法中传递的活动页面URL。
    2. 添加对活动页面URL中的认证代码进行检查。ParseUtils.TryGetValueFromUrl方法在code变量中传入认证代码。
    3. 要用认证代码交换令牌,请调用ExchangeCodeToToken SDK方法并向其传入code变量和以下方法:
      • OnSuccess — 注册成功时调用
      • OnError — 发生错误时调用

Note

在脚本示例中,OnSuccessOnError方法调用标准Debug.Log方法。您还可以添加其他动作。

如果用户成功登录,将在token参数中传入授权令牌。该令牌在向艾克索拉服务器发送请求时使用。如果发生了错误,则将在error参数中传入错误代码和描述。

    1. 获取令牌后,请删除带浏览器的游戏对象

登录页面的脚本示例:

Copy
Full screen
Small screen
using UnityEngine;
using UnityEngine.UI;
using Xsolla.Core;
using Xsolla.Login;

namespace Recipes
{
    public class SocialAuthorizationPage : MonoBehaviour
    {

        // Declaration of variables for UI elements on the page

        [SerializeField] private Button FacebookButton;

        private void Start()
        {

            // Handling the button click

            FacebookButton.onClick.AddListener(() =>
            {

                // Opening browser

                var url = XsollaLogin.Instance.GetSocialNetworkAuthUrl(SocialProvider.Facebook);
                BrowserHelper.Instance.Open(url, true);

                // Determining the end of authentication

                var singlePageBrowser = BrowserHelper.Instance.GetLastBrowser();
                singlePageBrowser.GetComponent<XsollaBrowser>().Navigate.UrlChangedEvent += OnUrlChanged;
            });
        }


        // Getting token

        private void OnUrlChanged(IXsollaBrowser browser, string url)
        {
            if (ParseUtils.TryGetValueFromUrl(url, ParseParameter.code, out var code))
            {
                XsollaLogin.Instance.ExchangeCodeToToken(code, OnSuccess, OnError);
                Destroy(BrowserHelper.Instance.gameObject);
            }
        }

        private void OnSuccess(string token)
        {
            UnityEngine.Debug.Log($"Authorization successful. Token: {token}");
            // Some actions
     }

        private void OnError(Error error)
        {
            UnityEngine.Debug.Log($"Authorization failed. Description: {error.errorMessage}");
            // Some actions
     }
    }
}

本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
隐藏
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
为此页面评分
为此页面评分
我们还有其他可改进之处吗?

不想回答

感谢您的反馈!
上次更新时间: 2021年6月17日

发现了错别字或其他内容错误? 请选择文本,然后按Ctrl+Enter。

报告问题
我们非常重视内容质量。您的反馈将帮助我们做得更好。
请留下邮箱以便我们后续跟进
感谢您的反馈!