手机的唯一标识码在unity里面怎么获取

手机的唯一标识码在unity里面怎么获取,第1张

可以使用wifi设备的mac地址吧 应该是唯一不重复的。
SystemInfodeviceUniqueIdentifier 返回机器码可以获取android 或者ios的机器码。好像ios7不行,会获取到一个字符串,貌似不唯一

使用下面的函数:

public static String getDeviceId(Context context) {
    String id;
    //androidtelephonyTelephonyManager
    TelephonyManager mTelephony = (TelephonyManager) contextgetSystemService(ContextTELEPHONY_SERVICE);
    if (mTelephonygetDeviceId() != null) {
        id = mTelephonygetDeviceId();
    } else { 
        //androidproviderSettings; --解决在android 70的情况下,有权限getDeviceId()返回null的情形
        id = SettingsSecuregetString(contextgetApplicationContext()getContentResolver(), SettingsSecureANDROID_ID);
    }
    return id;
}

要注意的是记得要在你的AndroidManifestxml中,要求以下权限:

<!-- 用于读取手机当前的状态-->
<uses-permission android:name="androidpermissionREAD_PHONE_STATE" />

在手机拨号盘界面输入#06# ,就可以获取当前手机的IMEI串号。
当然也可以直接打开手机后盖,拆下电池,就可以在内部标签上找到IMEI串号。
还有一种方法就是查看通过手机参数进行查看。点击“启动程序”按钮,然后点击“设置”→“关于手机”→“状态消息”,就可以查看到本机IMEI号。

DEVICE_ID
这是Android系统为开发者提供的用于标识手机设备的串号,也是各种方法中普适性较高的,可以说几乎所有的设备都可以返回这个串号,并且唯一性良好。
这个DEVICE_ID可以同通过下面的方法获取:
TelephonyManager tm = (TelephonyManager)getSystemService(ContextTELEPHONY_SERVICE); String DEVICE_ID = tmgetDeviceId();
它会根据不同的手机设备返回IMEI,MEID或者ESN码,但在使用的过程中有以下问题:
非手机设备:最开始搭载Android系统都手机设备,而现在也出现了非手机设备:如平板电脑、电子书、电视、音乐播放器等。这些设备没有通话的硬件功能,系统中也就没有TELEPHONY_SERVICE,自然也就无法通过上面的方法获得DEVICE_ID。
权限问题:获取DEVICE_ID需要READ_PHONE_STATE权限,如果只是为了获取DEVICE_ID而没有用到其他的通话功能,申请这个权限一来大才小用,二来部分用户会怀疑软件的安全性。
厂商定制系统中的Bug:少数手机设备上,由于该实现有漏洞,会返回垃圾,如:zeros或者asterisks
MAC ADDRESS
可以使用手机Wifi或蓝牙的MAC地址作为设备标识,但是并不推荐这么做,原因有以下两点:
硬件限制:并不是所有的设备都有Wifi和蓝牙硬件,硬件不存在自然也就得不到这一信息。
获取的限制:如果Wifi没有打开过,是无法获取其Mac地址的;而蓝牙是只有在打开的时候才能获取到其Mac地址。
获取Wifi Mac地址:
获取蓝牙 Mac地址:
Sim Serial Number
装有SIM卡的设备,可以通过下面的方法获取到Sim Serial Number:
TelephonyManager tm = (TelephonyManager)getSystemService(ContextTELEPHONY_SERVICE); String SimSerialNumber = tmgetSimSerialNumber();
注意:对于CDMA设备,返回的是一个空值!
ANDROID_ID
在设备首次启动时,系统会随机生成一个64位的数字,并把这个数字以16进制字符串的形式保存下来,这个16进制的字符串就是ANDROID_ID,当设备被wipe后该值会被重置。可以通过下面的方法获取:
import androidproviderSettings; String ANDROID_ID = SettingsSystemgetString(getContentResolver(), SettingsSystemANDROID_ID);
ANDROID_ID可以作为设备标识,但需要注意:
厂商定制系统的Bug:不同的设备可能会产生相同的ANDROID_ID:9774d56d682e549c。
厂商定制系统的Bug:有些设备返回的值为null。
设备差异:对于CDMA设备,ANDROID_ID和TelephonyManagergetDeviceId() 返回相同的值。
Serial Number
Android系统23版本以上可以通过下面的方法得到Serial Number,且非手机设备也可以通过该接口获取。
String SerialNumber = androidosBuildSERIAL;

WEB这东西,本来就是跨平台的东西,对于不同平台就有不同的浏览器,不同厂家的浏览器又不太一样。

尤其这种比较偏的底层接口。

2就拿开发Android的WEB浏览器常用的WebView,就本身N个版本,接口改了又改。

你的网页还要跨平台,不管Android,还是WindowsPhone,适应于他们的变化有多复杂,自己要三思。


3做那种混合型的App来让用户浏览自己的网站,内嵌WebView,通过JS和App交互,获取你需要的IMEI等等信息。


4单纯Web页面是无法获取IMEI,除非W3C修订JavaScript标准,增加接口,并让浏览器厂商开始支持。

5目前想获取IMEI,必须是app和Web页面相结合方式。

就如当前有个hbuilder开发工具,DCloud开发的。

6可以调用手机系统API,原理类似于Java反射技术。

他们封装的比较好。可以直接通过js调用。

7当然最后发布的不是真正的纯Web页面,是一个app安装包。

这里面的语法不是在任何浏览器都能运行的。

但发布的安装包,内部封装好的浏览器是可以支持相应的js方法。

8web请求字段的UserAgent 段里只有 *** 作系统版本,浏览器类型,浏览器内核版本这些信息,不会有其他信息。

9至于ip,只要连接到web服务器,服务器就知道了,mac地址也是。

UDID
UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可以改变设备的 UDID),移动网络可以利用 UDID 来识别移动设备。
许多开发者把 UDID 跟用户的真实姓名、密码、住址、其它数据关联起来,网络窥探者会从多个应用收集这些数据,然后顺藤摸瓜得到这个人的许多隐私数据,同时大部分应用确实在频繁传输 UDID 和私人信息。 为了避免集体诉讼,苹果最终决定在 iOS 5 的时候,将这一惯例废除。
现在应用试图获取 UDID 已被禁止且不允许上架。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/13102799.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-30
下一篇 2023-05-30

发表评论

登录后才能评论

评论列表(0条)

保存