调用名称:SystemInfo.deviceUniqueIdentifier
官方描述:设备唯一标识符(A unique device identifier. It is guaranteed to be unique for every)
漏洞等级:★★★★★★★★★★★★ (Blocker 崩溃级)
额外属性:变身功能(多个唯一标识符)
造成后果:由于单机游戏加密取此函数做为密钥的一部分,IOS平台更新包(覆盖安装)之后惊现密钥异变,于是乎出现玩家数据丢失的类似幻术的情况,此时试想一下:一个充了几千块钱的用户更新了游戏,发现要从头开始玩,求此用户的心理阴影。用户流失,严重的来个差评。
出现平台:IOS
总之,这些由血与泪铺成的教训还是写出来的比较好。
还有诸如加密插件一类封装取ID方法的,都已经过作者处理认定为扯蛋
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public static string GetDeviceID() { string deviceID = ""; #if UNITY_IPHONE #if UNITY_5_0 deviceID = UnityEngine.iOS.Device.vendorIdentifier; //这里为空,平台IOS9.2,iphone6 #else deviceID = iPhone.vendorIdentifier; //不想试了,估计跟上面一样 #endif #endif if (String.IsNullOrEmpty(deviceID)) deviceID = SystemInfo.deviceUniqueIdentifier; return CalculateChecksum(deviceID); } |
其实也不能完全说是插件的问题,早在几年前IOS是开放了取ID功能了。
个人认为Unity提供此接口没有处理好,哪怕来个空也好。
这种取设备ID的方法无非是想防止用户存档破解游戏,所以解决方法还是换一种方案,建议弃用。
Android 6.0 也有BUG:
http://forum.unity3d.com/threads/systeminfo-deviceuniqueidentifier-android-6-0.367028/ 所有玩家共用一个存档了。
http://ask.manew.com/question/39577 这位也是上线后。可惜无人回答
vendor id 和 idfa 都不适合做玩家唯一id,最好还是取 gamecenter
真是天坑!
他奶奶的我正好中招了。。。赶紧去掉重新上传个新版。。。
新年快樂,請問應改用什麼方法才好??