FAQ
如果遇到任何本文未列出的问题,请联系业务接口人。
LEVEL INFINITE PASS
升级到 LI PASS 会导致原有玩家账号丢失或其他登录问题吗?
不会。登录 LI PASS 时会验证该电子邮件是否已在自定义账号中注册。LI PASS 会自动创建新的 OpenID 或迁移旧的 OpenID。它还支持回滚到原始账号服务,以避免账号丢失。
升级到 LI PASS 后,是否会让玩家感到困惑并导致用户流失?
玩家会得到清晰的提示,而将体验的波动降至最低。
是否有新的阶段或步骤(如再次进行年龄验证)导致用户流失?
没有新增阶段。LI PASS 包含一整套用户界面交互,包括账号注册、登录和合规服务。它保证了品牌概念的一致性,降低了游戏开发和集成的成本。合规服务支持未成年人年龄验证和跨游戏验证的状态迁移,减少了因重复年龄验证和实名验证过程而造成的玩家流失。
LI PASS 玩家(来自其他游戏)是如何被您的游戏吸引的?是否存在合规风险或声誉风险?
游戏通过 SmartLink 向 LI PASS 玩家发送营销电子邮件,或占用 LI PASS 网站营销资源来推广游戏和引导下载。LI PASS 隐私协议必须说明如何使用玩家数据,法律团队必须批准隐私协议,以避免合规风险和声誉风险。
INTLConfig.ini
是否支持为服务条款和隐私协议配置多语言 URL?
不,INTLConfig.ini
不支持多语言,请在对应的 HTML5 页面自行配置。
如何修改 LI PASS 的国家/地区列表?
通过下列步骤修改 LI PASS V1.06 及之前版本的国家/地区列表。V1.07 及之后的版本,请参见 Unity SDK 或 Unreal Engine SDK 的 UpdateCountryList
接口。
- Unity
- Unreal Engine
- 联系 LI PASS 接口人提单修改国家/地区列表。
- 利用研发提供的
AssetBundle
文件来覆盖替换目录{Project}\Assets\StreamingAssets\INTLGameNative\
下的AssetBundle
文件。
手动删除以下跟 LUA 文件同名的 32-bit 和 64-bit LUAC 文件。
{Project}\LevelInfinite\Content\INTLGameNative\LevelInfinite\Luac\MinorsCertificate\Region32.luac
{Project}\LevelInfinite\Content\INTLGameNative\LevelInfinite\Luac\MinorsCertificate\Region64.luac
在原 LUAC 文件位置
{Project}\LevelInfinite\Content\INTLGameNative\LevelInfinite\Luac\MinorsCertificate
放入Region.lua
。
在 Unity 导入 LI PASS 后发生编译错误如何解决?
错误信息参考:
Assets\LevelInfinite\Scripts\INTLGameNative\Scripts\LuaObject\Unity\INTLLua_UnityEngine_SystemInfo.cs(1836,16): error CS0619: 'SystemInfo.supportsGPUFence' is obsolete: 'SystemInfo.supportsGPUFence has been deprecated, use SystemInfo.supportsGraphicsFence instead (UnityUpgradable) -> supportsGraphicsFence'
这是因为 sLua 生成的 LuaObject 代码跟当前引擎版本不匹配,需要重新生成 LuaObject。在 Unity 菜单栏,选择 INTLLua > All > Clear > Make 即可,详见 导入 LevelInfinite 插件。
LI PASS 是否支持合规程序的定制?
支持自定义第三方渠道的合规程序,但不支持自定义 LI PASS 合规程序。
LI PASS 关闭热更后,业务该如何清除旧资源来加载本地资源?
移动端业务需提示玩家卸载重装,PC 端则需清理 Player Network SDK 缓存目录。
如果游戏没有调用 SetDefaultUserStorage
接口,PC 端 Player Network SDK 缓存数据的默认路径为 %ProgramData%\INTL\{game id}\{application name}\
。例如 game id 为 11,application name(游戏应用名称)为 INTLSDKDemo 时,缓存数据将保存在 %ProgramData%\INTL\11\INTLSDKDemo
。
更多信息,请参见 Unity SDK 或 Unreal Engine SDK 的 SetDefaultUserStorage
接口。
SetRewardExtraJson
接口入参解析失败,SDK 对入参是否有兼容?
SDK 层对入参不传值或者 ""
的场景做了兼容,但需业务自行添加标准的 JSON 格式校验。接口入参非标准的 JSON 格式,会导致 SDK 解析失败。
Windows 平台 LI PASS 密码登录时,语言会自动切换为中文。输入字母后再输入数字时,密码会回退并清除前面字符。
因系统设置中的输入法语言切换为中文导致,非 Player Network SDK 组件问题。密码输入框文本发生变化时,会把文本中除字母数字和支持的符号以外的字符剔除掉。
把系统设置中的默认输入法语言切换为英文即可。
使用 Player Network 控制台云控功能下发配置,客户端何时生效?
云控功能无法保证一定可以下发到每个玩家,这取决于玩家当前的网络质量。
例如,玩家首次在 iOS 安装游戏时会需要授权网络,而在未经玩家授权的情况下,下发往往不会成功。玩家授权网络后,后续每次启动客户端时都会进行云控拉取,并在下次启动生效。
针对有多渠道包配置的业务,建议在打包时就配置好不同渠道的信息,避免 Player Network 控制台下发生效时机导致的更新不及时等问题。
游戏启动报错 GameNative sdk get config failed!, ret:1006, msg:gameid not valid!
第一次接入 LIPASS 需要开通 GameNative 权限,请联系 [hakubozhao(赵博)] 或 Player Network 助手开通。
Windows 在 Unreal Engine 导入 LI PASS 后,调用 ULevelInfiniteAPI::OpenLoginPanel
时在 Editor 触发报错。
错误信息参考:
[UE]: INTLGameNative::Lua error: ...elInfinite\Lua\Lua_unreal\AuthWindow\AuthWindowPanel.lua:565: attempt to index a nil value (field 'TextBlock_SendCodeButtonText')
Windows 程序退出时候 LI PASS 主动调用 CloseLI
,但是无法在 Editor 里触发,所以需要在初始化 Editor 模式前调用 CloseLI
,清理上次运行的 Lua 虚拟机残留数据。
"ret":1018,"msg":"sigkey not found"
因为 INTLConfig.ini 配置文件中的 INTL_URL
和 ACCOUNT_URL
环境信息不一致所导致。修改 INTLConfig.ini
配置文件后,如仍然未生效,建议删除 LOG 路径下的下列缓存文件:
- ApasRemoteConfig
- IntlCustomConfig.tmp
- IntlRemoteConfig
- LipassRemoteConfig
如何禁用 LI PASS 用到的 LuaProfiler
性能检测工具?
把
LevelInfinite.uplugin
文件里LISluaProfile
的内容删除后,LuaProfiler
不再运行
删除对应
LuaProfiler
代码的文件夹
调用 INTLAPI.SetAuthEncryptData
在调试模式下启动游戏导致 Unity 崩溃。
在初始化 LI PASS 之前需要先初始化 Player Network SDK。
登录鉴权
登录失败的常见问题
账号数据能清档吗?
测试环境可以联系 Player Network 助手清档。
正式环境账号数据无法清档。
绑定账号成功后如何获取已绑定账号的信息?
登录成功后,调用 QueryUserInfo
回调结果 INTLAuthResult
的 BindList
即为已绑定账号的信息。
可以绑定两个相同渠道的账号吗?例如,一个游客绑定2个 Facebook 账号,或者 Facebook 账号绑定另1个 Facebook 账号?
不可以,每个渠道只能绑定一个账号。
绑定失败,错误码:retCode: 5
、thirdCode: 1403
。
可能是以下的原因造成的:
- 已绑定过该渠道的账号
- 被绑定的账号已被绑定过
- 被绑定的账号登录过
通过查询已绑定账号的信息,如果 BindList
,里没有被绑定渠道的账号信息则导致的原因为 2 或 3,否则是 1。
游客账号链接到渠道账号后, OpenID 会改变吗?
不会,OpenID 不会更改。
卸载游戏后游客账号会重置吗?
SDK V1.7 及之后的版本不会有这个问题,可调用 ResetGuest
重置账号。V1.6 及之前的版本,卸载游戏时将重置账号。
第三方渠道授权成功后绑定失败会无法切换账号,也无法登出
请清理浏览器数据后在浏览器登出第三方渠道账号,然后清理应用数据,再尝试绑定。
删号的 intl_cluster
是什么参数?
INTLConfig.ini
中 INTL_URL
的 base64URL
编码。
怎么清除 Android 游戏的缓存?
不同手机的操作顺序不同,下文中以 Google Pixel 4a 手机为例展示清除游戏缓存的步骤。
- 打开手机找到 设置。
- 选择 存储 > 内部共享存储空间 > 游戏 然后选择要清除缓存的游戏。
- 点击 清除存储空间 和 清除内存。
[Unity] MiniJson 反序列化拿到的 INTLAuthResult
为空
查看 Unity 的 Project Setting 下的 Managed Stripping Level 是否是 low。如果必须使用其他级别,请联系 Player Network 助手。
同一个第三方账号在不同环境的环境下生成的 OpenID 是否一样?
不一样,同一个第三方账号在不同环境会生成不同的 OpenIDs。
自动登录失败,错误代码: retCode: 5
、thirdCode: 11002
自动登录失败,因为登录令牌已过期并删除 (默认登录后30天)。 玩家必须重新登录。 收到错误,游戏可再次提升登录界面以允许玩家重新登录。
UI 界面,密码框和背景融为一体问题。
在 UIRoot
中设置 ForceVolatile
。
网页游戏配置问题
请检查下 Facebook 管理端是否有填写图中的 Website 配置,该配置代表游戏有网络版本。如果没有网络版本,请删除该配置。如果填写不正确,游戏会遭到 Facebook 禁用下架。
[iOS] 系统分享到 Facebook 显示的图片不是 ImagePath
的图片。
iOS 系统分享对内容处理的流程导致。因为同时提供了 Link
和 ImagePath
图片,iOS 先从 Link
里面获取到了一个图片。
[System] 同时分享文本,链接和图片,但文本不显示。
有图片或链接时,文字就不显示了,文字需要手动输入。
[Discord]查询好友的时候,拉取的信息是不是仅限于同玩好友?
不是,Discord 查询的是平台好友,不是同玩好友。
[Discord]多商店渠道包,如果每个渠道包的 Discord appid
不同,Discord 获取的好友是不是每个渠道包的数据是隔离的?
不是。
登录为什么不触发回调?
调用回调逻辑有问题:
打开界面的时候需要监听
AuthResultObserver
方法。- Unity
- Unreal Engine
public override void Start()
{
base.Start();
INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
}更多信息,请参见
AuthResultObserver
。void ULevelInfiniteWindow::OnOpen()
{
Super::OnOpen();
FocusSampleUI();
AuthResultObserver = UINTLSDKAPI::GetAuthResultObserver().AddUObject(this, &ULevelInfiniteWindow::OnAuthResult_Callback);
}更多信息,请参见
AuthResultObserver
。初始化需调用这个接口:
- Unity
- Unreal Engine
public void OnLIPASSInitClick()
{
isVMStart = true;
var activityName = INTLAPI.GetConfig(LevelInfinite.DefaultActivityKey, "LILandscape");
ShowLogInNewLine(string.Format("Init:\nLI plugin ver:[{0}] \ndefault activity:[{1}]", LevelInfinite.Version, activityName));
LevelInfinite.InitLIP(font,LI_Sample_APP_VERSION);
LevelInfinite.SetUIRoot(uiRoot);
SetupCanvasResolution();
}void ULevelInfiniteWindow::LIInit()
{
FString Version = LI_Sample_APP_VERSION;
// FString Version = FApp::GetBuildVersion();
UE_LOG(LogTemp, Display, TEXT(">>>>> LIInit, Version:%s"), *Version);
//#if PLATFORM_WINDOWS || PLATFORM_ANDROID || PLATFORM_IOS
UE_LOG(LogTemp, Display, TEXT(">>>>> call ULevelInfiniteAPI::InitLIP"));
ULevelInfiniteAPI::InitLIP(GetGameInstance<UGameInstance>(), Version);
ULevelInfiniteAPI::SetUIRoot(INTLGN_LIActivity);
#if PLATFORM_ANDROID || PLATFORM_IOS
ULevelInfiniteAPI::SetUICustomScale(1.44f);
#elif PLATFORM_WINDOWS
ULevelInfiniteAPI::SetUICustomScale(1.0f);
#endif
//#endif
}
登录报错 5_1401
和 5_30004
。
- 缺少 LIP 后台配置,可联系 Player Network 助手。
- 检查下合规配置和合规接口开关。
游客登录失败,错误代码:retCode: 5
、thirdCode: 1104
。
Player Network 的登录与账号服务未启用游客登录,请到 Player Network 开启游客登录。
绑定成功后返回的 bindlist
为空,没有绑定成功的账号信息。
需要调用 QueryUserInfo
才返回 bindlist
,之后自动登录会带有 bindlist
。
如何重置游客账号?
SDK V1.7 及之后的版本需调用 ResetGuest
重置游客。V1.6 及之前的版本游戏卸载重装会重置游客账号。
游客登录发生崩溃
LI PASS V1.16 或之后的版本:
检查是否调用 INTLAPI.InitLIP()
初始化 SDK。
LI PASS V1.06 ~ V1.15:
检查是否调用 INTLAPI.InitLI()
初始化 SDK。
LI PASS V1.05 或更早的版本:
检查是否调用 INTLAPI.Init()
初始化 SDK。
登录失败,返回 retCode:5
、msg:CURLCode for more details
检查 Unity 打包时有没有读取到 INTLSDK.bundle
,或 UnityFramework
是否缺少 INTLSDK.bundle
。
为什么在多个 iPhone 上会使用到相同的游客 OpenID?
OpenID 会被 iCloud 同步。检查 iPhone 是不是登录了同一个 iCloud 账号并打开了 keychain 的开关。
iOS 设备 A 游客登录生成 UID,设备 B 游客登录时同样显示设备 A 的 UID
iOS 的钥匙串安全同步可能已启用,导致多台设备的设备 ID 或 OpenID 相同。
iOS 的设备 ID 数据保存于 keychain 里,Player Network SDK 默认只读取而不会对数据进行修改或删除的操作。如果多台设备登录了同一个 Apple 账号,并且开启了 iCloud 云备份里面的钥匙串项目,iOS 系统会把 OpenID 给同步到所有设备。因此,多台设备有可能获得相同的设备 ID,游客登录也可能获得相同的 OpenID。
如果游戏有踢出功能,可能产生游客账号互踢的现象。玩家可到 iCloud 云备份关闭 Keychain Sharing 功能,卸载 app 后重装来解决问题。
更多详情,请参见 钥匙串安全同步。
PC 端登录失败,请求网络 API 返回错误代码:ret:77
、msg:CURLCode for more details
因 Player Network SDK V1.21.02 升级了 Windows 的 libcurl
,但未同步到之前版本的部分配置,导致在非 UTF8 的 Windows 系统上读取证书路径有问题。
可选择升级到 Player Network SDK V1.22.00 及以后的版本,或替换 INTLFoundation.dll
文件即可。更多信息,请联系 Player Network 助手。
登录失败,请求网络 API 返回错误代码:ret:28
、msg:the timeout time was reached
可以尝试以下排查步骤:
- 检查网络连接,确保网络稳定,或尝试重启路由器。
- 清除浏览器缓存和 cookies,或尝试使用无痕模式。
- 尝试使用不同的浏览器或设备。
- 如果使用 VPN,关闭 VPN 后重试。
- 检查服务器状态,例如查看相关状态页面来确认服务是否正常运行。
- 稍后再重试登录,服务器在负载高时可能会导致超时问题。
Apple
Apple 代码错误
有关 Apple 错误代码的更多信息,请参见 Apple 错误代码(ASAuthorizationError
)。
有关所有的渠道错误代码,请参见 渠道错误代码。
登录失败,代码错误: 4
- 检查
UnityFramework
内是否含有INTLSDK.bundle
。 - 检查
Unity-iPhone
内是否含有INTLSDK.bundle
。
登录失败,代码错误: retCode: 5
、thirdCode: 1202
检查 Player Network 中的渠道配置 BundleID
是否正确。BundleID
格式应类似于 com.company.name
。
登录失败,代码错误: retCode: 5
、thirdCode: 1006
、msg:invalid gameid or channelid
- 检查 iOS INTLConfig.ini 中的 SDK 环境 配置是否正确。
- 检查 登录和账号服务 渠道信息是否在 Player Network 中配置正确。
Apple 登录器支持横屏或屏幕自动旋转吗?
Apple SDK 不支持横屏设置或屏幕自动旋转。
如何获取 Key ID
和 PrivateKey
?
登录失败,代码错误:retCode: 9999
、thirdCode: 1000
、msg: Error Domain=com.apple.AuthenticationServices.AuthorizationError
排查步骤:
- 检查
Entitlements
文件中的com.apple.developer.applesignin
是否配置正确。 - 检查
provision
文件签名配置。
DMM
DMM 错误代码
- Unity
- Unreal Engine
void CheckThirdCode(INTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 2000:
// The logged-in user has no profile registered.
break;
case 300:
// Failed to get the DMM member ID
break;
case 2002:
// User who withdraws from membership
break;
default:
// Unknown error code
break;
}
}
}
void CheckThirdCode(FINTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 2000:
// The logged-in user has no profile registered.
break;
case 300:
// Failed to get the DMM member ID
break;
case 2002:
// User who withdraws from membership
break;
default:
// Unknown error code
break;
}
}
}
错误代码 | 错误信息 |
---|---|
300 | 获取 DMM 成员 ID 失败 |
400 | 错误请求 |
403 | OAuth 验证失败 |
500 | DMM 游戏平台错误 |
1000 | 获取应用程序信息失败 |
2000 | 登录用户未注册 |
2001 | 用户已在黑名单 |
2002 | 刪除 DMM 帳號 |
Epic
登录报错 9999_5, msg: EOS_AccessDenied
权限不足导致,使用的账号需要在 Epic Developer Portal 添加为成员,并赋予开发者角色权限。
更多详情,请参见 Epic 组织页面选项卡。
Facebook
Facebook 常见问题
有关 Facebook 错误代码的更多信息,请参见 Facebook 错误代码。
有关所有的渠道错误代码,请参见 渠道错误代码。
Facebook 登录失败,无 timeout,返回错误代码:6
(timeout)
检查是否已在 INTLConfig.ini
LIFECYCLE
中配置 Facebook。有关详细信息,请参见 INTLConfig.ini 配置。
登录 Facebook 后没有返回头像。
如果 Facebook 的应用类型为 Gaming Service,需要更新至 Player Network SDK V1.7 或更高版本以返回头像。
Facebook 登录失败,错误代码:retCode:5
、thirdCode:1202
.
Player Network 配置错误。为确保相关参数对齐,请参见 配置 Player Network SDK 后端。
Facebook 登录失败,错误信息:Key Hashes not configured or not matched
。
Facebook 控制台配置错误。要确 Key Hashes 配置正确,请参见 配置应用程序(iOS) / 配置应用程序(Android)。
Facebook 登录失败,SERVER_ERROR: [code] 1675030 [message]: Error during query execution. [extra]:
检查账号是否已添加到测试环境的 Facebook 登录允许列表中。设置允许列表
在 Server Editor 页面,点击 Whitelist。
在弹出的 Select Whitelist 中,选择区域的允许列表。
为每个区域配置一个允许列表。该允许列表用于整个区域。
在 Whitelist 页面,添加、删除和编辑允许列表内容。
Facebook 登录功能已禁用弹出提示:为确保账号安全,浏览器嵌入的 Facebook 登录功能已被禁用。
安装 Facebook 应用程序并登录。如果用户需要通过浏览器登录,Facebook 要求用户安装支持自定义标签的浏览器,如 Chrome 浏览器。
如何更改 Facebook 同意屏幕上显示的应用程序名称?
在 Facebook 应用配置 页面上进行更改。
Facebook 登录失败,提示 "App not active" 错误。
如果游戏已准备发布,请将 App Mode 从 Development 更改为 Live。更多信息,请参见 发布检查表 - Facebook。
如果游戏正在进行内部测试,请将所需用户添加为 Testers。更多信息,请参见 入门指引 - Facebook - 添加用户权限。
Facebook 登录失败,网页登录成功,但报告了错误 "Invalid Claims"。
- 确保已填写以下必填字段。
- 检查
appid
是否有错误和空格。
如何生成 Facebook 密钥哈希(Key Hash)?
当您的应用程序发布到商店时,与 Facebook 的集成可能无法正常工作,除非在您的 Facebook 应用程序 ID 中生成发布密钥哈希 并添加到 Android 设置中。这将保证 Facebook 与您的应用程序之间的信息交换是经过验证的。
如需了解更多信息,请参见 创建发布密钥哈希。
从 Google Play 获取应用程序签名密钥散列
谷歌的 Play App Signing不提供密钥库,而在 Facebook 上配置则需要密钥库来生成密钥哈希值。请按照以下步骤获取 Facebook 所需的哈希值:
打开 Google Play Console 并选择 Release > Setup > App integrity。
在 App signing key certificate 部分,复制 SHA-1 值。
打开 Windows 上的 Terminal/Bash(例如 Git Bash),输入以下命令获取哈希值。
echo {INTL_SHA-1_KEY} | sed s/\\://g | xxd -r -p | base64
从密钥库获取 APK 密钥散列
警告APK 密钥散列仅用于 APK 测试。公开发布时请使用 Google Play 应用程序签名密钥散列。
- Mac
- Windows
要为密钥存储生成哈希值,请运行以下命令:
keytool -list -printcert -jarfile [path_to_your_apk] | grep "SHA1: " | cut -d " " -f 3 | xxd -r -p | openssl base64
对于 Windows 系统,您需要具备以下条件:
- Java 开发工具包中的密钥和证书管理工具(keytool)
- [谷歌代码档案]中的OpenSSL for Windows Library(https://code.google.com/archive/p/openssl-for-windows/downloads)
要为密钥库生成哈希值,请在 Java SDK 文件夹中的命令提示符下运行以下命令,并相应替换密钥库的
KEY_ALIAS
和KEY_PATH
:keytool -exportcert -alias <KEY_ALIAS> -keystore <KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64
确保使用首次创建密钥时设置的密码。
从 APK 软件包获取 APK 密钥散列
警告APK 密钥散列仅用于 APK 测试。公开发布时请使用 Google Play 应用程序签名密钥散列。
- Mac
- Windows
要为密钥存储生成哈希值,请运行以下命令,并相应替换密钥存储的
KEY_ALIAS
和KEY_PATH
:keytool -exportcert -alias <KEY_ALIAS> -keystore <KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64
对于 Windows 系统,您需要具备以下条件:
- Java 开发工具包中的密钥和证书管理工具(keytool)
- 谷歌代码档案 中的OpenSSL for Windows Library
- Gitbash
要为密钥存储生成哈希值,请使用 Gitbash 在 Java SDK 文件夹的命令提示符下运行以下命令:
keytool -list -printcert -jarfile [path_to_your_apk] | grep -Po "(?<=SHA1:) .*" | xxd -r -p | openssl base64
确保使用首次创建密钥时设置的密码。
将密钥哈希值复制到 Facebook
该命令将生成一个28个字符的字符串。将密钥哈希值复制并粘贴到 Facebook app ID 中的 Android 设置中。
检查 Facebook 应用 ID 中的 Android 设置是否也包含正确的 Android 软件包名称和主活动类。
Facebook 登录提示 “登录出错”。
keyhash
配置错误。
- 检查 Facebook 应用面板是否配置了
keyhash
- 确认
keyhash
是否计算正确 - 如果使用了 Google 商店,Google 也需要更新签名密钥
Facebook APP 登录报错 9999-309
(iOS)和 9999 -1
(Android)。
因手机更改了自定义事件,导致 Facebook 安全校验不通过返回 Invalid ID token from login response
。在手机设置中找到日期和时间设置,并打开自动设置时间。
iOS Facebook 分享链接成功,但是分享图片失败,而且在 Facebook app 个人页面看不到分享的图片
确认 Facebook 开发者管理平台配置的 app 名称与
INTLConfig.ini
中FACEBOOK_DISPLAYNAME
完全一致。Facebook 官方对 app 名称没有给出明确的要求,建议不要使用特殊符号。
Facebook 渠道分享图片失败。报错:"ret":-1、"msg":"Need Messenger installed or login!"、"method_id":201、"ret_code":15、"ret_msg":"Need install app"
检查 Facebook app 是否安装。
安装 Messenger,打开 Messenger 并确认登录成功。
确认安装包里面的
AndroidManifest.xml
文件声明,若无声明,无法判断系统是否安装了 Facebook app。通过 demo 的功能来测试手机上是否安装了 app:
- 选择 Tool > isAppInstalled。
- 在 channel 输入包名,extraJson 不用填。
例如测试 Facebook,输入:com.facebook.katan
。
iOS 如何修改 Facebook 渠道登录同意页面的应用程序名称?
Facebook iOS SDK,用的是 ASWebAuthenticationSession
实现鉴权。
苹果官方 ASWebAuthenticationSession
内的设置读取 Xcode 工程的 TargetName
来展示,而并非 CFBundleName/CFBundleDisplayName
。
因此,如果要调整这个展示名字,只能修改 Xcode 工程的 Target
名字。
有关 ASWebAuthenticationSession
的讨论,请参见 ASWebAuthenticationSession
和 SFAuthenticationSession
的显示名字问题。
Facebook app 类型从游戏类型切换到 Gaming Services 类型注意事项
- 登录权限发生变更,需要传入默认权限
gaming_profile
。 - Facebook 提供的后台访问 API 域名发生变更,需要知会 Player Network 后台同学 [v_fyjzhan] 更改 Player Network 后台访问 Facebook 的域名。
Facebook 的邀请功能(GameRequest)注意事项
- 避免频繁发送邀请,否则可能会导致邀请收不到
- 有一定的时间延时
- Facebook 管理端可以屏蔽消息
- 如果 Facebook app 尚未发布,被邀请人也需要有测试权限才能收到邀请
- 测试过程中,尽量使用测试账号,避免上述问题
Facebook 登录不会打开 Facebook 应用进行鉴权
在 iOS 17 及以上版本设备禁用 App Tracking Transparency(ATT)将触发 Facebook 的 限制登录 模式,应用切换不受支持。请使用 WebView 进行登录鉴权。
Facebook Android SDK 在 Facebook App Dashboard 被错误显示为 V0.x.x,提示 "Needs upgrade"
Facebook Android SDK V16.x.x 的版本信息显示在 Facebook App Dashboard 有问题,业务可替换 Gradle 版本来解决。
从 V1.21.00 起,Player Network SDK 使用 Facebook Android SDK V16.1.3,并可能受该问题影响,版本信息请参见 SDK 版本关系说明。
有关问题的更多信息,请参见 Github facebook-android-sdk 上的 问题 #1191。
Facebook 登录提示 “你无法用你的 Facebook 账户登录这款应用”
如果 Facebook 开发者平台内添加了小游戏产品,有可能导致该错误。请先将小游戏产品移除后再尝试重新登录。
Facebook 开发者平台提示图谱 API 版本已经停用,需更新至 V15.0 或更高版本
Player Network SDK 已更新后台 Facebook 图谱 API 至 V19.0 版本,业务无需关注。
Game Center
Game Center 错误码
有关 GameKit 错误域错误代码的更多信息,请参见 GKError.Code。
- Unity
- Unreal Engine
void CheckThirdCode(INTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 6:
//GKError.Code.notAuthenticated: The system can’t complete the requested operation because the system hasn’t authorized the player.
break;
case 15:
//GKError.Code.gameUnrecognized: The system can’t complete the requested operation because Game Center doesn’t recognize the app.
break;
case 3:
//GKError.Code.communicationsFailure: The system can’t complete the requested operation due to an error communicating with the server.
break;
default:
// Unknown error code
break;
}
}
}
void CheckThirdCode(FINTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 6:
//GKError.Code.notAuthenticated: The system can’t complete the requested operation because the system hasn’t authorized the player.
break;
case 15:
//GKError.Code.gameUnrecognized: The system can’t complete the requested operation because Game Center doesn’t recognize the app.
break;
case 3:
//GKError.Code.communicationsFailure: The system can’t complete the requested operation due to an error communicating with the server.
break;
default:
// Unknown error code
break;
}
}
}
Game Center 登录或绑定后没有回调
Game Center 规定,如果用户三次取消登录或绑定操作,将无法打开 Game Center 登录界面。
只有当游戏进程调用 Game Center 登录或绑定 API 时,才会在第一次请求时返回回调。因此,当用户无法在游戏内打开 Game Center 登录框时,需要返回 Settings > Game Center 手动登录 Game Center。
Garena
登录失败,响应超时。
检查日志中的 requestExchangeFacebookToken
是否成功返回。如果返回失败,请联系 Garena 的负责人。
登录经常超时,如何修改登录超时时间?
登录超时的默认值是30秒。请通过 INTLConfig.ini 的 SDK_AUTH_OVERTIME
和 WEB_AUTH_OVERTIME
设置登录超时时间。
SDK_AUTH_OVERTIME
是拉起应用登录,WEB_AUTH_OVERTIME
是拉起网页登录。建议两个同时都配置。
Google
Google 常见问题
- Unity
- Unreal Engine
void CheckThirdCode(INTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 9 :
//The version of the Google Play services installed on this device is not authentic.
break;
case 3:
//The installed version of Google Play services has been disabled on this device
break;
case 10;
//The application is misconfigured. This error is not recoverable and will be treated as fatal
break;
case 7:
//The application is misconfigured. This error is not recoverable and will be treated as fatal
break;
case 16:
//One of the API components you attempted to connect to is not available. The API will not work on this device, your app or this account, and updating Google Play services will not likely solve the problem
break;
default:
// Google handle error
break;
}
}
}
void CheckThirdCode(FINTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 9 :
//The version of the Google Play services installed on this device is not authentic.
break;
case 3:
//The installed version of Google Play services has been disabled on this device
break;
case 10;
//The application is misconfigured. This error is not recoverable and will be treated as fatal
break;
case 7:
//The application is misconfigured. This error is not recoverable and will be treated as fatal
break;
case 16:
//One of the API components you attempted to connect to is not available. The API will not work on this device, your app or this account, and updating Google Play services will not likely solve the problem
break;
default:
// Google handle error
break;
}
}
}
ConnectionResult
错误代码 | 错误信息 |
---|---|
5 | 无效账号 |
7 | 网络错误 |
10 | 配置错误 |
13 | 被用户取消 |
16 | 请求的 API 已禁用。 |
更多信息,请参见 ConnectionResult。
GamesActivityResultCodes
错误代码 | 错误信息 |
---|---|
10001 | 重新连接 GoogleApiClient。 |
10002 | 登录失败。 |
10003 | 用户未获得游戏授权。 |
10004 | Gaming Services 配置错误。 |
10006 | 由于网络错误,服务器请求失败。 |
更多信息,请参见 GamesActivityResultCodes。
有关所有的渠道错误代码,请参见 渠道错误代码。
配置崩溃
如果 App ID 和 Server Client Key 配置不当,就会发生崩溃:
Caused by: java.lang.IllegalStateException: A fatal developer error has occurred. Check the logs for further information.
at com.google.android.gms.common.internal.zzf$zza.zzb(Unknown Source)
at com.google.android.gms.common.internal.zzf$zza.zzu(Unknown Source)
at com.google.android.gms.common.internal.zzf$zze.zzxH(Unknown Source)
at com.google.android.gms.common.internal.zzf$zzd.handleMessage(Unknown Source)
...
GMS 更新和版本兼容性
由于版本兼容性问题,早期版本的 Google Play Services 无法一起使用。目前,Player Network SDK 支持 GMS 版本 16.0.1 和 Firebase 版本 16.0.5。
DEVELOPER_ERROR 错误
请勿在此处使用 Android 客户端密钥,否则将出现 DEVELOPER_ERROR。确保调试时使用的签名与上传到 Google console 的应用签名一致。
GOOGLE_CLIENT_KEY
是 Player Network SDK 所需的 网络客户端密钥。
无法登录 Google,返回第三方错误代码 10
第三方错误代码 10
表示 DEVELOPER_ERROR
,可能由以下问题引起。
配置问题:
检查 Google 配置和 Player Network 配置是否对齐。
检查 INTLConfig.ini 中的
GOOGLE_CLIENT_KEY_ANDROID
是否包含 Google Console 的 Web Client ID。检查安装包名称和
SHA-1
是否与 Google 配置一致。
Android Google 商店 AAB 软件包重新签名导致的登录配置问题:
从商店安装时,由于 Google Play 的签名配置中启用了重新签名,实际下载的 AAB 软件包签名可能与原始的
SHA-1
设置不一致。Google Play 中的签名配置必须设置为与软件包开发时的签名一致。- 要更新 Google Play 的 App signing key certificate,请选择左侧的 Setup > App integrity
- 选择 App signing
- 点击 Request key upgrade
- 选择 Upload a new app signing key from Java keystore。
- 按照 Google 提供的步骤,下载生成密钥的工具并上传生成的
ZIP key
文件 - 上传后,点击右下角的 Upgrade > Upgrade Google signing key certificate。
返回的头像是否用于 Google 账号登录?
Player Network SDK 将返回 Google 头像。请参见 Unity SDK 或 Unreal Engine SDK 中 AuthResult
接口的 PictureUrl
。
Google 无法登录,选择电子邮件后,弹出的登录界面显示 "Loading",直至登录超时。
在 Google API 控制台上,将 "Publishing status" 设置为 "PUBLISH APP"。有关详细信息,请参见 生产环境配置。
iOS 启动时应用程序突然关闭
转到 Plist Configuration,检查是否配置了 GoogleService-Info.plist
。
Google 登录授权错误(403)
Google API 控制台 尚未授权。应用程序仍在开发中。在 Google API 控制台添加测试用户,或将 "Publishing status" 设为 "PUBLISH APP"。
在 Android 设备上,当我点击 Google 登录时,授权界面无法打开,错误代码为 ret_code:9999
- 检查您的手机是否可以访问互联网。
- 检查您的手机是否可以访问国际(非中国大陆)网站。
- 检查是否正确安装了 GMS。请参见 如何安装 GMS。
在 iOS 设备上,我无法通过 Google 登录,显示错误信息:You must specify clientID for GIDSignIn
检查 main target 是否有 INTLSDK.bundle
。如果缺少,请手动添加。
在 iOS 设备上,我无法通过 Google 登录,出现错误信息:Audience is not a valid client ID
。
检查 INTLConfig.ini
中的 GOOGLE_CLIENT_KEY_ANDROID
配置是否正确。按照 INTLConfig.ini 配置 中的说明完成 iOS 配置。
如何更改 Google Web 同意页面上显示的应用程序名称?
在 OAuth Consent screen 页面的 [Authorised domain] 中进行更改。
Google 登录授权错误 Error 400: redirect_uri_mismatch
可能是应用程序设置中的重定向 URI
与授权重定向 URI
不匹配,或者您使用的 URI
不是您在 Google API 控制台
中为客户端 ID
指定的 URI
。
Google 登录报错 1281
idtoken
过期。Google 登录后拿到 idtoken
,idtoken
本身包含 token 有效期信息。
如果把手机本地时间调回过去的日期,等待大概一小时后再登录 Google,token 不会刷新,再请求就会报 1281
错误。
Kakao
Kakao 错误码
有关 Kakao 错误代码的更多信息,请参见 Kakao 错误代码。
有关所有的渠道错误代码,请参见 渠道错误代码。
Kakao 绑定失败,报错 KaKaoAuth checkIsSdkStartStatus sdk start failed
。
绑定时,Kakao 应用必须在后台运行。先打开 Kakao 应用,再重新绑定。
LINE
LINE 代码错误
有关 LINE 错误代码的更多信息,请参见 LINE iOS 错误代码 和 LINE Android 错误代码
有关所有的渠道错误代码,请参见 渠道错误代码。
LINE 登录界面 error 400
- 检查 adaptation to Swift-LINESDK。
- 检查配置文件、软件包名称和
LINE_CHANNEL_ID
是否输入正确。 - 检查
INTLLINEKit.projmods
文件。 - 检查 LINE Developers Console 回调 URL。
LINE 登录,点击 "允许" 后无法从 Webview 或 LINE 应用程序跳转回游戏。
在 Player Network SDK V1.10 AndroidManifest
文件中,如果 Android:taskaffinity
属性值为空,则 LINE WebView 登录后将无法重定向。
删除此代码即可解决 LINE 登录问题。
LINE 登录界面没有图标。
进入 LINE 平台 设置应用程序图标。
LINE 登录提示 Error, cannot process properly
。
这可能是网络问题造成的,请使用不同的网络环境再试一次。
LINE 登录失败,错误代码:3016,错误信息类似于:CryptoError: Verification failed for key: Swift.KeyPath<LINESDK.JWT.Payload, Swift.Optional<Foundation.Date>>. Got: 2022-04-19 12:15:12 +0000, expected earlier than 2022-04-19 12:10:47 +0000
.
用户修改设备时间时会出现此错误。
在 iOS 中国版中无法访问 LINE 网页,打开 LINE 并登录后没有回调
这是 LINE SDK 的一个已知问题。
如何更改 LINE 同意屏幕上显示的应用程序名称?
在 LINE App Basic Settings 页面进行更改。
PS5
Sony 有三种环境 dev,QA 和产品。Player Network SDK 使用哪种环境? 如果当前游戏处于开发环境, 是否需要在稍后审查和发布时对 Player Network SDK 的配置进行相关调整?
Sony 的环境可以在开发引擎上切换。SDK 将自动识别 Sony 环境并通知 SDK 服务器,和 SDK 服务器将根据环境 ID 访问 Sony 不同的服务器。 不管环境如何,当从开发到质量保证到正式环境时,Player Network SDK 可以在没有额外设置的情况下自动切换。
QQ
登录报错 "ret":1204, "msg":"ret[-3], msg[app has no privilege to use this api]
这是由 QQ 渠道调用的接口缺少登录权限所导致,详见 配置 QQ 登录 页面内 iOS 和 Android 的教程中,前提条件 下有关 QQ Connect 平台内容的 申请 QQ Connect OpenAPI 能力 is_login 权限 部分。
Steam
登录失败,error code: 5, third error code: 1206
这是由于 Steam 连接断开造成的。打开 Steam 并重新连接。
UE 编辑器中的 Steam 登录失败
请将 steam_appid.txt
文件放到运行 UE4Editor.exe
的同一目录下,即 yourEngine/Engine/Binaries/Win64
目录。
怎么在 editor 中 Steam 登录报错定位程序输入点?
将 steam_appid.txt
文件放到运行 UE4Editor.exe
的同一目录下,即 yourEngine/Engine/Binaries/Win64
目录。如果 app 有自己的 ID 这里替换成自己的,如果没有的话 就用 480
。
ret:17, retMsg "SteamAPI_Init failed. Please check your Steam client status"
Steam 在运行游戏时可能需要 Windows 管理员权限,因此非管理员账号会在初始化阶段报错。由于 Steam API 初始化函数并没有详细区分错误类别,请按照以下步骤尝试排查:
- 确认 Steam 客户端是否已启动并登录。
- 确认所使用的 Windows 账号持有管理员权限。
- 卸载重装 Steam 客户端、更换设备。
- 到 Steam 社区 寻求更多解决方法。
ret:33, retMsg "Please launch app by Steam Client"
游戏不是从 Steam 客户端正常启动,删除游戏可执行文件目录下的 steam_appid.txt
后重试。
ret:35, retMsg "STEAM_USER_NOT_LOGINED"
玩家没有登录 Steam 客户端导致报错,建议检查玩家的 Steam 客户端是否已登录成功,是否在线。
网络错误,error code: 5, third error code: 1200
Player Network 后台到 Steam 后台的网络超时,可以联系业务接口人。
Twitter
Twitter 错误代码
有关 Twitter 错误代码的更多信息,请参见 Twitter 响应和错误代码。
有关所有的渠道错误代码,请参见 渠道错误代码。
- Unity
- Unreal Engine
void CheckThirdCode(INTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 401:
/*
Unauthorized: There was a problem authenticating your request.
This could be due to missing or incorrect authentication credentials.
*/
break;
case 500:
/*
Internal Server Error: Something is broken.
This is usually a temporary error, for example in a high load situation or if an endpoint is temporarily having issues.
*/
break;
case 503:
// Service Unavailable: The Twitter servers are up, but overloaded with requests. Try again later.
break;
default:
// Unknown error code
break;
}
}
}
void CheckThirdCode(FINTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 401:
/*
Unauthorized: There was a problem authenticating your request.
This could be due to missing or incorrect authentication credentials.
*/
break;
case 500:
/*
Internal Server Error: Something is broken.
This is usually a temporary error, for example in a high load situation or if an endpoint is temporarily having issues.
*/
break;
case 503:
// Service Unavailable: The Twitter servers are up, but overloaded with requests. Try again later.
break;
default:
// Unknown error code
break;
}
}
}
在 Android 设备上,如果用户登录 Twitter 后注销,下次登录时再点击注册,则会报告网络错误。
出现这种情况是因为 https://.api.twitter
的 cookie 尚未清除。在 Android 设备上,只能通过 RemoveAllCookie
方法清除 cookie,但这会删除所有网站的 cookie 信息。此问题目前尚未解决。
Twitter 登录界面持续显示 "Loading"。
- 检查 Twitter 控制台是否配置了回调允许列表。
- 检查 Player Network
key
和secret
是否正确。
如何更改 Twitter 同意页面上显示的应用程序名称?
在 Twitter App Configuration 页面上进行更改。
当短时间内分享太多时,Twitter 会限制分享。请在日志确认分享接口是否被限制。如果日志显示 Twitter API error: Your account is suspended and is not permitted to access this feature (code 64)
,则接口已被限制。
在 iOS 设备上,Player Network SDK V1.18 之前的版本不支持转换 Twitter 账号,只能使用第一个分享的账号分享,转换账号则需要重新安装游戏包。
Twitter iOS 分享报错 ret_code:9999
、third_code:32
Twitter SDK 的登录态无效。这个问题已经在 V1.16.05 之后解决。如果这个问题在 V1.16.05 之后仍然存在,在 extra_json 中配置 {"login_first":1}
。更多信息,请参见 Twitter 好友已知问题。
Twitter 启用 2FA 后无法登录游戏
如果玩家在 Twitter 启用了 2FA,使用 Twitter 账号登录游戏的时候可能会失败,页面跳转到 Twitter 主页面而无法成功登录。建议玩家暂时先禁用 2FA,完成登录过程后再重新启用 2FA,提高账号安全性。
Ubisoft
Ubisoft 错误代码
- Unity
- Unreal Engine
void CheckThirdCode(INTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 0:
//成功
break;
case -4:
//请求 Uplay Roaming Profile 失败
break;
case -6:
//创建 Roaming Profile 失败
break;
case -1:
//创建 Guest 用户失败
break;
case -8:
//创建 Roaming 会话失败(Flow2 登录)
break;
default:
// 未知错误代码
break;
}
}
}
void CheckThirdCode(INTLAuthResult result)
{
if(result.RetCode == 9999)
{
switch(result.ThirdCode):
{
case 0:
//成功
break;
case -4:
//请求 Uplay Roaming Profile 失败
break;
case -6:
//创建 Roaming Profile 失败
break;
case -1:
//创建 Guest 用户失败
break;
case -8:
//创建 Roaming 会话失败(Flow2 登录)
break;
default:
// 未知错误代码
break;
}
}
}
错误码列表 | 说明 |
---|---|
0 | 成功 |
-1 | 创建游客用户失败 |
-2 | 创建游客会话失败 |
-3 | 创建 UplayRoaming 会话失败 |
-4 | 请求 Uplay Roaming Profile 失败 |
-5 | 创建 Roaming 用户失败 |
-6 | 创建 Roaming Profile 失败 |
-7 | 创建 Roaming 会话失败 (Flow 1 首次登录) |
-8 | 创建 Roaming 会话失败 (Flow 2 登录) |
-9 | 创建 Roaming 会话失败 (Flow 3 自动登录) |
-10 | 重命名用户失败 |
-11 | 自动登录无用户数据 |
-12 | 自动登录无效用户 |
-13 | 绑定参数无效 |
-14 | Guest Facade 为空或 Session 无效 |
-15 | Uplay Facade 为空或 Session 无效 |
-17 | 登录取消 |
-18 | link 取消 |
-10000 | 游客绑定正式账号,用户通过 WebAuth 登录成功后,UbiservicesSDK 请求Ubiserver 判断该正式账号可绑定。 |
-10001 | 游客绑定正式账号,用户通过 WebAuth 登录成功后,ubiservicesSDK 请求 ubiserver 判断该正式账号不可绑定。 |
-20000 | 用户通过 WebAuth 登录成功后,UbiservicesSDK 检测本地已有 Guest 账号,让用户选择是否绑定当前 游客账号。 |
WeChat
iOS 登录报错 9999_9999,"call WX api sendReq return failure"
检查本地 INTLConfig.ini
文件中的 WECHAT_UNIVERSAL_LINK_IOS
配置。
社交
公告
为什么拉取不到公告?
- 检查是否调用 RequestNoticeData 接口。
- 检查公共是否在有效期
- 检查时区是否设置正确
- 检查语言传参是否标准
- 检查地区传参是否标准
- 检查公告配置的环境与客户端是否一致(测试/正式环境)。
修改公告后,还是拉取到旧公告
通过重启游戏或修改缓存配置 NOTICE_INTERVAL 来清除缓存公告。
无法获取葡萄牙语公告
葡萄牙语的正确语言类型传参为 pt
。更新信息,请参见公告的 [语言类型定义]。
公告上架和下架时有没有回调
公告的上架和下架时没有回调。公告需要手动获取,而不是像推送一样主动通知用户。
通过公告的哪个字段来区分自定义值
通过 ExtraData
的 INTLNoticeInfo
区分。
获取公告数据传入的参数与公告回调信息的关系
回调信息 INTLNoticeInfo
由请求参数 region
返回,公告所属内容列表 ContentList
由请求参数 langType
返回。
示例:
- 公告只配置了葡萄牙语(pt),却使用英语(en)去拉取公告,那么会拉取到一个
INTLNoticeInfo
, 但是ContentList
是空的。 - 公告配置的信息语种英语(en),信息正文却填写了葡萄牙语(pt),此时获取公告传入
en
,拉取结果会得到英语(en)和葡萄牙语(pt)两条公告。
收不到公告的 PictureList
?
INTLNoticeInfo
和 INTLNoticeContent
都包含 PictureList
。检查 PictureList
是否配置在正确的数据结构中 。
Player Network 的公告,拍脸,新闻有什么区别?
新闻不通过 SDK 拉取。弹窗和公告是一样的,玩家只需关注公告。
推送
为什么无法接收推送通知?
- 检查控制台配置,证书,打包用的
GoogleService-Info.plist
,和后台的google-services.json
文件是否一致。 - 检查网络情况并确保手机可以使用谷歌服务。
- iOS:
- 确认
Firebase
项目配置APNs
证书。 - iOS 工程添加
Push Notification capability
。 - Unity 导出的 iOS 工程
UNITY_USES_REMOTE_NOTIFICATIONS
为 1。 - 是否
RegisterPush
,弹出的推送授权窗口是否选择同意。
- 确认
- Android:
- Firebase 项目配置
keystore
指纹。 - 手机是否安装 Google Mobile Service (GMS)
- Firebase 项目配置
注册 Firebase 推送失败。
更换手机或 VPN。
用 pushToken 测试推送能收到,正式环境推送收不到。
检查是否有多次注册推送,注册推送调用1次即可。如没有请联系 Firebase 提交工单处理。
iOS Firebase 收不到推送。
因为在 info.plist
中配置了 FirebaseAppDelegateProxyEnable : NO
。这样会停用方法调配:APNs 令牌映射到 FCM 注册令牌。请参见 获取当前的注册令牌 解决问题。
iOS 用企业证书重签名后无法收到远程推送。
使用企业证书对 IPA 重新签名,即脱离了原开发证书签名,已有的推送证书与重签后的 IPA 不匹配,故而无法收到推送。
显示推送消息数量的 Icon Badge 不消失。
请根据 iOS 远程推送清除 App 角标 配置 iOS。
游戏退到后台,收不到推送回调。
游戏在前台可以收到回调,在后台回调会推送到通知栏。
iOS AddPushBaseResultObserver 也没有回调。
将 UNITY_USES_REMOTE_NOTIFICATIONS
改为 1。
本地推送收不到消息。
- 开启手机通知推送权限
- 将 Android 平台
INTLConfig.ini
里的ANDROID_LOCAL_NOTIFICATION_ENABLE
配置为 1。
Android 12系统中关闭应用后收不到本地推送。
Android 12 及以上系统对 AlarmManager
闹钟 API 增加了权限控制,Player Network SDK 使用了内部延时触发来实现推送,因此关闭应用后无法触发本地推送。
如何对不同地区实现推送不同语言的消息?
Firebase 的每条推送只能发送给一个 tag,对不同的地区发送不同语言的推送内容。
iOS 远程推送中没有显示图片。
如需在 Apple 应用中接收和处理通知图片,您必须添加通知服务扩展程序。更多信息,请参见 在通知载荷中发送图片。
Android 推送没有显示图标。
Android 推送图标需要有透明通道。
如何将推送发到未发布的游戏版本?
Firebase Messaging 可以在编辑推送时创建版本。
如何在没有 RepeatType
字段的 Android 实现重复周期推送?
Android 不支持重复周期推送。
如果玩家处在不同地区,设置的 FireTime 时间戳将如何处理时区的问题?
FireTime 时间戳为 UTC 时间,通知的推送不受玩家的时区影响。
Android SmallIcon 参数,iOS Badge 参数分别代表什么?
Android:小图标支持通过 SmallIcon 参数定制,默认使用 app icon。国内的机型系统因小图标需与 app icon 统一,故部分机型设置无效。(测试机型用 Samsung、Vivo、老款 Xiaomi 设备等,可以更改小图标)
iOS:不支持更改图标,Badge 字段是推送角标数量,默认是0,即不显示角标。
iOS 远程推送收不到,报错 Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for application"
需要在 Info.plist
文件中添加 aps-environment
属性,参考步骤:
- 在 Xcode 中打开应用的
Info.plist
文件。 - 如果
aps-environment
键不存在,点击 + 按钮以添加新键。 - 将键名设置为
aps-environment
,类型为String
。 - 根据当前环境设置键值,
development
用于开发环境、production
用于生产环境。注意苹果开发者中心的推送通知证书应该对应环境,开发证书用于开发和测试阶段,而生产证书用于发布到 App Store 后的正式版本。
- 保存
Info.plist
文件并重新构建您的应用。
WebView
Android 打不开隐私协议,提示没有许可
如果接入了米大师或配置了网络许可名单,需要把隐私协议的域名添加到 network_security_config.xml file
的许可名单中。
iOS WebView 打开报错:Could not find specified service
这个不会影响功能。
Android 机打开内置 WebView 会白屏
请使用 https://
。
Android 调用 OpenUrl
打开内置 WebView,游戏会在主线程卡住
调用 OpenUrl
接口是启动新的进程而非线程,此时 WebView 所在的进程将转到前台,而 app 切到了后台。游戏逻辑的处理方式跟游戏被切到后台的情况一样。
如何判断玩家是通过游戏内置浏览器打开 H5 页面?
可以类似通过 INTLWebViewSample.html 里的 getUserAgent
接口来获取 userAgent。如果是使用 INTLWebView 打开页面的话,会返回 INTLBrowser 的字样。
打开网页页面(OpenUrl),编码 space
时,多了 %
符号
目前调用 OpenUrl
时,encode 会把 空格
encode 成 %%20
,正常应该是 %20
。这只是日志打印错误,不会影响实际打开的 URL。如果需要使用日志里的 URL,可去掉多余的 %
。
没有接入 WebView 模块,为什么编译的时候会有 WebView 的报错?
请确认是否接入 Twitter 登录。Twitter 登录会依赖 Player Network SDK WebView 模块,只接入 Twitter,没有接入 WebView 就会有相关的报错。
INTLWebView 导致游戏窗口缩小问题
需要在 INTLConfig.ini
文件中增加2个配置:
WEBVIEW_DPI_AWARENESS_ENABLE = 0
WEBVIEW_DYNAMIC_RESOLUTION_ENABLE = 1
Web 登录器 Level Infinite 界面位置显示问题
可以把 renderMode
参数调整为 modal
模态框模式,请参见 Config 说明。
如何屏蔽分享功能?
可将 visibleShareMore
设置为 false
,或将 WEBVIEW_SHARE_CHANNEL
设置为 NONE
。
visibleShareMore
:是否显示分享功能,优先级更高,详见 Unity SDK 或 Unreal Engine SDK 的 OpenUrl 扩展字段配置。
WEBVIEW_SHARE_CHANNEL
:分享功能启用时,设置支持哪几个分享渠道,设置为 NONE
则不显示分享,详见 配置 Webview 模块。
代码示例:
visibleShareMore:false
WEBVIEW_SHARE_CHANNEL:Facebook, System
visibleShareMore:true
WEBVIEW_SHARE_CHANNEL:NONE
在 Unity 编辑器中打开网页时显示白屏且关闭按钮点击无效?
Unity 编辑器内不能使用内置浏览器,建议使用系统浏览器。
分析
Firebase Crash 后台一直没初始化
需要在客户端成功上报 1次 crash 后才会初始化 Firebase 的后台。
如何关闭 Firebase Crash 上报?
Android:
检查控制台配置,证书,.plist,和 .json 文件是否对齐。
在
AndroidManifest.xml
文件的application
部分中,添加 meta-data 标记关闭自动收集功能<meta-data
android:name="firebase_crashlytics_collection_enabled"
android:value="false" />
更多信息,请参见 自定义 Firebase Crashlytics 崩溃报告。
iOS:
在 Info.plist
文件中添加新的键值对:
- 键:
FirebaseCrashlyticsCollectionEnabled
- 值:
false
更多信息,请参见 自定义 Firebase Crashlytics 崩溃报告。
Firebase Crash 崩溃堆栈没有还原
业务需要上传一个符号表。
收不到 CrashSight 的上报
- 查看 INTLConfig.ini 中的
ANALYTICS_CRASH_CHANNEL
是否配置 CrashSight 渠道。 - 查看是否调用
InitAnalytics
。 - 查看 INTLConfig.ini 配置的上报地址。
Windows 平台的日志报错无法创建 Custom.log
文件。
这是由于对该目录没有读写权限,并且 CrashSight 目前没有提供更改路径的方法。
编辑器上报错 Unable to get ReportException function from library
。Player Network SDK 错误码:9999
、Windows 错误码:126
Crashsight 暂不支持编辑器。
Firebase 推送场景问题
客户端接入 Player Network SDK 推送后,在 Firebase 管理端配置远程推送信息,客户端就能接收到。
Firebase 提供了后台 API,业务可以自己去开发这些功能,通过后台 API 接口,让 Firebase 去发推送信息,可以发送通知到客户端。
更多信息,请参见 Firebase 后台 API 文档。
接入 Facebook iOS SDK 有 Warning 提示
如果没有配置 FacebookAutoLogAppEventsEnabled
和 FacebookAdvertiserIDCollectionEnabled
,Facebook SDK 会有 Warning 提示。
<Warning>: Please set a value for FacebookAutoLogAppEventsEnabled. Set the flag to TRUE if you want to collect app install, app launch, and in-app purchase events automatically. To request user consent before collecting data, set the flag value to FALSE, then change it to TRUE once user consent is received. Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-ios#disable-auto-events.
<Warning>: You haven't set a value for FacebookAdvertiserIDCollectionEnabled. Set the flag to TRUE if you want to collect Advertiser ID for better advertising and analytics results. To request user consent before collecting data, set the flag value to FALSE, then change it to TRUE once user consent is received. Learn more: https://developers.facebook.com/docs/app-events/getting-started-app-events-ios#disable-auto-events.
详细信息,请参见 事件上报功能的说明。
Facebook 上报需要开启 iOS App 的追踪
在 iOS 14.0 后的 Facebook 上报需要开启 iOS app 的追踪。在使用上报 Facebook 事件前,需要先调用 Unity SDK 或 Unreal Engine SDK 的 RequestTrackingAuthorization
接口。
Facebook 数据上报失败,在 Facebook App Dashboard 事件上报功能未关联到游戏应用。
由于项目账号未和公司的账号进行绑定并授权,在 Facebook Events Manager 不会显示任何数据源。请先 完成 Facebook 商务认证。
排查步骤:
检查 INTLConfig.ini 里的
ANALYTICS_REPORT_CHANNEL
和ANALYTICS_AUTH_REPORT_ENABLE
等本地配置确认本地是否上报成功,在 INTL 日志 搜索
ReportEvent with channel = Facebook, eventName =xx
更多详情,请参见 数据上报验收。
实用工具
该如何对 RequestIPInfo
接口进行测试?
可切换 VPN 区域进行测试。
iOS 无法拉起应用内评分问题
- 开发过程中,可以随时拉起评论界面。
- TestFlight 包,无法拉起评论界面。
- 上线 App Store 之后,每个用户365天之内,最多只能拉起3次评论界面。
更多信息,请参见 requestReview。
合规保障
未成年合规失败,错误码:30010
region
传参错误。请检查国家地区码,ISO 3166-1 标准,对应的三位数字码。
例如:region 传参错误,76 应该写成 076。
未成年合规失败,错误码:30004
可能合规方案未配置,请联系 Player Network 助手。
邮箱认证失败,无法点击同意按键
请清除浏览器缓存后重试。
会记录玩家选择的国家信息吗?
会,玩家选择了地区会记录到回调的 region
字段。
自我认证成功后每次启动都会询问是否已成年?
邮件认证和信用卡认证后 ParentCertificateStatusExpiration
才会有返回值,自我认证返回 ParentCertificateStatusExpiration
为 0 时直接进入游戏。
发送给家长多个邮件,以哪一个邮件认证为主?
多个家长认证邮件时,只有第一个邮件认证生效。第一个邮件认证后,其它邮件再认证将不会更改第一个邮件的家长认证状态。
在未成年认证的信用卡支付流程中,点击了隐私协议后无法返回吗?
因为信用卡支付的流程是不中断的,而用户返回会导致验证不成功,因此业务需要在隐私协议界面中增加返回按钮处理。
ComplianceQueryUserInfo
接口和 ComplianceQueryUserStatus
接口有什么区别?
虽然 ComplianceQueryUserStatus
接口和 ComplianceQueryUserInfo
接口返回的数据结构一样,返回的都是当前 Openid 的合规状态,但 ComplianceQueryUserStatus
接口还包含了设置 Region 的功能。
由于设置 Region 的功能已用其他接口来实现,所以建议使用 ComplianceQueryUserInfo
接口来查询 Openid 的合规状态。
更多信息,请参见 Unity SDK、Unreal Engine SDK 的 ComplianceQueryUserStatus
接口,和 Unity SDK、Unreal Engine SDK 的 ComplianceResult
接口。
为什么删号邮件内的用户名显示为空?
删号邮件是通过 账号注销流程 发送的,其中 user_name
字段需要传递游戏内角色的名字。如果传空字符串会导致角色名字在邮件里显示为空白,并可能引起玩家误解。
Windows
Network error 60, CURLCode for more details
CA 证书问题,可以删除 cacert.pem
文件,再到 Player Network 控制台重新下载 cacert.pem
文件。
客户端如何获取好友列表?
目前客户端仅支持 Epic 渠道获取好友列表。其他渠道需要通过后台获取,详见 Unity SDK 或 Unreal Engine SDK 的
QueryFriends
接口。