Skip to main content

iOS

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

caution

从 2024 年春季开始,对于需更新或上传至 Apple App Store Connect 的应用,开发者需明确 注明使用原因,以展示该应用如何使用 required reason API(需提交使用原因的 API)。更多信息,请参见 即将发布的第三方 SDK 要求。

由于 Discord 的隐私清单尚未公布,目前 Player Network SDK 隐私清单中不包含对应的内容,详见 iOS 17 隐私清单。

前提条件​

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 应用程序。

note

移动端如果需要跳转回游戏的功能,则需配置 DeepLink:在 General Information → Deep Link URL 添加跳转 URL

图片:DeepLink 配置

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​

Version Requirement

Discord SDK 仅与 iOS 12.0 及更高版本兼容。

info

Unreal Engine 应首先在 Plugins/INTLSDK/Source/INTLCore/INTLCore.Build.cs 文件中找到捆绑资源路径:

AdditionalBundleResources.Add(new BundleResource(Path.Combine(ModuleDirectory, "Libs/iOS/INTLCore/INTLSDK.bundle"), bShouldLog: false));

1. Swift SDK 适配器​

如果模块使用到的是 Swift 版本的 SDK,这里会涉及到 iOS 的 Swift 和 Objective-C 的混编问题。 Xcode 为了兼容混编需要有一个 bridge 的桥接层对齐两种语言的类名等,需要如下操作。

  1. 新建文件,选择 Swift File 类型。

    图片:Swift File 类型

  2. 按照需求命名并确保文件后缀是 .swift,然后点击 Create。

    图片:创建 Swift 文件

  3. 点击 Create Bridging Header。

note

请确保选择 Create Bridging Header。否则,Xcode 将不会创建桥接层文件。

图片:创建桥接文档

  1. 确保 Xcode 工程中创建了两个文件(一份为第二步创建的 .swift 文件,另一份为自动创建的 project_name-Bridging-Header.h 文件)。
info

文件内容无需更改。

图片:确定文档

不适用。

2. 完成 Player Network SDK 配置​

  1. 打开项目的 INTLConfig.ini 文件:
[Discord channel configuration]
DISCORD_APP_ID = {INTL_DISCORD_APP_ID}
  • 将 {INTL_DISCORD_APP_ID} 替换为游戏的 Discord App ID。
  1. 将 Discord 添加到 Info.plist 文件中。

使用 Unity 导出 Xcode 项目时,请确认 INTLDiscordKit.projmods 中已包含 Discord 回调 scheme 配置。

note

Player Network SDK 已经将配置写入 INTLDiscordKit.projmods 文件,因此游戏团队通常只需检查配置是否存在,无需手动添加。

"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLName":"Discord",
"CFBundleURLSchemes":["discord-{INTL_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;
}
}
  1. 调用 AutoLogin 接口自动登录。
INTLAPI.AutoLogin();
  1. 在自动登录失败时调用 Login 接口使玩家手动登录。
INTLAPI.Login(INTLChannel.Discord, "identify", "");
INTLAPI.Login(INTLChannel.Discord, "identify,relationships.read,activities.write", ""); //Friend functions
  1. 与游戏后台同步客户端身份验证状态,等待最终验证结果。

步骤3:验收登录功能​

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

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