PlayerPrefs在某些Android设备上消失了

时间:2019-03-10 11:00:24

标签: android unity3d save load

我在服务器上发现某些用户已被多次注册。我现在有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()的更新,并且仍然有一些客户端进行了多次注册(使用新的更新的客户端)。

0 个答案:

没有答案