Сбрасывать достижения игр Play и странное поведение - PullRequest
0 голосов
/ 07 ноября 2018

У нас проблема с достижениями на Android. После разблокировки они снова блокируются через некоторое время. Затем после открытия приложения снова разблокируются те же достижения. Самое странное, что достижения, которые разблокируются снова и снова, различны для каждого пользователя / устройства.

Игра вышла очень давно, сейчас мы просто добавляем достижения. Мы не используем подписывание приложений в Google Play. Тем не менее, это никогда не было проблемой для Firebase и нескольких других сервисов. Одна, возможно, необычная вещь, которую мы имеем в нашей настройке, состоит в том, что у нас есть два приложения в Google Play (производственная и отладочная версия одного и того же приложения), и оба они связаны с одной и той же Игрой в игровых сервисах. Однако конечные пользователи никогда не используют оба приложения, так как приложение Debug даже не выпущено, и у них тоже есть такие же проблемы.

Кроме того, в приложении Play Games происходит нечто странное. Последний пример: после нажатия на заголовок появляется надпись «Достижения 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());
        }

Я попытался обновить SDK Play Services. Я добавил приведенный выше код, чтобы как-то «инициализировать» достижения, загружая их в первую очередь. Я пытался не разблокировать достижение, которое уже разблокировано.

Некоторые игроки получают следующую ошибку:

*** [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...
...