iOS
本文旨在介绍如何设置 Twitter 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 Twitter 渠道登录。
从 2024 年春季开始,对于需更新或上传至 Apple App Store Connect 的应用,开发者需明确 注明使用原因,以展示该应用如何使用 required reason API(需提交使用原因的 API)。更多信息,请参见 即将发布的第三方 SDK 要求。
由于 Twitter 的隐私清单尚未公布,目前 Player Network SDK 隐私清单中不包含对应的内容,详见 iOS 17 隐私清单。
由于 Player Network SDK 仅支持 Twitter 网页登录,因此 INTLTwitter
插件依赖 WebView 组件中的 INTLWKWebViewJavascriptBridge
来获取 Twitter 登录网页返回的登录信息。
前提条件
1. 在 Twitter 开发者网站上设置游戏
1. 创建 Twitter 应用
建议使用腾讯邮箱注册账号,这样可以提高后期申请的成功率。
根据提示在 Twitter 开发者网站 上注册团队开发者账号或个人开发者账号。有了开发者账号,您就可以在 Developer Portal 上创建应用程序。
创建一个新项目。
选择一个用例。点击 Next。
输入项目描述。点击 Next。
选择应用环境。点击 Save。
输入应用程序名称。点击 Save。
创建应用程序后,获取 API key and API secret key。存储此信息。点击 App Settings。
警告此页面不会再次显示,请务必保存好此信息。
点击 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 中的 Twitter SDK 登录,请添加以下回调 URL:
twittersdk://
twitterkit-{API Key}://
{API Key}
需要替换为游戏的 API Key,不包括大括号 {}。
2. 检索应用程序信息
您需要 Twitter App ID 和密码才能在 Player Network 添加 Twitter 登录渠道。
步骤1:为 Twitter 登录配置 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
[Twitter]
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}
替换为 Twitter API key 和 API Key Secret。
- 将 SDK 后端环境设置为
将 Twitter 添加到
Info.plist
文件中。- Unity
- Unreal Engine
从 Unity 导出 Xcode 项目之前,请检查
INTLTwitterKit.projmods
中的预定义值,并将{INTL_TWITTER_CONSUMER_KEY}
替换为 Twitter API 密钥。{
"group": "INTL",
"Info.plist":{
"LSApplicationQueriesSchemes":
[
"twitter",
"twitterauth",
],
"CFBundleURLTypes" :
[
{
"CFBundleTypeRole":"Editor",
"CFBundleURLSchemes":["twitterkit-{INTL_TWITTER_CONSUMER_KEY}"]
}
]
}
}- Player Network SDK 1.18 及之后版本
- Player Network 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}
为 Twitter API key。如果需要调用 Twitter 好友,在 INTLTwitter 的 iOS 插件中,找到 Xcode 项目的 BuildPhrases 配置,添加或修改以下配置:
MapKit.framework
Accounts.framework
CoreData.framework
步骤2:添加 Twitter 登录
用户登录后,选择 Twitter 渠道来进行绑定。如果用户使用了已经绑定的 Twitter 账号,会提示 server error。再次调用 Bind
接口会需要用户再次登录 Twitter。
注册登录相关回调。
- 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 权限
要在 Twitter 登录时获取玩家邮箱需先设置对应权限,开启后将在 AuthResult
的 ChannelInfo
中返回 email
。
- 基于合规考虑,可针对特定来源对返回的
email
做 mask 处理,如有需求请联系 Player Network 助手 打开。 - 可在后台流水日志中上报 hash 后的
base64(sha256(email))
,如有需求请联系 Player Network 助手 打开。 - 可用于验证玩家信息或绑定列表是否包含
email
信息,如有需求请联系 Player Network 助手 打开。 - 可用于 iOS Firebase 的 Private Set Membership(PSM)功能,详见 Firebase iOS 工程配置。
在 Twitter Developer Platform 的 User authentication settings 下,勾选 Request email from users。
在 Player Network 控制台 开启 email 返回功能,将 return_email 设置为 YES,详细步骤请参见 第三方渠道配置。
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。