身份认证

一般信息

用户注册和登录的解决方案基于登录管理器产品。项目的用户认证设置在发布商帐户登录管理器部分提供。

基于JWT标准和OAuth 2.0协议的认证

OAuth 2.0协议注重客户端应用程序开发的简化。OAuth 2.0可以让您在无需用户参与的情况下刷新令牌。如果使用JWT认证,则用户必须输入凭证并登录应用程序才能刷新令牌。

OAuth 2.0是推荐使用的认证方式,也是SDK设置中默认选择的方式。详细信息请参阅如何设置OAuth 2.0认证

如应用程序中使用的是JWT认证,建议配置令牌失效

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

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

您可以通过用户的用户名或邮箱地址来认证用户。

注册过程中,用户必须指定一个邮箱地址,即便使用用户名认证也是如此。邮箱地址用于验证注册及重置密码。

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

Note
如果您的安全性标准允许,可禁用通过邮箱地址进行注册验证。请联系您的帐户经理进行禁用或发送邮件至am@xsolla.com与我们联系。
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
隐藏

社交网络登录

社交网络登录可以是您应用程序的首选或备选认证方式。

如果用户首次通过社交网络登录,将自动创建一个新帐户。

如将社交网络登录用作备选认证方式,则在满足以下条件的情况下,社交网络帐户将自动关联至现有用户帐户:

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

SDK支持以下提供商的社交网络登录:

  • Amazon
  • Apple
  • 百度
  • Battle.net
  • Discord
  • Facebook
  • GitHub
  • Google
  • Kakao
  • LinkedIn
  • MSN
  • Mail.ru
  • Microsoft
  • Naver
  • Odnoklassniki
  • PayPal
  • QQ
  • Reddit
  • Steam
  • Twitch.tv
  • Twitter
  • VK
  • Vimeo
  • 微信
  • 微博
  • Xbox Live
  • Yahoo
  • Yandex
  • YouTube

对于移动应用,SDK也支持通过社交网络客户端在用户设备上用社交帐户登录(通过社交网络的本机认证)。目前SDK支持以下提供商的本机认证:

  • Google
  • Facebook
  • 微信
  • QQ

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

通过应用程序启动器进行认证

如果使用艾克索拉启动器或Steam向用户交付应用程序,可以使用启动器的凭证自动认证用户身份。

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

通过设备ID进行认证

设备ID认证能让用户在无需输入注册数据的情况下在移动设备上使用应用程序。用户首次使用设备ID登录应用程序时将自动创建一个新帐户,用户无需输入用户名、邮箱地址或其他数据。SDK支持在Android和iOS设备上通过移动设备的ID进行用户认证。

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

免密登录

要在应用程序中认证用户,用户可以不使用密码而是通过一个一次性验证码或点击一次性链接进行认证。验证码或链接可以通过短信或邮件发送。
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
隐藏

隐私政策

如使用SDK,请在您的应用程序中添加艾克索拉隐私政策协议链接。您可在演示项目的注册页面中查看该链接的示例。

Note
请注意,艾克索拉隐私政策协议不表示会使用用户数据。如果您计划收集和处理此类数据,请确保您的行为符合法律规定。您应当征求用户对于收集和处理其数据的同意,或将隐私政策协议告知用户。

详解

通过方法详解文档了解高级设置。

如何设置OAuth 2.0认证

OAuth 2.0不使用长久有效令牌而使用短时有效令牌来提供长期用户认证(通过刷新令牌)。刷新令牌允许用户在一段时间内留在应用程序中而不必重新输入用户名和密码。这样可以避免用户认证数据泄露的风险。

设置OAuth 2.0通过以下方式授权:

  • 通过用户名或电子邮箱和密码
  • 通过社交网络
  • 通过Steam

如果启用了该选项,则用户注册和认证通过调用Register new userJWT auth by username and password API调用执行。SDK为OAuth 2.0授权提供与JWT令牌授权相同的方法。

Note
启用此设置不会改变用户在您应用程序中的认证过程。

要配置OAuth 2.0授权:

  1. 在发布商帐户中为登录管理器项目设置OAuth 2.0认证
  2. 在Unity项目中设置资源

在发布商帐户中设置登录管理器项目的OAuth 2.0认证

  1. 前往您的发布商帐户
  2. 在侧边栏中单击登录管理器
  3. 在登录管理器项目窗格中单击配置
  4. 前往安全性区块,然后选择OAuth 2.0部分。
  5. 单击添加OAuth 2.0
  6. 指定OAuth 2.0重定向URI,然后单击连接
  7. 复制并保存客户端ID

在Unity项目中设置资源

  1. 前往您的Unity项目。
  2. 在主菜单中单击Window > Xsolla > Edit Settings
  3. Inspector面板中:
    1. Authorization Type字段中,选择OAuth2.0
    2. OAuth2.0 client ID字段中,指定在发布商帐户中设置OAuth 2.0时收到的客户端ID

本SDK中实现了以下方法与刷新令牌交互:

  • RefreshOAuthToken — 使用之前保存的OAuth2.0刷新令牌刷新现有令牌。
  • ExchangeCodeToToken — 用用户的认证代码换取一个有效的JWT。

GetSocialNetworkAuthUrl方法中的oauthState参数用于OAuth 2.0认证过程中的额外用户验证。该参数用于防止可能的CSRF攻击

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

如何使用自有授权系统

您可以将SDK与自有授权系统集成。方法是实现通过自定义ID(在您的服务器上生成的用户ID)来识别用户身份,以打开游戏内商店、进行支付及管理物品库。

使用自有授权系统与艾克索拉服务器的交互过程:

  1. 您的客户端向您的服务器发送认证请求。
  2. 您的服务器授权用户并向艾克索拉服务器发送请求以接收用户JSON Web令牌(JWT),并传入自定义ID。
  3. 艾克索拉服务器返回用户JWT。
  4. 您的服务器将用户JWT传给客户端。
  5. SDK方法使用收到的用户JWT而不是授权令牌来打开游戏内商店、进行支付及管理物品库。

要将自有授权系统与艾克索拉产品配合使用:

  1. 在您的发布商帐户中设置服务器OAuth 2.0客户端
  2. 实现获取服务器JWT
  3. 实现获取用户JWT
  4. 实现使用用户JWT与游戏内商店、购买项和物品库交互的逻辑。

Note
如果使用PlayFab或Firebase授权系统,请使用艾克索拉用于BaaS的现成扩展来获取用户JWT。

设置服务器OAuth 2.0客户端

  1. 发布商帐户中打开您的项目,然后前往登录管理器部分。
  2. 在登录管理器项目面板中单击配置
  3. 前往安全性区块,然后选择OAuth 2.0部分。
  4. 单击添加OAuth 2.0
  5. 指定OAuth 2.0重定向URI
  6. 勾选服务器(服务器对服务器连接)复选框。
  7. 单击连接
  8. 复制并保存客户端ID和密钥。

获取服务器JWT

在应用程序的后端,实现一个方法通过生成JWT API调用来获取服务器JWT。请求必须包含以下参数:

Note
服务器JWT有效期是59分钟。

获取用户JWT

在应用程序的后端,实现一个方法使用通过自定义ID进行认证API调用获取用户JWT。请求必须包含X-Server-Authorization: <server_JWT>头,其中<server_JWT>是在上一步中获得的服务器JWT。

Note
用户JWT有效期是24小时。如要更改该有效期,请联系您的帐户经理或发送邮件至integration@xsolla.com

使用用户JWT

使用SDK方法打开游戏内商店、进行支付及管理物品库。使用SDK方法时,请将用户JWT传入Token.Instance属性。

以下教程包含该令牌的使用示例:

实现用户JWT过期后重新获取的逻辑。建议在后台获取新令牌,这样用户就无须重新登录应用程序。

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

如何设置通过社交网络进行本机用户认证

本机用户认证可以让用户通过其移动设备上配置的社交网络帐户来登录您的应用程序。

用户首次登录时,社交网络应用程序将启动并询问是否允许进行用户认证。允许后,未来的认证将自动进行,无需用户执行任何操作。

目前SDK已实现通过以下社交网络进行本机用户认证:

  • Google
  • Facebook
  • 微信
  • QQ

要配置本机用户认证:

  1. 创建适用于Android的Unity项目编译版本
  2. 在社交网络的开发者帐户中配置应用程序:
    1. 对于通过Facebook进行认证:
      1. 注册并创建一个新应用程序。
      2. 在您的Facebook开发者帐户中设置应用页面
    2. 对于通过Google进行认证,请在Google API Console中设置项目
    3. 对于通过微信进行认证
      1. 注册并创建一个新应用程序。
      2. 提交审核申请。
    4. 对于通过QQ进行认证:
      1. 注册并创建一个新应用程序。
      2. 提交审核申请。

  1. 在艾克索拉侧设置通过社交网络进行用户认证:
    1. 对于Facebook和Google,请在发布商帐户中设置社交网络连接
    2. 对于微信和QQ,请联系您的帐户经理进行设置。
  2. 为您的Unity项目设置资源

为Android创建Unity项目编译版本

  1. 前往您的Unity项目。
  2. 在主菜单中单击File > Build settings
  3. Platform面板中单击Android
  4. 单击Build

在接下来的本机用户认证配置中,还会用到:

  • File > Build settings中选择Android平台后,在Inspector面板的Package Name字段中找到的包名称。
  • Android类名称 — 主要活动的类名,包括应用的命名空间(如com.domain.appname.activity)。类名可在AndroidManifest.xml中找到。主要活动的标签应包含intent-filter标签连同android.intent.action.MAIN动作和android.intent.category.LAUNCHER类别。
  • Android散列密钥。可通过OpenSSL获取

在Facebook开发者帐户中设置应用页面

  1. 前往Facebook开发者帐户中的项目设置。
  2. 前往设置 > 基本
  3. 单击添加平台,选择Android
  4. Google Play包名称字段中指定Unity项目中的包名称。
  5. 类名字段中指定Unity项目的Android类名。
  6. 密钥散列字段中指定Unity项目的Android散列密钥。
  7. 单击保存更改

在接下来的本机用户认证配置中,还会用到设置 > 基本部分中的应用编号应用密钥

在Google API Console中设置项目

  1. 前往Google API Console
  2. 单击新建项目
  3. 指定项目名称位置,然后单击保存
  4. 前往所创建的项目,然后单击侧边栏上的OAuth同意屏幕
  5. 选择外部,然后单击创建
  6. 指定必需参数,然后单击保存
  7. 在侧边栏上点击凭据
  8. 为您的Unity应用程序创建一个OAuth 2.0客户端:

    1. 单击创建凭据,选择OAuth客户端ID
    2. 应用类型字段中指定Android
    3. 指定名称
    4. 包名称字段中指定您Unity应用程序的包名称。
    5. SHA-1证书指纹字段中指定您Unity应用程序的Android散列密钥。
    6. 单击创建
    7. 单击确定

  1. 为Web应用创建一个OAuth 2.0客户端:
    1. 单击创建凭据,选择OAuth客户端ID
    2. 应用类型字段中指定Web应用
    3. 指定名称
    4. 已获授权的重定向URI部分单击添加URI,并指定https://login.xsolla.com/api/social/oauth2/callback URI。
    5. 单击创建
    6. 单击确定

在接下来的本机用户认证配置中,还会用到Web应用的客户端ID设置中的客户端ID客户端密钥

在艾克索拉发布商帐户中设置登录管理器项目的社交网络连接

  1. 发布商帐户中打开您的项目。
  2. 在侧边栏中单击登录管理器,然后前往登录管理器项目 > 您的登录管理器项目 > 社交网络连接
  3. 要设置通过Facebook进行认证:

    1. Facebook面板中单击编辑,将状态更改为断开连接
    2. Application ID字段中指定Facebook开发者帐户中的应用编号
    3. Application Secret字段中指定Facebook开发者帐户中的应用密钥
    4. 单击连接

  1. 要设置通过Google进行认证:
    1. Google面板中单击编辑,将状态更改为断开连接
    2. Application ID字段中指定Google API Console中Web应用的客户端ID
    3. Application Secret字段中指定Google API Console中Web应用的客户端密钥
    4. 单击连接

为Unity项目设置资源

  1. 前往您的Unity项目。
  2. 在主菜单中单击Window > Xsolla > Edit Settings
  3. 指定应用程序ID:
    1. Facebook App ID字段中指定Facebook开发者帐户中的应用编号
    2. Google server ID字段中指定Google API Console中的Web应用的客户端ID
    3. WeChat App ID中指定微信应用设置中的AppID
    4. QQ App ID中指定QQ应用设置中的AppID

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

如何设置通过Steam进行本机用户认证

Notice
如在您的Unity项目中使用了演示项目,请参阅本详解指南。

本机用户认证可让玩家通过其所装的Steam应用程序进入您的应用程序。

要设置本机用户认证:

  1. 在发布商帐户中设置通过Steam进行静默认证
  2. 配置您的Unity项目
  3. 配置事件处理
  4. 确保通过Steam进行认证

配置您的Unity项目

  1. 创建一个steam_appid.txt文件并在其中输入您在Steam中的应用ID。然后将该文件放在项目的Assets/Plugins/Steamworks.NET/redist/目录中。

Note
如果是从GitHub下载的SDK,则可在Assets/Plugins/Steamworks.NET/redist/目录中找到该steam_appid.txt文件。该文件包含一个演示项目的Steam应用ID。

  1. 打开您的Unity项目。
  2. 在主菜单中,前往Window > Xsolla > Demo Settings
  3. Inspector面板:
    1. 勾选Use Steam authorization复选框。
    2. Steam App ID字段中,指定您在Steam中的应用ID。该值应与steam_appid.txt文件中的值相同。

配置事件处理

要通过Steam认证用户,应向SilentAuth方法传入session ticket。示例见演示项目SteamAuth.cs类。

确保通过Steam进行认证

  1. 创建适用于独立平台的Unity项目的编译文件或启动一个场景。
  2. 启动Steam并登录。
  3. 启动您的应用程序。如果一切正确,将自动登入应用程序。

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

如何设置令牌失效

令牌失效可提高应用程序中用户认证数据的安全性。如启用该选项,每次用户认证时旧令牌将失效,新令牌将取代旧令牌。

Note
您可以为使用JWT令牌的认证配置令牌失效。对于OAuth 2.0,令牌失效由协议本身提供,不必单独配置。

使用SDK时,如果with_logout参数设置为1,调用Auth by username and passwordAuth via social network API调用将使现有令牌失效并生成新令牌。

要在您的Unity项目中启用令牌失效:

  1. 在主菜单中,前往Window > Xsolla > Edit Settings
  2. 前往Inspector面板。在Authorizaton Type字段中,选择JWT。勾选Invalidate Existing Sessions复选框。

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

如何设置通过启动器授权进入应用程序

您可以使用艾克索拉启动器向用户交付应用程序及其更新。启动器包含一个内置的授权工具。如要避免重复输入用户名和密码的需要,可设置通过启动器授权进入应用程序。

Notice
要使用启动器,需配置登录管理器。不支持使用其他授权系统。

设置SDK与启动器配合工作

  1. 在您的发布商帐户中设置启动器

Note
config.json文件中,请更改以下对象的值:
  • launcher_project_id — 指定在发布商帐户 > 启动器 > 常规设置 > 常规信息中找到的启动器ID
  • login_project_id — 指定发布商帐户 > 启动器 > 常规设置 > 验证中找到的登录管理器ID

  1. 自定义启动器UI

Notice
通过艾克索拉服务器进行SDK集成使用Commerce API调用,因此不支持启动器商店。

  1. 在您的应用程序中实现启动器授权逻辑
  2. 生成启动器安装文件和编译版本压缩包
  3. 创建应用程序编译版本
  4. 将应用程序编译版本上传至艾克索拉更新服务器

实现通过启动器进行授权的逻辑

通过启动器在应用程序中进行授权的过程如下:

  1. 用户授权进入启动器。
  2. 用户安装并运行应用程序。
  3. 启动器运行该应用程序并通过命令行传入用户参数。授权令牌在xsolla-login-token参数中传递。
  4. 应用程序处理命令行参数并获取令牌。您可在演示项目中查看令牌处理脚本示例。
  5. 应用程序验证收到的令牌。您可在演示项目中查看令牌验证脚本示例。
  6. 应用程序在不显示授权页面的情况下自动完成用户授权。您可在演示项目中查看用户授权脚本

Note
获得的令牌用于供SDK方法打开游戏内商店、进行支付等。请将令牌传入Token.Instance属性。

创建应用程序编译版本

  1. 前往您的Unity项目。
  2. 在主菜单中单击Window > Xsolla > Edit Settings。在Inspector面板中:
    1. Project ID字段中指定在发布商帐户 > 项目设置 > 项目ID中找到的项目ID。
    2. Login ID字段中指定在发布商帐户 > 启动器 > 常规设置 > 验证中找到的登录管理器ID。

  1. 运行授权场景,令牌在其中得到处理。
  2. 在主菜单中单击File > Build settings,然后单击Add Open Scenes。确保授权场景添加为列表首项。
  3. 单击Build
  4. 在弹出窗口中指定放置所得编译版本的目录路径。

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

如何实现通过设备ID进行用户认证

设备ID认证能让用户在无需输入注册数据的情况下在移动设备上使用应用程序。用户首次使用设备ID登录应用程序时将自动创建一个新帐户,用户无需输入用户名、邮箱地址或其他数据。

Notice
通过设备ID创建的帐户只允许在当前移动设备上使用应用程序。如果更换Android或iOS设备登录或从iOS设备上卸载应用程序后将无法访问该帐户。如果要保存应用程序中的进度及在其他设备上使用该帐户,用户可以通过关联社交网络帐户或输入用户名、邮箱地址和密码来升级帐户

您可以通过设备ID在后台模式下实现用户在一个或多个移动设备上的身份认证。要使用该功能,用户需将设备ID与现有帐户关联

SDK支持在Android和iOS设备上通过移动设备的ID进行用户认证。

获取设备ID

设备ID由平台生成并可供该移动设备上安装的应用程序使用。SDK使用平台API获取ID值并使用该值通过艾克索拉API执行多种功能。

iOS设备ID在UIDevice.identifierForVendor属性中传递。使用标准Unity方法SystemInfo.deviceUniqueIdentifier来判断该ID。

Android设备ID在android.provider.Settings.Secure.ANDROID_ID常量中传递。SDK使用自己的逻辑来判断该ID,因为标准Unity方法以MD5散列的形式返回Android设备ID,不适用于艾克索拉API调用。

SDK方法

SDK实现以下功能的方法:

身份验证

SDK方法名称描述
AuthViaDeviceID
使用当前设备ID认证用户进入应用程序。

帐户升级

SDK方法名称描述
AddUsernameEmailAuthToAccount
添加可用于身份认证的用户名、邮箱地址和密码到当前帐户。
将可用于身份认证的社交网络关联至当前帐户。
Notice
所列方法可用于升级通过任何可用方法创建的帐户(例如通过社交网络帐户或邮箱地址和密码创建)。

设备管理

SDK方法名称描述
GetUserDevices
返回与当前用户帐户关联的设备的列表。
将指定设备关联至当前用户帐户。
取消指定设备与当前用户帐户的关联。
本文对您的有帮助吗?
谢谢!
我们还有其他可改进之处吗? 留言
非常抱歉
请说明为何本文没有帮助到您。 留言
感谢您的反馈!
我们会查看您的留言并运用它改进用户体验。
隐藏
上次更新时间: 2022年6月6日

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

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