我们对Android上的成就存在疑问。解锁后,它们会在一段时间后再次锁定。然后,在打开应用程序后,相同的成就会再次解锁。最奇怪的是,对于每个用户/设备而言,一次又一次解锁的成就是不同的。
该游戏发布于很久以前,现在我们只是添加成就。我们未在Google Play中使用应用程序签名。但是,对于Firebase和多个其他服务来说,这从来不是问题。我们设置中的一件事,也许是不寻常的事情是,我们在Google Play中有两个应用程序(同一应用程序的生产和调试版本),并且它们都链接到游戏服务中的同一游戏。但是,最终用户永远不会使用这两个应用程序,因为调试应用程序甚至都没有发布,而且他们也遇到相同的问题。
此外,在Play游戏应用中发生了一些麻烦。最新示例:单击标题后,显示“ Achievments 10/28”。但是,在打开成就窗口本身后,它会显示“成就12/28”!
截屏1:
https://i.stack.imgur.com/Di917.jpg
点击“成就:
https://i.stack.imgur.com/CjBBK.jpg
如您所见,它从10/28变为12/28。在其他情况下,它类似于“外部0/28,进入后13/28”。似乎是这些成就,一段时间后重新进入应用程序便一次又一次解锁。
我们正在使用Unity 2017.3.1p1
我们在解锁成就之前使用的代码,在社交认证之后被调用:
if (Social.localUser.authenticated)
{
Log("Player authenticated, loading achievements...");
Social.LoadAchievements(x =>
{
_achievements = x;
string count = x == null ? "null" : x.Length.ToString();
Log("Achievements loaded. Count: " + count);
RefreshAchievements();
});
}
else
{
Log("Player NOT authenticated, skipping achievements.");
}
我们用于解锁成就的代码:
try
{
if (Social.localUser != null && Social.localUser.authenticated && _achievements != null)
{
var achievement = _achievements.FirstOrDefault(x => x.id == id);
if (achievement == null || achievement.completed)
{
return;
}
Social.ReportProgress(
id,
progress, success =>
{
LogDebug("Unlock achievement '" + name + "'; Success: " + success);
});
}
}
catch (Exception ex)
{
LogError("Exception while unlocking achievement", ex.ToString());
}
我尝试更新Play Services SDK。我添加了上面的代码,以某种方式通过首先加载成就来“初始化”成就。我试图不取消已经解锁的功能。
某些玩家出现以下错误:
*** [Play Games Plugin DLL] 11/07/18 19:18:54 +03:00 ERROR: Cannot refresh achievement CgkI_9Ps96kPEAIQCg: ERROR_INTERNAL
但是,并非总是如此,有时在打开几次应用程序后一次又一次解锁相同的成就,而不会出现上述错误。最奇怪的是,警告信息是在玩家成功通过身份验证后打印的,这证明以下日志仅在上面几行打印:(此日志的代码在以前的代码示例中可见)
[22.4727811] [ACHIEVEMENTS] Player authenticated, loading achievements...