Discord 社交 SDK 功能
最低兼容版本:Android 5 / iOS 13.0 / Windows 10
最低支持版本:Android 7 / iOS 15.1 / Windows 10
系统版本介于两者之间时,可集成插件但功能被屏蔽。
步骤 1:配置 Discord 应用
如已完成 Discord 登录配置,可跳过创建应用步骤。
1.1 创建应用
- 在 Discord 官网注册并认证账号
- 进入 开发者平台,点击 New Application

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

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


游戏正式上线前需提前告知 Discord 团队,以便开启现网权限。
1.3 配置 OAuth2
- 点击 OAuth2,打开 PUBLIC CLIENT 开关

- 配置 Redirects:
- Android/iOS:
discord-{YOUR_APP_ID}:/authorize/callback - PC:
http://127.0.0.1/callback
- Android/iOS:

移动端需配置 DeepLink:在 General Information → Deep Link URL 添加跳转 URL

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

步骤 2:注册回调
建议在游戏启动时注册所有回调。
一般函数回调
- Unity
- Unreal Engine
// 添加/移除回调
INTLAPI.AddDiscordBaseResultObserver(OnDiscordBaseResult);
INTLAPI.RemoveDiscordBaseResultObserver(OnDiscordBaseResult);
// 处理回调
private void OnDiscordBaseResult(INTLBaseResult baseRet)
{
switch (baseRet.MethodId)
{
case (int)INTLMethodID.INTL_FRIEND_DISCORD_AUTHORIZE:
// 授权回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_CREATE_LOBBY:
// 创建/加入大厅回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_LEAVE_LOBBY:
// 离开大厅回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_SET_RICH_PRESENCE:
// 设置游戏状态回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_SEND_MESSAGE:
// 发送消息回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_REMOVE_FRIEND:
// 删除好友回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_ADD_FRIEND_BY_ID:
// 通过 ID 添加好友回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_ADD_FRIEND_BY_NAME:
// 通过用户名添加好友回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_ACCEPT_FRIEND_REQUEST:
// 接受好友请求回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_SEND_INVITE_TO_FREIND:
// 发送邀请回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_ACCEPT_INVITE_FROM_FRIEND:
// 接受邀请回调
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_ON_RELATIONSHIP_CHANGED:
// 好友列表变动通知,建议刷新列表
break;
case (int)INTLMethodID.INTL_FRIEND_DISCORD_ON_LOBBY_MEMBER_CHANGED:
// 大厅成员变动通知,建议刷新状态
break;
}
}
// 配置回调
UINTLSDKAPI::SetDiscordBaseRetObserver(callback);
UINTLSDKAPI::GetDiscordBaseRetObserver();
UINTLSDKAPI::GetDiscordBaseRetObserver().Clear();
// 处理回调
void INTLObserverEventsHandler::OnDiscordBaseRet_Implementation(FINTLBaseResult ret)
{
switch (ret.method_id_)
{
case kMethodIDFriendDiscordAuthorize:
// 授权回调
if(ret.ret_code_ == ErrorCode::SUCCESS)
// 调用其他函数
break;
case kMethodIDFriendDiscordCreateLobby:
// 创建/加入大厅回调
break;
case kMethodIDFriendDiscordLeaveLobby:
// 离开大厅回调
break;
case kMethodIDFriendDiscordSetRichPresence:
// 设置游戏状态回调
break;
case kMethodIDFriendDiscordSendMessage:
// 发送消息回调
break;
case kMethodIDFriendDiscordRemoveFriend:
// 删除好友回调
break;
case kMethodIDFriendDiscordAddFriendByID:
// 通过 ID 添加好友回调
break;
case kMethodIDFriendDiscordAddFriendByName:
// 通过用户名添加好友回调
break;
case kMethodIDFriendDiscordAcceptFriendRequest:
// 接受好友请求回调
break;
case kMethodIDFriendDiscordSendInviteToFriend:
// 发送邀请回调
break;
case kMethodIDFriendDiscordAcceptInviteFromFriend:
// 接受邀请回调
break;
case kMethodIDFriendDiscordOnRelationshipChanged:
// 好友列表变动通知,建议刷新列表
break;
case kMethodIDFriendDiscordOnLobbyMemberChanged:
// 大厅成员变动通知,建议刷新状态
break;
}
}
个人信息回调
- Unity
- Unreal Engine
INTLAPI.AddDiscordUserResultObserver(OnDiscordUserResult);
INTLAPI.RemoveDiscordUserResultObserver(OnDiscordUserResult);
private void OnDiscordUserResult(INTLDiscordUserResult userRet)
{
if (userRet.MethodId == (int)INTLMethodID.INTL_FRIEND_DISCORD_GET_CONNECTED_USER)
{
// 处理用户信息
}
}
UINTLSDKAPI::SetDiscordGetConnectedUserRetObserver(callback);
UINTLSDKAPI::GetDiscordGetConnectedUserRetObserver();
UINTLSDKAPI::GetDiscordGetConnectedUserRetObserver().Clear();
void INTLObserverEventsHandler::OnDiscordGetConnectedUserRet_Implementation(FINTLDiscordUserResult ret)
{
// 处理用户信息
}
好友列表回调
- Unity
- Unreal Engine
INTLAPI.AddDiscordFriendsResultObserver(OnDiscordFriendResult);
INTLAPI.RemoveDiscordFriendsResultObserver(OnDiscordFriendResult);
private void OnDiscordFriendResult(INTLDiscordFriendResult friendRet)
{
// 处理好友列表
}
UINTLSDKAPI::SetDiscordQueryFriendRetObserver(callback);
UINTLSDKAPI::GetDiscordQueryFriendRetObserver();
UINTLSDKAPI::GetDiscordQueryFriendRetObserver().Clear();
void INTLObserverEventsHandler::OnDiscordQueryFriendRet_Implementation(FINTLDiscordFriendResult ret)
{
// 处理好友列表
}
消息回调
- Unity
- Unreal Engine
INTLAPI.AddDiscordMessageResultObserver(OnDiscordMessageResult);
INTLAPI.RemoveDiscordMessageResultObserve(OnDiscordMessageResult);
private void OnDiscordMessageResult(INTLDiscordMessageResult messageRet)
{
// 处理消息变动
}
UINTLSDKAPI::SetDiscordMessageUpdatedRetObserver(callback);
UINTLSDKAPI::GetDiscordMessageUpdatedRetObserver();
UINTLSDKAPI::GetDiscordMessageUpdatedRetObserver().Clear();
void INTLObserverEventsHandler::OnDiscordMessageUpdatedRet_Implementation(FINTLDiscordMessageResult ret)
{
// 处理消息变动
}
邀请回调
- Unity
- Unreal Engine
INTLAPI.AddDiscordInviteResultObserver(OnDiscordInviteResult);
INTLAPI.RemoveDiscordInviteResultObserver(OnDiscordInviteResult);
private void OnDiscordInviteResult(INTLDiscordInviteResult inviteRet)
{
// 处理邀请
}
UINTLSDKAPI::SetDiscordAcceptInviteRetObserver(callback);
UINTLSDKAPI::GetDiscordAcceptInviteRetObserver();
UINTLSDKAPI::GetDiscordAcceptInviteRetObserver().Clear();
void INTLObserverEventsHandler::OnDiscordAcceptInviteRet_Implementation(FINTLDiscordInviteResult ret)
{
// 处理邀请
}
步骤 3:调用 API
DiscordAuthorize
功能:绑定 Discord 账号并授予好友权限
绑定流程:
- 首次:拉起授权页 → 输入账号密码 → 完成绑定
- 再次:使用缓存直接绑定(更换设备或卸载重装需重新授权)
- 解绑:需在游戏侧操作(仅在 Discord 取消授权无效)
每次登录后、调用其他 Discord 接口前必须调用,等待回调返回 SUCCESS 后再调用其他函数。
Discord 授权的流程如图所示:

Discord PC端内授权页样式参考:

- Unity
- Unreal Engine
INTLAPI.DiscordAuthorize();
UINTLSDKAPI::DiscordAuthorize();
IsAuthorized
功能:检查本地是否有缓存的 token
使用场景:避免自动弹出授权页
- 返回
true:直接调用DiscordAuthorize() - 返回
false:显示按钮让用户手动授权
- Unity
- Unreal Engine
bool isAuthorized = INTLAPI.IsAuthorized();
bool isAuthorized = UINTLSDKAPI::IsAuthorized();
DiscordGetConnectedUser
- Unity
- Unreal Engine
回调:DiscordUserResultObserver
数据:DiscordUserInfo
INTLAPI.DiscordGetConnectedUser();
回调:DiscordUserResultObserver
数据:DiscordUserInfo
UINTLSDKAPI::DiscordGetConnectedUser();
DiscordQueryFriends
参数:
page(int): 页数,>0count(int): 每页数量,>0
- Unity
- Unreal Engine
回调:DiscordFriendsResultObserver
INTLAPI.DiscordQueryFriends(1, 10);
回调:DiscordFriendsResultObserver
UINTLSDKAPI::DiscordQueryFriends(1, 10);
DiscordAddFriendByName
参数:username (string)
效果:被申请人可查询到请求,同意后双方收到好友列表变动回调
- Unity
- Unreal Engine
INTLAPI.DiscordAddFriendByName("xiaoming");
UINTLSDKAPI::DiscordAddFriendByName("xiaoming");
DiscordAddFriendByID
参数:userId (string)
效果:被申请人可查询到请求,同意后双方收到好友列表变动回调
- Unity
- Unreal Engine
INTLAPI.DiscordAddFriendById("123456789");
UINTLSDKAPI::DiscordAddFriendById("123456789");
DiscordAcceptFriendRequest
参数:userId (string) - 申请人 ID
效果:双方收到好友列表变动回调
- Unity
- Unreal Engine
INTLAPI.DiscordAcceptFriendRequest("123456789");
UINTLSDKAPI::DiscordAcceptFriendRequest("123456789");
DiscordRemoveFriend
参数:userId (string)
效果:无需对方同意,双方收到好友列表变动回调
- Unity
- Unreal Engine
INTLAPI.DiscordRemoveFriend("123456789");
UINTLSDKAPI::DiscordRemoveFriend("123456789");
调用好友管理相关函数成功后,双方都会收到 kMethodIDFriendDiscordOnRelationshipChanged 回调。回调不含 userId,需调用 DiscordQueryFriends 获取详情。
DiscordSendMessage
参数:
recipientId(string): 接收者 IDcontent(string): 消息内容
发送规则:
- 好友关系:成功
- 从未加好友:失败
- 曾为好友已删除:
- 接收者在线:回调成功但不显示
- 接收者离线:报错 50007
发送消息涉及隐私,需游戏自行披露。
- Unity
- Unreal Engine
INTLAPI.DiscordSendMessage("123456789", "hello world!");
UINTLSDKAPI::DiscordSendMessage("123456789", "hi");
注册 消息回调 可监听好友消息变动(创建/编辑/删除),消息可能含 emoji 等非文字内容。
DiscordSetRichPresence
- Unity
- Unreal Engine
回调:DiscordBaseResultObserver
参数:DiscordRichPresence
INTLDiscordRichPresence richPresence = new INTLDiscordRichPresence();
richPresence.GameName = "Sample";
richPresence.State = "HappyTime";
richPresence.Details = "This is INTL Sample Game";
richPresence.PartyMaxSize = 5;
richPresence.SupportedPlatforms = 1 | 8 | 16;
INTLAPI.DiscordSetRichPresence(richPresence);
回调:DiscordBaseResultObserver
参数:DiscordRichPresence
FINTLRichPresence presence;
presence.gameName = "gamename";
presence.state = "state";
presence.details = "details";
presence.partyMaxSize = 3;
presence.supportedPlatforms = 8 | 16;
UINTLSDKAPI::DiscordSetRichPresence(presence);
DiscordCreateLobby
参数:secret (string) - 大厅唯一标识(有效期约 30 天)
限制:
- 一个用户同时只能在一个大厅
- 需先离开当前大厅才能加入新大厅
- 退出游戏不自动离开,需主动调用
- 所有成员离开后几分钟自动失效
建议:加密 secret 防止不知情用户加入
- Unity
- Unreal Engine
INTLAPI.DiscordCreateLobby("testsecret");
UINTLSDKAPI::DiscordCreateLobby("testsecret");
DiscordLeaveLobby
- Unity
- Unreal Engine
INTLAPI.DiscordLeaveLobby();
UINTLSDKAPI::DiscordLeaveLobby();
任一成员加入/离开大厅时,所有成员都会收到回调。
DiscordSendInviteToFriend
必须按顺序执行:
- 创建大厅
- 设置游戏状态
- 发送邀请
发送邀请的流程如图所示:
参数:
userId(string): 好友 IDcontent(string): 邀请消息
- Unity
- Unreal Engine
INTLAPI.DiscordSendInviteToFriend("123456789", "hi, come to play with me");
UINTLSDKAPI::DiscordSendInviteToFriend("123456789", "hi, come to play with me");
DiscordAcceptInviteFromFriend
有两种方法可以接受来自 Discord 好友的游戏邀请:
方法一:函数调用
注册邀请回调,在回调中调用此函数
方法二:Discord 客户端
- PC:点击 Join 自动加入
- 移动端:点击 Join → DeepLink 拉起游戏 → 解析
joinSecret→ 调用DiscordCreateLobby
参数:userId (string) - 发送者 ID
- Unity
- Unreal Engine
INTLAPI.DiscordAcceptInviteFromFriend("123456789");
UINTLSDKAPI::DiscordAcceptInviteFromFriend("123456");