设备的唯一标识符很多,这里不讨论哪种更好的问题,只是做个笔记。


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是绑定硬件的,所以不存在这个问题。回答完之后问面试官还有哪些,面试官稍微想了一下说:对,就这样。

不管是面试官自己也不知道,还是说知道也不告诉我,管他呢。今天突然又想起一个问题:如果玩家更换手机,也会造成账户丢失。哈哈,大逗比!