iOS
本文旨在介绍如何设置 X 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 X 渠道登录。
从 2024 年春季开始,对于需更新或上传至 Apple App Store Connect 的应用,开发者需明确 注明使用原因,以展示该应用如何使用 required reason API(需提交使用原因的 API)。更多信息,请参见 即将发布的第三方 SDK 要求。
由于 X 的隐私清单尚未公布,目前 Player Network SDK 隐私清单中不包含对应的内容,详见 iOS 17 隐私清单。
由于 Player Network SDK 仅支持 X 网页登录,因此 INTLTwitter 插件依赖 WebView 组件中的 INTLWKWebViewJavascriptBridge 来获取 X 登录网页返回的登录信息。
前提条件
1. 在 X 开发者网站上设置游戏
1. 创建 X 应用
建议使用腾讯邮箱注册账号,这样可以提高后期申请的成功率。
根据提示在 X 开发者网站 上注册团队开发者账号或个人开发者账号。有了开发者账号,您就可以在 Developer Portal 上创建应用程序。
-
创建一个新项目。

-
选择一个用例。点击 Next。

-
输入项目描述。点击 Next。

-
选择应用环境。点击 Save。

-
输入应用程序名称。点击 Save。

-
创建应用程序后,获取 API key and API secret key。存储此信息。点击 App Settings。
Important此页面不会再次显示,请务必保存好此信息。

-
点击 Set up。

-
启用 OAuth2.0 和 OAuth1.0a。在应用程序类型中选择 Web App。

-
在应用程序权限中选择 Read And Write。

-
为回调 URL 输入测试环境和生产环境 URL。您将进入游戏的官方网站。点击 Save。
如果游戏已经上线,则不能删除现有的回调 URL,只能添加。
适用于 Player Network SDK V1.15 及更早版本
https://image.intlgame.com/v2/test/jssdk/twitterlogincallback.html
https://image.intlgame.com/v2/release/jssdk/twitterlogincallback.html
适用于 Player Network SDK V1.16 及更高版本
https://test-common-web.intlgame.com/jssdk/twitterlogincallback.html
https://common-web.intlgame.com/jssdk/twitterlogincallback.html
当 TWITTER_CONSUMER_USE_SDK 为1时,要使用 INTLConfig.ini 中的 X SDK 登录,请添加以下回调 URL:
twittersdk://
twitterkit-{API Key}://
{API Key} 需要替换为游戏的 API Key,不包括大括号 。

2. 检索应用程序信息
您需要 X App ID 和密码才能在 Player Network 添加 X 登录渠道。

步骤1:为 X 登录配置 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
[X]
TWITTER_CONSUMER_KEY = {INTL_TWITTER_CONSUMER_KEY}
TWITTER_CONSUMER_SECRET = {INTL_TWITTER_CONSUMER_SECRET}- 将 SDK 后端环境设置为
INTL_URL = https://test.intlgame.com。 - 将
{INTL_GAME_ID}和{INTL_SDK_KEY}替换为 Player Network 控制台 分配的GAME_ID和SDK_KEY的值。 - 设置
LOG_LEVEL = 1、LOG_CONSOLE_OUTPUT_ENABLE = 1、LOG_FILE_OUTPUT_ENABLE = 1、LOG_ENCRYPT_ENABLE = 0和LOG_COMPRESS_ENABLE = 0,以便在不加密或压缩输出的情况下输出控制台日志和日志文件。 - 将
{INTL_TWITTER_CONSUMER_KEY}和{INTL_TWITTER_CONSUMER_SECRET}替换为 X API key 和 API Key Secret。
- 将 SDK 后端环境设置为
-
将 X 添加到
Info.plist文件中。- Unity
- Unreal Engine
从 Unity 导出 Xcode 项目之前,请检查
INTLTwitterKit.projmods中的预定义值,并将{INTL_TWITTER_CONSUMER_KEY}替换为 X API 密钥。{
"group": "INTL",
"Info.plist":{
"LSApplicationQueriesSchemes":
[
"twitter",
"twitterauth",
],
"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLSchemes":["twitterkit-{INTL_TWITTER_CONSUMER_KEY}"]
}
]
}
}- SDK 1.18 及之后版本
- SDK 1.18 之前版本
根据 SDK 版本打开对应的文件进行修改:
- V1.24 及之后版本:
INTLSDK/Source/INTLTwitter/Libs/iOS/INTLTwitter_UPL.xml - V1.18 至 V1.23:
INTLSDK/Source/INTLConfig/Configs/iOS/Plist/INTLTwitter.plist
<key>CFBundleURLSchemes</key>
<array>
<string>twitterkit-{INTL_TWITTER_CONSUMER_KEY}</string>
</array>业务需到 Unreal Engine > Settings > Project Settings > Platforms > iOS > Extra Plist Data 修改配置,在 PLIST 文件中添加 SDK。

<key>CFBundleURLTypes</key>
...
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>twitterkit-{INTL_TWITTER_CONSUMER_KEY}</string>
</array>
</dict>
</array>
...
<key>LSApplicationQueriesSchemes</key>
<array>
<string>twitter</string>
<string>twitterauth</string>
</array>替换
{INTL_TWITTER_CONSUMER_KEY}为 X API key。如果需要调用 X 好友,在 INTLTwitter 的 iOS 插件中,找到 Xcode 项目的 BuildPhrases 配置,添加或修改以下配置:
MapKit.framework
Accounts.framework
CoreData.framework
步骤2:添加 X 登录
用户登录后,选择 X 渠道来进行绑定。如果用户使用了已经绑定的 X 账号,会提示 server error。再次调用 Bind 接口会需要用户再次登录 X。
-
注册登录相关回调。
- 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 ret)
{
Debug.Log($"MethodID: {ret.MethodId}");
string methodTag = "";
if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_LOGIN)
{
methodTag = "Login";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_BIND)
{
methodTag = "Bind";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_AUTOLOGIN)
{
methodTag = "AutoLogin";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_QUERY_USER_INFO)
{
methodTag = "QueryUserInfo";
}
else if (authRet.MethodId == (int)INTLMethodID.INTL_AUTH_GET_AUTH_RESULT)
{
methodTag = "GetAuthResult";
}
}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.Twitter);UINTLSDKAPI::Login(EINTLLoginChannel::kChannelTwitter); -
与游戏后台同步客户端身份验证状态,等待最终验证结果。
[可选] 设置 email 权限
要在 X 登录时获取玩家邮箱需先设置对应权限,开启后将在 AuthResult 的 ChannelInfo 中返回 email。
- 基于合规考虑,可针对特定来源对返回的
email做 mask 处理,如有需求请联系 Player Network 助手打开。 - 可在后台流水日志中上报 hash 后的
base64(sha256(email)),如有需求请联系 Player Network 助手打开。 - 可用于验证玩家信息或绑定列表是否包含
email信息,如有需求请联系 Player Network 助手打开。 - 可用于 iOS Firebase 的 Private Set Membership(PSM)功能,详见 Firebase iOS 工程配置。
-
在 X Developer Platform 的 User authentication settings 下,勾选 Request email from users。
-
在 Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。