iOS
本文旨在介绍如何设置 QQ 身份验证,让您的游戏可以使用 Player Network 登录鉴权服务通过 QQ 渠道登录。
前提条件
1. 在 QQ Connect 平台上设置您的游戏
1. 创建 QQ 应用
-
登录 QQ Connect。
-
在侧边栏中,点击 应用管理。
-
点击 创建应用。

-
在 移动应用信息 下,输入 iOS 应用程序信息。
- iOS UrlScheme:
tencent{INTL_QQ_APP_ID},替换{INTL_QQ_APP_ID}替换为 QQ 分配给游戏的 AppID。

- iOS UrlScheme:
2. 获取应用程序信息
-
登录 QQ Connect。
-
在侧边栏中,点击 应用管理。
-
在相应应用程序的 操作 栏中点击 编辑。

-
在应用编辑页面,确认 QQ 应用程序的 AppID 和 AppKey。
3. 申请 QQ Connect OpenAPI 能力 is_login 权限
如果申请未通过,即使 QQ app 授权登录成功,Player Network SDK 后台将返回错误 app has no privilege to use this api。
请根据以下模板发送电子邮件申请权限:
- To:archerkang@tencent.com; lexyhuangg@tencent.com
- Ccfarisfeng@tencent.com; peikunzhou@tencent.com; neilluo@tencent.com; neilluo@tencent.com; maytang@tencent.com; lexyhuang@tencent.com; phoebeshao@tencent.com; lunama@tencent.com(业务产品领导); (技术领导); (业务相关同学)
- Subject:【QQ Connect 申请能力】is_login 接口 —— XXX 业务
-
邮件内容
- QQ Connect appid:
- 应用名称:
- 公司名:(如公司不是腾讯或全资子公司的话,需要附上发行和研发的关系授权书)
- 调用入口/场景:(如必要可附上交互)
- 调用时机:
- 调用原因:
- accesstoken/openkey 获取方式:
- 调用量(单位:分钟):
- 负责人:(产品负责人的企微名;开发负责人的企微名)
更多信息,请参见 is_login。
步骤1:为 QQ 登录配置 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
[QQ channel configuration]
QQ_APP_ID = {INTL_QQ_APP_ID}- 将 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_QQ_APP_ID}替换为 QQ 分配的 AppID。
- 将 SDK 后端环境设置为
-
添加 QQ 配置。
- Unity
- Unreal Engine
打开
INTLCoreKit.projmods,在从 Unity 导出 Xcode 工程之前,将{INTL_QQ_APP_ID}替换为QQ AppID。{
"group": "INTL",
"libs": [
"libz.tbd",
"libstdc++.tbd",
"libiconv.tbd",
"libsqlite3.tbd"
],
"frameworks": [
"Security.framework",
"SystemConfiguration.framework",
"CoreTelephony.framework",
"CoreGraphics.framework"
],
"files": [],
"folders": [],
"excludes": [
"^.*.meta$",
"^.*.mdown$",
"^.*.pdf$"
],
"headerpaths": [],
"build_settings": {
"OTHER_LDFLAGS": ["-ObjC"],
"ENABLE_BITCODE": "NO"
},
"system_capabilities": {},
"Info.plist": {
"LSApplicationQueriesSchemes": [
"tim",
"mqq",
"mqqapi",
"mqqwpa",
"mqqbrowser",
"mttbrowser",
"mqqOpensdkSSoLogin",
"mqqopensdkapiV2",
"mqqopensdkapiV3",
"mqqopensdkapiV4",
"wtloginmqq2",
"mqzone",
"mqzoneopensdk",
"mqzoneopensdkapi",
"mqzoneopensdkapi19",
"mqzoneopensdkapiV2",
"mqqapiwallet",
"mqqopensdkfriend",
"mqqopensdkdataline",
"mqqgamebindinggroup",
"mqqopensdkgrouptribeshare",
"tencentapi.qq.reqContent",
"tencentapi.qzone.reqContent"
],
"NSAppTransportSecurity": {
"NSAllowsArbitraryLoads": true
},
"CFBundleURLTypes": [
{
"CFBundleTypeRole": "Editor",
"CFBundleURLName": "tencent",
"CFBundleURLSchemes": ["tencent{INTL_QQ_APP_ID}"]
}
]
}
}- SDK 1.24 及之后版本
- SDK 1.24 之前版本
打开
INTLSDK/Source/INTLQQ/Libs/iOS/INTLQQ_UPL.xml,将{INTL_QQ_APP_ID}替换为实际的 QQ AppID。<dict>
<key>CFBundleURLName</key>
<string>tencent</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tencent{INTL_QQ_APP_ID}</string>
</array>
</dict>打开
INTLSDK/Source/INTLConfig/Configs/iOS/Plist/INTLQQ.plist,将{INTL_QQ_APP_ID}替换为实际的 QQ AppID。<dict>
<key>CFBundleURLName</key>
<string>tencent</string>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLSchemes</key>
<array>
<string>tencent{INTL_QQ_APP_ID}</string>
</array>
</dict>将
{INTL_QQ_APP_ID}替换为 QQ 分配的 AppID。
步骤2:添加 QQ 登录
在调用 INTLAPI.Login 的时候传入权限。INTLAPI.Login 的时候传入权限。建议传入 "all",表示具备已申请的平台侧所有权限。
| 权限 | 说明 |
|---|---|
| get_simple_userinfo | QQ 登录权限(移动端获取 QQ 用户信息) |
-
注册登录相关回调。
- 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.QQ, "all", "");UINTLSDKAPI::Login(EINTLLoginChannel::kChannelQQ, "all", ""); -
与游戏后台同步客户端身份验证状态,等待最终验证结果。
扫码登录
Player Network SDK V1.26.00 开始支持 Android 和 iOS 平台的 QQ 扫码登录。
默认情况下手机如果安装了 QQ app,会直接拉起 QQ app 进行登录,如果手机未安装 QQ app,则自动切换为扫码登录。如需修改默认行为,可以在 extraJson 中指定 qrcode_mode 参数:
| qrcode_mode | 说明 |
|---|---|
| auto | 自动模式(默认): 优先使用 QQ app 登录,未安装 QQ app 时则使用扫码登录 |
| force_app | 强制 QQ app 登录: 未安装 QQ app 时登录会报错 |
| force_qrcode | 强制扫码登录: 无论是否安装 QQ app,都会使用扫码进行登录 |
- Unity
- Unreal Engine
string permissions = "";
string extraJson = "{\"qrcode_mode\" : \"force_qrcode\"}";
INTLAPI.Login(INTLChannel.QQ, permissions, extraJson);
FString Permissions = TEXT("");
FString Extra_JSON = TEXT("{\"qrcode_mode\" : \"force_qrcode\"}");
UINTLSDKAPI::Login(EINTLLoginChannel::kChannelQQ);
步骤3:验收登录功能
在 Player Network SDK 日志中搜索关键字 "AuthResult" 确认渠道名称和 OpenID 是否正确返回。如果正确,则表明集成配置成功,登录功能已成功添加。
如果接入过程中遇到问题,请参见 常见问题。