游客账户的创建需要与设备进行绑定,这样才不会再更新或者玩家误删文件时导致的信息丢失。
需要引入命名空间 System.Net.NetworkInformation;
设备的唯一标识符很多,这里不讨论哪种更好的问题,只是做个笔记。
windows下通过NetworkInterface读取MAC地址:
///<summary>
/// 通过NetworkInterface读取网卡Mac,电脑端使用
///</summary>
///<returns></returns>
public static string GetMacByNetworkInterface()
{
string mac = "";
NetworkInterface[] interfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface ni in interfaces)
{
mac+=ni.GetPhysicalAddress().ToString();
}
mac = mac.Substring(0,12);
return mac;
NGUIDebug.Log();
}
需要引入命名空间 System.Net.NetworkInformation;
注意一下开发环境,如果是在web环境下,这个命名空间是不支持的。
ANDROID获取DEVICE_ID
这是Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且唯一性良好。
这个DEVICE_ID可以同通过下面的方法获取:
String deviceId = ((TelephonyManager)getSystemService(TELEPHONY_SERVICE)).getDeviceId();
它会根据不同的手机设备返回IMEI,MEID或者ESN码,但在使用的过程中有以下问题:
- 非手机设备:最开始搭载Android系统都手机设备,而现在也出现了非手机设备:如平板电脑、电子书、电视、音乐播放器等。这些设备没有通话的硬件功能,系统中也就没有TELEPHONY_SERVICE,自然也就无法通过上面的方法获得DEVICE_ID。
- 权限问题:获取DEVICE_ID需要READ_PHONE_STATE权限,如果只是为了获取DEVICE_ID而没有用到其他的通话功能,申请这个权限一来大才小用,二来部分用户会怀疑软件的安全性。
- 厂商定制系统中的Bug:少数手机设备上,由于该实现有漏洞,会返回垃圾,如:zeros或者asterisks
IOS设备的唯一标识后面补充...
====================2016.8.14
因为从厦门辞职来到上海,所以,说好的IOS设备的游客账号功能一直没有做。前几天在某个工作室面试的时候,面试官问我:游客登录有什么缺点?
一脸懵逼,真没考虑过。。。
想了一会儿之后,很不坚定的说:IOS因为没有办法绑定硬件,所以可能会造成账户丢失,但是Android是绑定硬件的,所以不存在这个问题。回答完之后问面试官还有哪些,面试官稍微想了一下说:对,就这样。
不管是面试官自己也不知道,还是说知道也不告诉我,管他呢。今天突然又想起一个问题:如果玩家更换手机,也会造成账户丢失。哈哈,大逗比!