Я обнаружил на своем сервере, что некоторые пользователи регистрируются более одного раза. У меня более 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 () в некоторых местах (после сохранения токена, завершения уровней), и у меня все еще есть клиенты, регистрирующиеся несколько раз (с новым, обновленным клиентом).