Android
本文旨在介绍如何设置 Discord 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Discord 渠道登录。
前提条件
1. 在 Discord 开发者平台上配置应用
1.1 创建应用
- 在 Discord 官网注册并认证账号
- 进入 开发者平台,点击 New Application

- 输入应用名称,点击 Create
- 在 General Information 页面获取 APPLICATION ID

- 在 INTLConfig.ini 中配置 Discord App ID
1.2 申请 SDK 访问权限
1.3 配置 OAuth2
- 点击 OAuth2,打开 PUBLIC CLIENT 开关

- 配置 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
- Android/iOS:

对于多商店渠道包:
支持多商店渠道包需要单独的 REDIRECT_URL_SCHEME。一个 App ID 支持10个重定向 URL(约4个多商店渠道包)。如果游戏需要多于4个多商店渠道包,请申请更多 App ID。要使用多个应用程序 ID,游戏需要 在 INTLConfig.ini 中配置多个应用程序 ID 和 在 Player Network 上注册多个 Discord 应用程序。
移动端如果需要跳转回游戏的功能,则需配置 DeepLink:在 General Information → Deep Link URL 添加跳转 URL

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

- 获取 Player Network 控制台登录账号。
- 为游戏创建新项目,或加入已有项目。
- 下载 SDK。
- 接入 SDK。
- 在 Player Network 控制台添加 Discord 为业务的登录鉴权方式。
步骤1:为 Discord 登录配置 SDK
由于 Discord SDK 仅与 minSdkVersion >=23 或更高版本兼容,因此在 Android 6.0 或更早版本上运行可能会出现问题。请为游戏设置 minSdkVersion >= 23。
- 在
AndroidManifest文件中,确保添加了所需权限。Discord 需要网络访问权限。
<uses-permission android:name="android.permission.INTERNET"/>
- 打开项目的 INTLConfig.ini 文件:
[Android LifeCycle]
LIFECYCLE = Discord
[Discord]
DISCORD_APP_ID = {INTL_DISCORD_APP_ID}
- 在
LIFECYCLE中添加 Discord。有关更多信息,请参见 SDK 环境。 - 将
{INTL_DISCORD_APP_ID}替换为游戏的 Discord App ID。
- 完成 Gradle 配置。
- Unity
- Unreal Engine
在 mainTemplate.gradle 中,添加 DISCORD_APP_ID。
android {
defaultConfig {
manifestPlaceholders = [
"DISCORD_APP_ID":"{INTL_DISCORD_APP_ID}"
]
}
}
由于 Discord 要求应用程序的 minSdkVersion 至少为 23,因此 UE 项目在打包时必须将 minSdkVersion 配置更新为至少 23。

在 INTLCore_UPL.xml 中,添加 DISCORD_APP_ID。
<buildGradleAdditions>
<insert>
<![CDATA[
android{
defaultConfig {
manifestPlaceholders = [
"DISCORD_APP_ID":"{INTL_DISCORD_APP_ID}"
]
}
}
]]>
</insert>
</buildGradleAdditions>
- 将
{INTL_DISCORD_APP_ID}替换为游戏的 Discord App ID。
步骤2:添加 Discord 登录
Discord 登录前无需安装应用程序。如果已安装应用,会打开应用登录,否则会打开浏览器登录。
-
注册登录相关回调。
- Unity
- Unreal Engine
// 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;
}
}C++ Event Handling (above v1.15)
//configure callback
FINTLAuthEvent authEvent;
authEvent.AddUObject(this, &OnAuthResult_Implementation);
UINTLSDKAPI::SetAuthResultObserver(authEvent);
// Remove callbacks
UINTLSDKAPI::GetAuthResultObserver().Clear();void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
}Unreal Event Handling
void OnAuthResult_Implementation(FINTLAuthResult ret)
{
UE_LOG(LogTemp, Warning, TEXT("MethodID: %d"), ret.MethodId);
} -
调用
AutoLogin接口自动登录。- Unity
- Unreal Engine
INTLAPI.AutoLogin();UINTLSDKAPI::AutoLogin(); -
在自动登录失败时调用
Login接口使玩家手动登录。- Unity
- Unreal Engine
INTLAPI.Login(INTLChannel.Discord, "identify", "");
INTLAPI.Login(INTLChannel.Discord, "identify,relationships.read,activities.write", ""); //Friend functionsUINTLSDKAPI::Login(EINTLLoginChannel::Discord, "identify", "");
UINTLSDKAPI::Login(EINTLLoginChannel::Discord, "identify,relationships.read,activities.write", ""); //Friend functions -
与游戏后台同步客户端身份验证状态,等待最终验证结果。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。

