跳到主要内容

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 SDKUnreal Engine SDKUpdateCountryList 接口。

  1. 联系 LI PASS 接口人提单修改国家/地区列表。
  2. 利用研发提供的 AssetBundle 文件来覆盖替换目录 {Project}\Assets\StreamingAssets\INTLGameNative\ 下的 AssetBundle 文件。
在 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 SDKUnreal Engine SDKSetDefaultUserStorage 接口。

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_URLACCOUNT_URL 环境信息不一致所导致。修改 INTLConfig.ini 配置文件后,如仍然未生效,建议删除 LOG 路径下的下列缓存文件:

  • ApasRemoteConfig
  • IntlCustomConfig.tmp
  • IntlRemoteConfig
  • LipassRemoteConfig
如何禁用 LI PASS 用到的 LuaProfiler 性能检测工具?
  1. LevelInfinite.uplugin 文件里 LISluaProfile 的内容删除后,LuaProfiler 不再运行
    图片

  2. 删除对应 LuaProfiler 代码的文件夹
    图片

调用 INTLAPI.SetAuthEncryptData 在调试模式下启动游戏导致 Unity 崩溃。

在初始化 LI PASS 之前需要先初始化 Player Network SDK。

登录鉴权

登录失败的常见问题

先检查网络情况,排除是由于网络不稳定造成的登录失败后,根据系统时间排查 Player Network SDK 日志。

  • 日志上找到 method_id 为 102 或 101 的记录。

    {"ret":0,"msg":"success","method_id":102,"ret_code":0,"ret_msg":"Success",...}
  • ret_code 为客户端错误码,请参见 客户端错误码.

  • "ret_code":9999 时为第三方渠道错误,请参见 第三方渠道错误码

  • "ret_code":5 时为后台错误,请参见 后台错误码

账号数据能清档吗?

测试环境可以联系 Player Network 助手清档。
正式环境账号数据无法清档。

绑定账号成功后如何获取已绑定账号的信息?

登录成功后,调用 QueryUserInfo 回调结果 INTLAuthResultBindList 即为已绑定账号的信息。

可以绑定两个相同渠道的账号吗?例如,一个游客绑定2个 Facebook 账号,或者 Facebook 账号绑定另1个 Facebook 账号?

不可以,每个渠道只能绑定一个账号。

绑定失败,错误码:retCode: 5thirdCode: 1403

可能是以下的原因造成的:

  1. 已绑定过该渠道的账号
  2. 被绑定的账号已被绑定过
  3. 被绑定的账号登录过

通过查询已绑定账号的信息,如果 BindList,里没有被绑定渠道的账号信息则导致的原因为 2 或 3,否则是 1。

游客账号链接到渠道账号后, OpenID 会改变吗?

不会,OpenID 不会更改。

卸载游戏后游客账号会重置吗?

SDK V1.7 及之后的版本不会有这个问题,可调用 ResetGuest 重置账号。V1.6 及之前的版本,卸载游戏时将重置账号。

第三方渠道授权成功后绑定失败会无法切换账号,也无法登出

请清理浏览器数据后在浏览器登出第三方渠道账号,然后清理应用数据,再尝试绑定。

删号的 intl_cluster 是什么参数?

INTLConfig.iniINTL_URLbase64URL 编码。

怎么清除 Android 游戏的缓存?

不同手机的操作顺序不同,下文中以 Google Pixel 4a 手机为例展示清除游戏缓存的步骤。

  1. 打开手机找到 设置
  2. 选择 存储 > 内部共享存储空间 > 游戏 然后选择要清除缓存的游戏。
  3. 点击 清除存储空间清除内存
[Unity] MiniJson 反序列化拿到的 INTLAuthResult 为空

查看 Unity 的 Project Setting 下的 Managed Stripping Level 是否是 low。如果必须使用其他级别,请联系 Player Network 助手。

同一个第三方账号在不同环境的环境下生成的 OpenID 是否一样?

不一样,同一个第三方账号在不同环境会生成不同的 OpenIDs。

自动登录失败,错误代码: retCode: 5thirdCode: 11002

自动登录失败,因为登录令牌已过期并删除 (默认登录后30天)。 玩家必须重新登录。 收到错误,游戏可再次提升登录界面以允许玩家重新登录。

UI 界面,密码框和背景融为一体问题。

UIRoot 中设置 ForceVolatile

网页游戏配置问题

请检查下 Facebook 管理端是否有填写图中的 Website 配置,该配置代表游戏有网络版本。如果没有网络版本,请删除该配置。如果填写不正确,游戏会遭到 Facebook 禁用下架。

图片:Facebook 管理端

[iOS] 系统分享到 Facebook 显示的图片不是 ImagePath 的图片。

iOS 系统分享对内容处理的流程导致。因为同时提供了 LinkImagePath 图片,iOS 先从 Link 里面获取到了一个图片。

[System] 同时分享文本,链接和图片,但文本不显示。

有图片或链接时,文字就不显示了,文字需要手动输入。

[Discord]查询好友的时候,拉取的信息是不是仅限于同玩好友?

不是,Discord 查询的是平台好友,不是同玩好友。

[Discord]多商店渠道包,如果每个渠道包的 Discord appid 不同,Discord 获取的好友是不是每个渠道包的数据是隔离的?

不是。

登录为什么不触发回调?

调用回调逻辑有问题:

  1. 打开界面的时候需要监听 AuthResultObserver 方法。

    public override void Start()
    {
    base.Start();
    INTLAPI.AddAuthResultObserver(OnAuthResultEvent);
    }

    更多信息,请参见 AuthResultObserver

  2. 初始化需调用这个接口:

    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();
    }
登录报错 5_14015_30004
  • 缺少 LIP 后台配置,可联系 Player Network 助手。
  • 检查下合规配置和合规接口开关。
游客登录失败,错误代码:retCode: 5thirdCode: 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:5msg: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 后重装来解决问题。

图片: keychain

更多详情,请参见 钥匙串安全同步

PC 端登录失败,请求网络 API 返回错误代码:ret:77msg: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:28msg:the timeout time was reached

可以尝试以下排查步骤:

  • 检查网络连接,确保网络稳定,或尝试重启路由器。
  • 清除浏览器缓存和 cookies,或尝试使用无痕模式。
  • 尝试使用不同的浏览器或设备。
  • 如果使用 VPN,关闭 VPN 后重试。
  • 检查服务器状态,例如查看相关状态页面来确认服务是否正常运行。
  • 稍后再重试登录,服务器在负载高时可能会导致超时问题。

Apple

Apple 代码错误

有关 Apple 错误代码的更多信息,请参见 Apple 错误代码(ASAuthorizationError

有关所有的渠道错误代码,请参见 渠道错误代码

登录失败,代码错误: 4
  • 检查 UnityFramework 内是否含有 INTLSDK.bundle
  • 检查 Unity-iPhone 内是否含有 INTLSDK.bundle
登录失败,代码错误: retCode: 5thirdCode: 1202

检查 Player Network 中的渠道配置 BundleID 是否正确。BundleID 格式应类似于 com.company.name

登录失败,代码错误: retCode: 5thirdCode: 1006msg:invalid gameid or channelid
  • 检查 iOS INTLConfig.ini 中的 SDK 环境 配置是否正确。
  • 检查 登录和账号服务 渠道信息是否在 Player Network 中配置正确。
Apple 登录器支持横屏或屏幕自动旋转吗?

Apple SDK 不支持横屏设置或屏幕自动旋转。

如何获取 Key IDPrivateKey?

KeyStore 内注册好项目的发布证书和开发者证书后,需要联系 O2000(Oteam 统一技术支持)申请开通 AppleID 为应用的登录方式。 操作完成后将获得 Key IDPrivateKey,在 KeyStore 内刷新证书后把对应的 Key IDPrivateKey 配置到 Player Network SDK 后台即可。

登录失败,代码错误:retCode: 9999thirdCode: 1000msg: Error Domain=com.apple.AuthenticationServices.AuthorizationError

排查步骤:

  1. 检查 Entitlements 文件中的 com.apple.developer.applesignin 是否配置正确。
  2. 检查 provision 文件签名配置。

DMM

DMM 错误代码
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;
}
}
}
错误代码错误信息
300获取 DMM 成员 ID 失败
400错误请求
403OAuth 验证失败
500DMM 游戏平台错误
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:5thirdCode: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 登录允许列表中。设置允许列表

  1. Server Editor 页面,点击 Whitelist

    图片:SetAllowList

  2. 在弹出的 Select Whitelist 中,选择区域的允许列表。

图片:SelectAllowList

注意

为每个区域配置一个允许列表。该允许列表用于整个区域。

Whitelist 页面,添加、删除和编辑允许列表内容。

Facebook 登录功能已禁用弹出提示:为确保账号安全,浏览器嵌入的 Facebook 登录功能已被禁用。

Images:Auth6_6

安装 Facebook 应用程序并登录。如果用户需要通过浏览器登录,Facebook 要求用户安装支持自定义标签的浏览器,如 Chrome 浏览器。

如何更改 Facebook 同意屏幕上显示的应用程序名称?

Facebook 应用配置 页面上进行更改。

图片:Change Facebook app name

Facebook 登录失败,提示 "App not active" 错误。

Images:Auth6_8

如果游戏已准备发布,请将 App ModeDevelopment 更改为 Live。更多信息,请参见 发布检查表 - Facebook

如果游戏正在进行内部测试,请将所需用户添加为 Testers。更多信息,请参见 入门指引 - Facebook - 添加用户权限

Facebook 登录失败,网页登录成功,但报告了错误 "Invalid Claims"。
  1. 确保已填写以下必填字段。

Images: Add Application Platform Images: Facebook Login for Gaming Settings

  1. 检查 appid 是否有错误和空格。
如何生成 Facebook 密钥哈希(Key Hash)?

当您的应用程序发布到商店时,与 Facebook 的集成可能无法正常工作,除非在您的 Facebook 应用程序 ID 中生成发布密钥哈希 并添加到 Android 设置中。这将保证 Facebook 与您的应用程序之间的信息交换是经过验证的。

如需了解更多信息,请参见 创建发布密钥哈希

图片:Facebook key hash

  • 从 Google Play 获取应用程序签名密钥散列

    谷歌的 Play App Signing不提供密钥库,而在 Facebook 上配置则需要密钥库来生成密钥哈希值。请按照以下步骤获取 Facebook 所需的哈希值:

    1. 打开 Google Play Console 并选择 Release > Setup > App integrity

    2. App signing key certificate 部分,复制 SHA-1 值。

      图片:App Signing

    3. 打开 Windows 上的 Terminal/Bash(例如 Git Bash),输入以下命令获取哈希值。

      echo {INTL_SHA-1_KEY} | sed s/\\://g | xxd -r -p | base64
  • 从密钥库获取 APK 密钥散列

    警告

    APK 密钥散列仅用于 APK 测试。公开发布时请使用 Google Play 应用程序签名密钥散列

    要为密钥存储生成哈希值,请运行以下命令:

    keytool -list -printcert -jarfile [path_to_your_apk] | grep "SHA1: " | cut -d " " -f 3 | xxd -r -p | openssl base64

    确保使用首次创建密钥时设置的密码。

  • 从 APK 软件包获取 APK 密钥散列

    警告

    APK 密钥散列仅用于 APK 测试。公开发布时请使用 Google Play 应用程序签名密钥散列

    要为密钥存储生成哈希值,请运行以下命令,并相应替换密钥存储的 KEY_ALIASKEY_PATH

    keytool -exportcert -alias <KEY_ALIAS> -keystore <KEY_PATH> | PATH_TO_OPENSSL_LIBRARY\bin\openssl sha1 -binary | PATH_TO_OPENSSL_LIBRARY\bin\openssl base64

    确保使用首次创建密钥时设置的密码。

  • 将密钥哈希值复制到 Facebook

    该命令将生成一个28个字符的字符串。将密钥哈希值复制并粘贴到 Facebook app ID 中的 Android 设置中。

    图片:Facebook key hash

    检查 Facebook 应用 ID 中的 Android 设置是否也包含正确的 Android 软件包名称和主活动类。

Facebook 登录提示 “登录出错”。

keyhash 配置错误。

图片:Facebook 密钥散列

  1. 检查 Facebook 应用面板是否配置了 keyhash
  2. 确认 keyhash 是否计算正确
  3. 如果使用了 Google 商店,Google 也需要更新签名密钥
Facebook APP 登录报错 9999-309(iOS)和 9999 -1(Android)。

因手机更改了自定义事件,导致 Facebook 安全校验不通过返回 Invalid ID token from login response。在手机设置中找到日期和时间设置,并打开自动设置时间。

图片:Facebook 登录

iOS Facebook 分享链接成功,但是分享图片失败,而且在 Facebook app 个人页面看不到分享的图片
  • 确认 Facebook 开发者管理平台配置的 app 名称与 INTLConfig.iniFACEBOOK_DISPLAYNAME 完全一致。

  • Facebook 官方对 app 名称没有给出明确的要求,建议不要使用特殊符号。

图片: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。

    图片:app 名称

  • 通过 demo 的功能来测试手机上是否安装了 app:

    1. 选择 Tool > isAppInstalled
    2. channel 输入包名,extraJson 不用填。
      例如测试 Facebook,输入:com.facebook.katan
iOS 如何修改 Facebook 渠道登录同意页面的应用程序名称?

Facebook iOS SDK,用的是 ASWebAuthenticationSession 实现鉴权。
苹果官方 ASWebAuthenticationSession 内的设置读取 Xcode 工程的 TargetName 来展示,而并非 CFBundleName/CFBundleDisplayName
因此,如果要调整这个展示名字,只能修改 Xcode 工程的 Target 名字。

有关 ASWebAuthenticationSession 的讨论,请参见 ASWebAuthenticationSessionSFAuthenticationSession 的显示名字问题

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 版本关系说明

Image: Facebook sdk upadate

有关问题的更多信息,请参见 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

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;
}
}
}
Game Center 登录或绑定后没有回调

Game Center 规定,如果用户三次取消登录或绑定操作,将无法打开 Game Center 登录界面。

只有当游戏进程调用 Game Center 登录或绑定 API 时,才会在第一次请求时返回回调。因此,当用户无法在游戏内打开 Game Center 登录框时,需要返回 Settings > Game Center 手动登录 Game Center。

Garena

登录失败,响应超时。

检查日志中的 requestExchangeFacebookToken 是否成功返回。如果返回失败,请联系 Garena 的负责人。

登录经常超时,如何修改登录超时时间?

登录超时的默认值是30秒。请通过 INTLConfig.iniSDK_AUTH_OVERTIMEWEB_AUTH_OVERTIME 设置登录超时时间。
SDK_AUTH_OVERTIME 是拉起应用登录,WEB_AUTH_OVERTIME 是拉起网页登录。建议两个同时都配置。

Google

Google 常见问题
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;
}
}
}
ConnectionResult
错误代码错误信息
5无效账号
7网络错误
10配置错误
13被用户取消
16请求的 API 已禁用。

更多信息,请参见 ConnectionResult

GamesActivityResultCodes
错误代码错误信息
10001重新连接 GoogleApiClient。
10002登录失败。
10003用户未获得游戏授权。
10004Gaming 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,可能由以下问题引起。

  1. 配置问题:

    • 检查 Google 配置和 Player Network 配置是否对齐。 图片:Google Console Android Application

    • 检查 INTLConfig.ini 中的 GOOGLE_CLIENT_KEY_ANDROID 是否包含 Google Console 的 Web Client ID。

    • 检查安装包名称和 SHA-1 是否与 Google 配置一致。

  2. Android Google 商店 AAB 软件包重新签名导致的登录配置问题:

    从商店安装时,由于 Google Play 的签名配置中启用了重新签名,实际下载的 AAB 软件包签名可能与原始的 SHA-1 设置不一致。Google Play 中的签名配置必须设置为与软件包开发时的签名一致。

    1. 要更新 Google Play 的 App signing key certificate,请选择左侧的 Setup > App integrity
    2. 选择 App signing
    3. 点击 Request key upgrade图片: Google Console Android Application
    4. 选择 Upload a new app signing key from Java keystore
    5. 按照 Google 提供的步骤,下载生成密钥的工具并上传生成的 ZIP key 文件
    6. 上传后,点击右下角的 Upgrade > Upgrade Google signing key certificate图片: Google Console Android Application
返回的头像是否用于 Google 账号登录?

Player Network SDK 将返回 Google 头像。请参见 Unity SDKUnreal Engine SDKAuthResult 接口的 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] 中进行更改。

图片:Change Google app name 图片:Change Google app name 图片:Change Google app name

Google 登录授权错误 Error 400: redirect_uri_mismatch

图片:Change Google app name

可能是应用程序设置中的重定向 URI 与授权重定向 URI 不匹配,或者您使用的 URI 不是您在 Google API 控制台 中为客户端 ID 指定的 URI

图片:Change Google app name

Google 登录报错 1281

idtoken 过期。Google 登录后拿到 idtokenidtoken 本身包含 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 页面进行更改。

图片:修改 LINE 应用名字

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 初始化函数并没有详细区分错误类别,请按照以下步骤尝试排查:

  1. 确认 Steam 客户端是否已启动并登录。
  2. 确认所使用的 Windows 账号持有管理员权限。
  3. 卸载重装 Steam 客户端、更换设备。
  4. 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 响应和错误代码

有关所有的渠道错误代码,请参见 渠道错误代码

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;
}
}
}
在 Android 设备上,如果用户登录 Twitter 后注销,下次登录时再点击注册,则会报告网络错误。

出现这种情况是因为 https://.api.twitter 的 cookie 尚未清除。在 Android 设备上,只能通过 RemoveAllCookie 方法清除 cookie,但这会删除所有网站的 cookie 信息。此问题目前尚未解决。

Twitter 登录界面持续显示 "Loading"。
  • 检查 Twitter 控制台是否配置了回调允许列表。
  • 检查 Player Network keysecret 是否正确。
如何更改 Twitter 同意页面上显示的应用程序名称?

Twitter App Configuration 页面上进行更改。

图片:Change Twitter app name

当短时间内分享太多时,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:9999third_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 错误代码
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绑定参数无效
-14Guest Facade 为空或 Session 无效
-15Uplay Facade 为空或 Session 无效
-17登录取消
-18link 取消
-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 配置。

社交

客户端如何获取好友列表?

目前客户端仅支持 Epic 渠道获取好友列表。其他渠道需要通过后台获取,详见 Unity SDKUnreal Engine SDKQueryFriends 接口。

Twitter 分享失败,错误 -1011NSLocalizedDescription=Request failed: unauthorized (401)

如果在 Twitter 开发者平台将权限从 Read and write 修改为 Read,玩家将不能分享内容。

  1. 进入 Twitter 开发者平台的 Permissions 页面。

  2. 单击 编辑

    图片: Twitter 管理配置

  3. Access permission 下,选择 Read and write 并点击 Save

    图片: Twitter 管理配置

  4. Twitter 重新生成 access token 和 access token secret。
    由于 access token 和 access token secret 的改动,玩家需重新打开 Twitter 并登录后才可以重新分享内容。

图片: Twitter 管理配置

在 iOS 平台的 Facebook 分享视频失败(401)

INTLFriendReqInfoHelper.cs 文件丢失。

图片: Twitter 管理配置

[iOS-Facebook-ShareVideo]输入自定义视频路径且放进了对应的视频后会分享会报错 ret:"2"。不点自定义设置视频路径直接分享视频可以成功。尝试使用分享成功时的视频路径,在自定义路径那里输入后分享,还是会有错误 ret:"2"
  1. 游戏必须注册 Facebook Gaming Services 才能使用视频分享功能。
  2. 视频分享,需要在扩展字段传入 extrajson={"isAssetURL":"0","mode":1})
小米手机分享页面显示错误,也无法下拉

MIUI 11, MIUI 12 的手机出现了问题,其他机型分享正常。

iOS 无法在分享内容时启动 Facebook 应用程序

有中文版 iOS 11/12 的电话有这个问题。其他模型都可以。

在 iOS 平台系统分享图片到 WhatsApp,支持同时分享文字和图片信息吗?

不支持。必须删除 description,只分享图片。

iOS 平台系统分享,打开 Instagram 分享界面后,为什么会无法点击右上角的 “取消” 按钮关闭分享界面?

这是 Instagram iOS 系统分享功能在横屏模式下的一个已知 bug,在 iOS 16 及之前版本的部分设备中可能会出现该问题,需要 Instagram 后续版本修复该问题。 INTLInstagram 分享插件的 SendMessage 发送链接功能,使用了 Instagram iOS 系统分享,所以也会有这个问题。

公告

为什么拉取不到公告?
  • 检查是否调用 RequestNoticeData 接口。
  • 检查公共是否在有效期
  • 检查时区是否设置正确
  • 检查语言传参是否标准
  • 检查地区传参是否标准
  • 检查公告配置的环境与客户端是否一致(测试/正式环境)。
修改公告后,还是拉取到旧公告

通过重启游戏或修改缓存配置 NOTICE_INTERVAL 来清除缓存公告。

无法获取葡萄牙语公告

葡萄牙语的正确语言类型传参为 pt。更新信息,请参见公告的 [语言类型定义]

公告上架和下架时有没有回调

公告的上架和下架时没有回调。公告需要手动获取,而不是像推送一样主动通知用户。

通过公告的哪个字段来区分自定义值

通过 ExtraDataINTLNoticeInfo 区分。

获取公告数据传入的参数与公告回调信息的关系

回调信息 INTLNoticeInfo 由请求参数 region 返回,公告所属内容列表 ContentList 由请求参数 langType 返回。

示例:

  • 公告只配置了葡萄牙语(pt),却使用英语(en)去拉取公告,那么会拉取到一个 INTLNoticeInfo, 但是 ContentList 是空的。
  • 公告配置的信息语种英语(en),信息正文却填写了葡萄牙语(pt),此时获取公告传入 en,拉取结果会得到英语(en)和葡萄牙语(pt)两条公告。
收不到公告的 PictureList

INTLNoticeInfoINTLNoticeContent 都包含 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 推送失败。

更换手机或 VPN。

用 pushToken 测试推送能收到,正式环境推送收不到。

检查是否有多次注册推送,注册推送调用1次即可。如没有请联系 Firebase 提交工单处理。

iOS Firebase 收不到推送。

因为在 info.plist 中配置了 FirebaseAppDelegateProxyEnable : NO。这样会停用方法调配:APNs 令牌映射到 FCM 注册令牌。请参见 获取当前的注册令牌 解决问题。

图片:APNs_Token

iOS 用企业证书重签名后无法收到远程推送。

使用企业证书对 IPA 重新签名,即脱离了原开发证书签名,已有的推送证书与重签后的 IPA 不匹配,故而无法收到推送。

显示推送消息数量的 Icon Badge 不消失。

请根据 iOS 远程推送清除 App 角标 配置 iOS。

游戏退到后台,收不到推送回调。

游戏在前台可以收到回调,在后台回调会推送到通知栏。

iOS AddPushBaseResultObserver 也没有回调。

UNITY_USES_REMOTE_NOTIFICATIONS 改为 1。

本地推送收不到消息。
  1. 开启手机通知推送权限
  2. 将 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 可以在编辑推送时创建版本。

图片:Firebase 推送创建版本

如何在没有 RepeatType 字段的 Android 实现重复周期推送?

Android 不支持重复周期推送。

如果玩家处在不同地区,设置的 FireTime 时间戳将如何处理时区的问题?

FireTime 时间戳为 UTC 时间,通知的推送不受玩家的时区影响。

Android SmallIcon 参数,iOS Badge 参数分别代表什么?

Android:小图标支持通过 SmallIcon 参数定制,默认使用 app icon。国内的机型系统因小图标需与 app icon 统一,故部分机型设置无效。(测试机型用 Samsung、Vivo、老款 Xiaomi 设备等,可以更改小图标)

iOS:不支持更改图标,Badge 字段是推送角标数量,默认是0,即不显示角标。

图片: Push UI 图片: Push UI

iOS 远程推送收不到,报错 Error Domain=NSCocoaErrorDomain Code=3000 "no valid 'aps-environment' entitlement string found for application"

需要在 Info.plist 文件中添加 aps-environment 属性,参考步骤:

  1. 在 Xcode 中打开应用的 Info.plist 文件。
  2. 如果 aps-environment 键不存在,点击 + 按钮以添加新键。
  3. 将键名设置为 aps-environment,类型为 String
  4. 根据当前环境设置键值,development 用于开发环境、production 用于生产环境。
    注意

    苹果开发者中心的推送通知证书应该对应环境,开发证书用于开发和测试阶段,而生产证书用于发布到 App Store 后的正式版本。

  5. 保存 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 的字样。

图片: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 SDKUnreal 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 提示

如果没有配置 FacebookAutoLogAppEventsEnabledFacebookAdvertiserIDCollectionEnabled,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 的追踪

Image: Facebook iOS app tracking

在 iOS 14.0 后的 Facebook 上报需要开启 iOS app 的追踪。在使用上报 Facebook 事件前,需要先调用 Unity SDKUnreal Engine SDKRequestTrackingAuthorization 接口。

Facebook 数据上报失败,在 Facebook App Dashboard 事件上报功能未关联到游戏应用。

由于项目账号未和公司的账号进行绑定并授权,在 Facebook Events Manager 不会显示任何数据源。请先 完成 Facebook 商务认证

排查步骤:

  1. 检查 INTLConfig.ini 里的 ANALYTICS_REPORT_CHANNELANALYTICS_AUTH_REPORT_ENABLE 等本地配置

  2. 配置 Facebook 上报

  3. 确认本地是否上报成功,在 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 SDKUnreal Engine SDKComplianceQueryUserStatus 接口,和 Unity SDKUnreal Engine SDKComplianceResult 接口。

为什么删号邮件内的用户名显示为空?

删号邮件是通过 账号注销流程 发送的,其中 user_name 字段需要传递游戏内角色的名字。如果传空字符串会导致角色名字在邮件里显示为空白,并可能引起玩家误解。

账号注销示例截图

Windows

Network error 60, CURLCode for more details

CA 证书问题,可以删除 cacert.pem 文件,再到 Player Network 控制台重新下载 cacert.pem 文件。