Skip to main content

Windows

本文旨在介绍如何设置 Discord 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Discord 渠道登录。

前提条件

1. 在 Discord 开发者平台上配置应用
1.1 创建应用
  1. Discord 官网注册并认证账号
  2. 进入 开发者平台,点击 New Application

图片:创建应用

  1. 输入应用名称,点击 Create
  2. General Information 页面获取 APPLICATION ID

图片:获取 App ID

  1. INTLConfig.ini 中配置 Discord App ID
1.2 申请 SDK 访问权限
  1. 进入 开发者平台
  2. 点击 Games - Social SDK,填写表单并提交

图片:填写表单1

图片:填写表单2

Important

游戏正式上线前需提前告知 Discord 团队,以便开启现网权限。

1.3 配置 OAuth2
  1. 点击 OAuth2,打开 PUBLIC CLIENT 开关

图片:PUBLIC CLIENT

  1. 配置 Redirects
    • Android/iOS: discord-{YOUR_APP_ID}:/authorize/callback
    • PC: http://127.0.0.1/callback
    • Web: https://common-web.intlgame.com/jssdk/discordlogincallback.html
      https://test-common-web.intlgame.com/jssdk/discordlogincallback.html

图片:配置 Redirects

note

对于多商店渠道包:

支持多商店渠道包需要单独的 REDIRECT_URL_SCHEME。一个 App ID 支持10个重定向 URL(约4个多商店渠道包)。如果游戏需要多于4个多商店渠道包,请申请更多 App ID。要使用多个应用程序 ID,游戏需要 INTLConfig.ini 中配置多个应用程序 ID在 Player Network 上注册多个 Discord 应用程序

1.4 配置 Rich Presence 资源
  1. 点击 Rich Presence
  2. 点击 Add Image(s) 上传图片资源

图片:上传资源

  1. 获取 Player Network 控制台登录账号
  2. 为游戏创建新项目,或加入已有项目
  3. 下载 SDK
  4. 接入 SDK
  5. 在 Player Network 控制台添加 Discord 为业务的登录鉴权方式

步骤1:为 Discord 登录配置 SDK

打开项目的 INTLConfig.ini 文件:

INTLConfig.ini
[INTL environment]
# WARNING: You should change this URL to the production environment when you release your game.
INTL_URL = https://test.intlgame.com
GAME_ID = {INTL_GAME_ID}
SDK_KEY = {INTL_SDK_KEY}
[INTL Log]
LOG_LEVEL = 1
LOG_CONSOLE_OUTPUT_ENABLE = 1
LOG_FILE_OUTPUT_ENABLE = 1
LOG_ENCRYPT_ENABLE = 0
LOG_COMPRESS_ENABLE = 0

[Discord]
DISCORD_APP_ID = {INTL_DISCORD_APP_ID}
  • 将 SDK 后端环境设置为 INTL_URL = https://test.intlgame.com
  • {INTL_GAME_ID}{INTL_SDK_KEY} 替换为 Player Network 控制台 分配的 GAME_IDSDK_KEY 的值。
  • 设置 LOG_LEVEL = 1LOG_CONSOLE_OUTPUT_ENABLE = 1LOG_FILE_OUTPUT_ENABLE = 1LOG_ENCRYPT_ENABLE = 0LOG_COMPRESS_ENABLE = 0,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。
  • {INTL_DISCORD_APP_ID} 替换为 Discord App ID。

步骤2:添加 Discord 登录

Discord 登录前无需安装应用程序。如果已安装应用,会打开应用登录,否则会打开浏览器登录。

  1. 注册登录相关回调。

    // Add callbacks
    public void AddAuthObserver()
    {
    INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
    }

    // Remove callbacks
    public void RemoveAuthObserver()
    {
    INTLAPI.RemoveAuthResultObserver(OnAuthResultEvent);
    }

    // Process the INTLAuthResult callback
    public void OnAuthResultEvent(INTLAuthResult AuthResult)
    {
    Debug.Log($"MethodID: {AuthResult.MethodId}");

    string methodTag = "";
    switch (AuthResult.MethodId)
    {
    case (int)INTLMethodID.INTL_AUTH_LOGIN:
    methodTag = "Login";
    break;
    case (int)INTLMethodID.INTL_AUTH_BIND:
    methodTag = "Bind";
    break;
    case (int)INTLMethodID.INTL_AUTH_AUTOLOGIN:
    methodTag = "AutoLogin";
    break;
    case (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO:
    methodTag = "QueryUserInfo";
    break;
    case (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT:
    methodTag = "GetAuthResult";
    break;
    }
    }
  2. 调用 AutoLogin 接口自动登录。

    INTLAPI.AutoLogin();
  3. 在自动登录失败时调用 Login 接口使玩家手动登录。

    INTLAPI.Login(INTLChannel.Discord, "identify", "");
    INTLAPI.Login(INTLChannel.Discord, "identify,relationships.read,activities.write", ""); //Friend functions
  4. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

步骤3:验收登录功能

在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。

如果接入过程中遇到问题,请参见 常见问题