Skip to main content

Web

本文旨在介绍如何设置 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

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

图片:上传资源

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

更多关于其他第三方渠道接入 SDK 的信息,请参见 JavaScript SDK

步骤1:引⼊ JavaScript SDK

caution

项目联调阶段可以引⼊ SDK 联调版本包,该包仅用于集成测试。项目上线须引⼊ SDK 正式版本包。

目前已支持 npm 包方式和 CDN 方式。

$ npm install @intlsdk/account-api

步骤2:使用 SDK

caution

在集成测试时,将 env 设置为测试环境;项目上线时,将 env 设置为相应的正式环境。

const accountApi = new IntlgameAccountApi({
env: "test", // SDK environment
gameID: 11,
});
参数类型描述备注
envstringSDK 环境
更多信息,请参见 获取部署集群信息
必填
gameIDnumberPlayer Network 游戏唯一标识 ID必填

步骤3:实现网页登录

实例化 accountApi 组件后,调用 thirdAuthorize 接口申请 Discord 渠道的访问令牌。

accountApi.thirdAuthorize({
third_type: 'discord',
}).then(
(res) => {
console.log(res);
});

当 Discord 返回访问令牌后,调用 intlAuthorize 接口获取 Player Network SDK OpenID 和令牌登录网站。

accountApi.intlAuthorize({
third_type: 'discord',
channel_info: {
access_token: "EAAI2lTrXAZBwBAC"
refresh_token: "EAAI2lTrXAZBwBAC"
expires_in: "EAAI2lTrXAZBwBAC"
redirect_uri: "EAAI2lTrXAZBwBAC"
}
}).then(
(res) => {
console.log(res);
});

调用 intlLogout 接口登出网站。

accountApi.intlLogout({
token: '4567xsdfsd',
openid: 'xxxxxxxx',
channel_id: 26,
}).then(
(res) => {
console.log(res);
});