vue.js如何获取手机唯一识别码

JavaScript018

vue.js如何获取手机唯一识别码,第1张

获取唯一识别码:Device ID唯一的设备ID,如GSM网络的IMEI,CDMA网络的MEID / ESN,可能返回null(API文档的描述)只对手机设备有效,对于不在手机网络的设备,会返回null获取到的Device ID值,即使设备恢复出厂设置也不会改变需要READ_PHONE_STATE权限某些设备的Device ID实现有bug,会返回0或*TelephonyManagertm=(TelephonyManager)getSystemService(TELEPHONY_SERVICE)StringdeviceId=tm.getDeviceId()

可以!

1、使用mobile-detect.js

2、html

<!DOCTYPEhtml>

<html>

<head>

<metahttp-equiv="Content-Type"content="text/htmlcharset=UTF-8"/>

<metaname="viewport"

content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

<title>JS获取手机型号和系统</title>

</head>

<body>

</body>

<script src="jquery.js"></script>

<script src="mobile-adapt.js"></script>

<script>

//判断数组中是否包含某字符串

Array.prototype.contains=function(needle){

for(iinthis){

if(this[i].indexOf(needle)>0)

returni

}

return-1

}

vardevice_type=navigator.userAgent//获取userAgent信息

document.write(device_type)//打印到页面

varmd=newMobileDetect(device_type)//初始化mobile-detect

varos=md.os()//获取系统

varmodel=""

if(os=="iOS"){//ios系统的处理

os=md.os()+md.version("iPhone")

model=md.mobile()

}elseif(os=="AndroidOS"){//Android系统的处理

os=md.os()+md.version("Android")

varsss=device_type.split("")

vari=sss.contains("Build/")

if(i>-1){

model=sss[i].substring(0,sss[i].indexOf("Build/"))

}

//判断是否是oppoR9s

if(model="OPPOR9s"){

alert('您的手机是OPPOR9s')

}

if(model=="MI6"){

alert('您的手机是小米6')

}

}

alert('111'+model+'2222')//打印系统版本和手机型号

</script>

</html>

最近,因公司产品及客户需要,领导让我研究免存储设备ID,以及给出一个设备ID最佳的方案(可与存储相结合)。在研究过浏览器的fingerprient2js后,颇有心得,并且看网上似乎木有完美的解决方案,于是写了这篇文章,仅供需要的开发者参考。(该算法暂未进行验证,这里先给出一个jar包,后期我会在SDK中加入调查接口,分两个jar包(测试版和正式版),希望开发者能支持测试版,稳定后使用正式版。) 在产品中,首先肯定要尽量避免权限,其次考虑卸载APP后ID不一致的问题,再就是尽量结合存储,降低卸载或重装app时,设备ID改变的概率。最后,设计出合理方案,对造成不利的因素进行列举。 A.android_id: 什么是android_id呢?当设备在第一次启动时,系统会随机产生一个64位的数字,然后以16进制的形式保存在设备上,且API提供了获取这一参数的方法: 这就是android_id,当设备重新初始化或者刷机的时候,会被重置。 除此以外,android_id还有其他的bug,比如: 1.不同的设备可能会产生相同的android_id。 2.有的厂商设备无法获取android_id,会返回null。 3.对于CDMA的设备,ANDROID_ID和TelephonyManager.getDeviceId() 的值相同。 4.不同的android系统版本稳定性不同。 B.硬件序列号(SERIAL) API给的解释是: A hardware serial number, if available.(一个硬件的序列码,如果有效的话) so,虽然我没有用几百台手机测试,也能知道这个值有时候是无效的,说的这么隐晦。 C.指纹 fingerprint:设备的唯一标识。由设备的多个信息拼接合成。 也是在JavaScript才接触到这个单词”fingerprint“,这个词也很生动,意思是能大概的标识一个设备,像指纹一样,但不排除重复的可能性。 理论上讲用这个属性是可以标识一个设备的,但是其实并不是,两台一摸一样的新手机,这个值相同的可能性是很多的。为了更加进一步的精确,后面还会介绍几个属性,并把几个属性结合在一起,生成一个接近100%的UUID。 D.android系统提供了获取android系统版本号,生产厂商,固件版本推出时间的API. E.android系统提供了当前android设备是12或24小时制显示时间的API, F.android系统提供了当前android设备的修订版本列表,显示屏,主板等等参数。 G.可以允许用户根据需求用自定义字符串去为FP做贡献,比如IP地址等 方案: 在不需要用户权限的前提下,网上最完美的方案是将android_id和硬件序列号,如果其中任意一种失效就使用另外一种。受FingerPrint2js的启发,我看了Android获取系统硬件相关的API,将所有不经常变化且能代表一定用户群体的属性都取出来进行MD5运算,包含但不限于依据中所述的信息。准确性还需进一步验证,但理论上要比FingerPrint2js准确性高,也在网上给出的比较好的方案基础上进一步缩小了FP可能重复的概率。 1.第一次进入APP时,获取系统相关配置信息生成FP,存入SP。 2.每次访问,先从SP取,没有再通过相关配置信息生成FP,存入SP。 3.封装成jar,只给用户暴露出获取ID的接口、传递自定义信息构建FP的接口以及第一次安装时间戳的接口(或设置标签调用的接口) 单纯对于FP而言,有两个主要问题需要解决,一是FP重复的问题,相同配置的新设备重复可能性极大,增多给FP贡献的因素的数量,可以有效降低重复率。二是FP改变的问题,贡献FP的生成因素的其中一个如果改变,FP就会改变。所以如果FP的贡献因素数量过多,导致FP改变的概率也就变大,所以说客户要在两者之间做一个很好的平衡。 对比: 为android FP做贡献的各配置参数:(示例以6.0的华为荣耀8为例) 1.Android_ID:Settings.System.getString(context.getContentResolver(), Settings.System.ANDROID_ID) //低版本稳定,高版本不稳定 示例:295a4fbf716094ee 2.Build.SERIAL 设备序列号(有的设备无法获取)示例:WTK7N16923005607 3.Build.FINGERPRINT设备指纹(同样的新设备该值应该是一样的) 示例:honor/FRD-AL00/HWFRD:6.0/HUAWEIFRD-AL00/C00B171:user/release-keys 4.Build.TIME 固件推出日期示例:1477442228000 5.Build.VERSION.INCREMENTAL 源码控制版本号示例: C00B171 6.Build.getRadioVersion() 获取无线电固件版本 示例:21.210.03.00.031,21.210.03.00.031 7.Build.HARDWARE 硬件名称 示例:hi3650 8.Build.VERSION.SECURITY_PATCH 用户可见安全补丁level(这里我得到的是日期,可能是补丁修复的时间)示例:2016-10-01 9.当前设备是12/24时制:Settings.System.getString(context.getContentResolver(), Settings.System.TIME_12_24) 示例:null(有的手机可以获取) 10.Build.VERSION.SDK_INT SDK版本号 (一般讲是与系统版本号一一对应的)示例:23 11.Build.SUPPORTED_32_BIT_ABIS 支持32位ABIs的列表(数值)示例:[armeabi-v7a,armeabi] 12.Build.SUPPORTED_64_BIT_ABIS 支持64位ABIs的列表(数值)示例:[arm64-v8a] 13.Build.BOOTLOADER系统启动程序版本号 示例:unknown 14.Build.VERSION.RELEASE用户可见版本示例: 6.0 16.Build.BOARD主板 示例:FRD-AL00 17.Build.BRAND 系统定制商 示例:honor 21.Build.HOST 示例:huawei-RH2288H-V2-12L 23.Build.MANUFACTURER 产品/硬件的制造商 示例:HUAWEI 25.Build.PRODUCT 产品的名称 示例:FRD-AL00 26.Build.TAGS 描述Build的标签(Comma-separated tags describing the build, like "unsigned,debug".)示例:release-keys 28.Build.USER描述Build的USER 示例:jslave 31.Build.VERSION.BASE_OS 基带版本 The base OS build the product is based on. 示例:空值 32.自定义字符串或自定义数组