PlayerPrefs исчезает на некоторых устройствах Android - PullRequest
1 голос
/ 10 марта 2019

Я обнаружил на своем сервере, что некоторые пользователи регистрируются более одного раза. У меня более 3000 установок сейчас, и только некоторые из младших Android-устройств имеют такое поведение.

На клиенте (Unity 2018.2.9f1) проверка выглядит следующим образом:

if(!HasAccessToken())
    Register(); // registers the user on a server, saves the access token in prefs
else
    Login()

Эта проверка запускается из метода Start(), поэтому она не инициализируется или что-то в этом роде.

Метод HasAccessToken() - это простая проверка с использованием PlayerPrefs. Это AccessToken аксессор:

public string AccessToken {
    get { return PlayerPrefs.GetString(PlayerData.ACCESS_TOKEN_KEY, ""); }
    set { PlayerPrefs.SetString(PlayerData.ACCESS_TOKEN_KEY, value); }
}

А это HasAccessToken():

public static bool HasAccessToken(){
    string accessToken = PlayerData.Instance.AccessToken;
    return accessToken != null && !accessToken.Equals("") && accessToken != string.Empty;
}

выпуск

Некоторые устройства регистрируют вызовы несколько раз, иногда через 1 минуту, иногда через неделю, иногда 5 раз в неделю с произвольными интервалами.

Это должно произойти, только если игра переустановлена ​​(PlayerPrefs потеряно и HasAccessToken() возвращает false), и это определенное поведение, мы должны зарегистрировать его снова.

Но это происходит БЕЗ переустановки !

Откуда я знаю? Пару дней назад я изменил запрос на регистрацию и отправляю свойство LevelNumber, которое также читается из PlayerPrefs.

И на сервере ясно видно, что пользователи регистрируются на сервере со странными значениями LevelNumber (например, 15, 30, 50) и даже 0, что невозможно, потому что LevelNumber выглядит следующим образом:

public int LevelNumber {
    get { return PlayerPrefs.GetInt(PlayerData.CURRENT_LEVEL_NUMBER, 1); }
    private set { PlayerPrefs.SetInt(PlayerData.CURRENT_LEVEL_NUMBER, value); }
}

и единственная операция записи: LevelNumber = LevelNumber + 1.

Вот почему я предполагаю, что это неправильное поведение некоторых Unity или Android.

PlayerPrefs.Save ()

Я никогда не использовал это ни в одной из моих предыдущих игр, и у меня никогда не было проблем из-за этого.

Может ли это быть проблемой? Кажется, нет, потому что вчера я опубликовал обновление с PlayerPrefs.Save () в некоторых местах (после сохранения токена, завершения уровней), и у меня все еще есть клиенты, регистрирующиеся несколько раз (с новым, обновленным клиентом).

...