精华内容
下载资源
问答
  • 设备唯一标识
    千次阅读
    2020-10-30 14:34:53

    一、IMEI

    International Mobile Equipment Identity,国际移动设备身份码,在手机组装完成后赋予的一个全球唯一的号码,由于此时IPhone只支持单卡,所以IMEI和IPhone是一一对应的

    iOS 2提供了一种方法获取IMEI,但是为了保护用户隐私,iOS 5以后苹果不再允许获取IMEI了,如果你在应用中获取IMEI,可能会遭到Apple Store的拒绝

    二、IDFA

    Identifier for Identifier,即广告标识符,多用于用户的广告追踪,是每台设备的唯一ID,IDFA存储在用户的系统上

    Apple是不允许开发者追踪用户设备的,但是为了监控广告效果,在 iOS 6中提供这个折中方案,但IDFA也会发生变化,比如重置系统、还原广告标识符等

    同时,用户也可以选择是否禁止广告追踪(即商家没办法根据用户的行为偏好推送广告)

    三、UDID

    Unique Device Identifier,即设备唯一标识,在很多需要限制一台设备一个账号的应用中经常会用到,在Symbian时代,我们是使用IMEI作为设备的唯一标识的,可惜的是Apple官方不允许开发者获得设备的IMEI

    1. 用于一些统计与分析目的;第三方统计工具如友盟,广告商如ADMOB等

    2. 将UDID作为用户ID来识别唯一用户,省去用户名、密码等注册过程

    3. UDID被弃用可以使用UUID来作为设备的唯一标识

      获取到UUID后,如果用NSUserDefaults存储,当程序被卸载后重装时,再获得的UUID和之前就不同了

      使用keychain存储可以保证程序卸载重装时,UUID不变

      但当刷机或者升级系统后,UUID还是会改变的

    四、Mac 地址

    Medium/Media Access Control,网络设备的物理地址,如果IMEI被认为是设备的唯一标识,那么Mac就是网络接口唯一标识

    学过计算机网络都知道,在根据IP进行物理寻址的时候就是使用的Mac地址

    同样由于隐私问题,在iOS 7之后无法通过Mac地址来标识唯一设备,因为在iOS 7之后获取到的Mac地址为一固定值

    五、NSUUID

    Universally Unique IDentifier,即通用唯一识别码,UUID是一个软件建构的标准,也是被开源软件基金会(Open Software Foundation,OSF)的组织在分布式计算环境(Distributed Computing Environment,DCE)领域的一部分

    UUID的目的,是让分布式系统中的所有元素都能有唯一的辨识资讯,而不需要透过中央控制端来做辨识资讯的指定

    根据以上定义可知,同一设备上的不同应用的UUID是互斥的,即能在改设备上标识应用;但是并没有明确指出能标识出装有同一应用的不同设备,据推测,这个UUID应该是根据设备标识和应用标识生成唯一标识,再经过加密而来的

    NSUUID与之前的CFUUID是一致的,只是改成了Objective-C的接口而已,NSUUID每次获取的值都会发生变化,但是它会保持唯一性

    UIDevice.current.identifierForVendor?.uuidString

    六、IDFV

    identifierForVendor,Vendor标示符,也被称为厂商标识符,只要用户的设备中没有卸载当前Vendor的所有APP,则不会发生变化

    什么是Vendor ?可以理解成bundleID的前两部分,例如对于com.joy.app_1和com.joy.app_2这两个bundleID来说,就属于同一个Vendor,共享同一个IDFV

    IDFV比较适合追踪用户行为,目前多配合Keychain来搭配使用,来保证不管是否卸载重装,IDFV都是不变的

    NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];

    七、LC_UUID

    其实这个和Device ID没什么关系,但是因为也叫UUID,防止造成误解,所以来解释下

    LC_UUID可以这么理解,是用来标示Mach-O的,如果去查看你APP的崩溃日志,你会发现应用的可执行程序和各种库都有自己的UUID,你在进行符号解析的时候,就需要找到与系统库和你APP的UUID相同的符号文件来进行堆栈地址还原

    八、结论

    想要通过UDID、Mac地址、OpenUDID来定位用户设备已经是不可能了,因为它们要么是无效,要么是受到了App Store的限制;但是如果你想要追踪广告的话,可以使用IDFA,想要用来分析用户行为可以使用IDFV + KeyChain来解决

    更多相关内容
  • 包括国内手机厂商的开放匿名标识(OAID)、海外手机平台的安卓广告标识(AAID),另外也提供了 AndroidID、GUID 等常见的设备标识的获取方法。
  • 本文介绍了浅谈android获取设备唯一标识完美解决方案,分享给大家,具体如下: /** * deviceID的组成为:渠道标志+识别符来源标志+hash后的终端识别符 * * 渠道标志为: * 1,andriod(a) * * 识别符来源...
  • 8种iOS获取设备唯一标识的方法,希望对大家有用。 UDID UDID(Unique Device Identifier),iOS 设备的唯一识别码,是一个40位十六进制序列(越狱的设备通过某些工具可以改变设备的 UDID),移动网络可以利用 UDID ...
  • 获取Android设备唯一标识
  • Android 设备唯一标识

    千次阅读 2021-11-12 10:57:43
    Android 设备唯一标识:设备信息 IMEI IMSI MEID Android ID Sim卡序列号 Serial Number adb shell getprop ro.serialno MAC地址

    Android 设备唯一标识:设备信息

    IMEI (International Mobile Equipment Identity手机串号)

    1. TAC 前8位区分手机品牌和型号的编码
      其中TAC码前两位又是分配机构标识(Reporting Body Identifier),是授权IMEI码分配机构的代码,如01为美国CTIA,35为英国BABT,86为中国TAF
    2. 第9-15位,区分每部手机的生产序列号
    3. 验证码,由前14位数字通过Luhn算法计算得出 通过拨号输入*#06#来查询

    IMSI (International Mobile Subscriber Identity)

    1. 用于区分蜂窝网络中不同用户的、在所有蜂窝网络中不重复的识别码
    2. 在GSM、UMTS和LTE网络中,IMSI来自SIM卡,在CDMA2000网络中则是直接来自手机,或者RUIM。

    在这里插入图片描述

    MEID (obile Equipment Identifier)

    CDMA手机的身份识别码 ,识别设备的,类似IMEI

    Android ID

    从Android Q即Android 10开始,第三方已经无法获取到手机的唯一设备了,包括IMEI和序列号。
    Android ID目前是Android系统提供给应用容易访问的设备ID,也叫SSAID(Settings.Secure.ANDROID_ID缩写),这个ID主要与应用/设备相关

    Android ID最大的变化是从Android8.0开始:
    https://developer.android.com/about/versions/oreo/android-8.0-changes

    ANDROID_ID的获取门槛是最低的,不需要任何权限,但哪里有十全十美的事,ANDROID_ID也存在一些缺点,就是无法保证稳定性,root、刷机或恢复出厂设置都会导致设备的ANDROID_ID发生改变。此外,我看到部分文章中有提到某些厂商定制系统的Bug会导致不同的设备可能会产生相同的ANDROID_ID,而且某些设备获取到的ANDROID_ID为null。总体来说,相比于其他几种设备标识或多或少都有被官方“照顾”过,ANDROID_ID还是比较稳定的,如果应用对于设备标识的要求不是特别高的话还是一个值得考虑的方案。

    Serial Number(设备序列号)

    获取方法:adb shell getprop ro.serialno
    

    设备序列号是手机生产厂商提供的,如果拼接上厂商名称(Build.MANUFACTURER)基本上可以保证唯一性。在Android 8.0以下版本,可以通过android.os.Build.SERIAL获取到设备序列号,同样的,这种方式在Android 8.0及以上版本被废弃了,通过Build.SERIAL在Android 8.0及以上设备获取到设备的序列号始终为“unknown”,取而代之的是使用android.os.Build.getSerial()方法。

    • Android 8.0以下:无需申请权限,可以通过Build.SERIAL获取到设备序列号
    • Android 8.0-Android 10:需要申请READ_PHONE_STATE权限,可以通过Build.getSerial()获取到设备序列号,如果用户拒绝了权限,会抛出java.lang.SecurityException异常
    • Android 10及以上:分为以下两种情况:
      targetSdkVersion<29:没有申请权限的情况,调用Build.getSerial()方法时抛出java.lang.SecurityException异常;申请了权限,通过Build.getSerial()方法获取到的设备序列号为“unknown”
      targetSdkVersion=29:无论是否申请了权限,调用Build.getSerial()方法时都会直接抛出java.lang.SecurityException异常

    MAC地址 (Media Access Control Address)

    局域网地址、以太网地址或物理地址,由48位二进制数组成。与我们熟悉的IP地址不同,mac地址只由设备的网卡决定,每个网卡都会有一个唯一的mac地址,只要不更换设备的网卡,mac地址就不会变,因此mac地址符合我们对于设备标识的要求。

    OAID (匿名设备标识符)

    在这里插入图片描述

    移动安全联盟提供的SDK
    http://www.msa-alliance.cn/col.jsp?id=120
    根据“移动智能终端补充设备标识体系”技术要求,华为、小米、OPPO、vivo、中兴、努比亚、魅族、联想、三星等设备厂商均将逐步实现本标识体系,联盟计划开发并发布支持多厂商的统一的补充设备标识调用SDK,协助移动应用开发者更便捷的访问移动智能终端补充设备标识体系,推进相关业务。

    展开全文
  • 获取设备唯一标识的例子
  • php 设备唯一标识

    2021-06-29 14:31:47
    今天遇到了一个课题,在没有用户登录信息状态下,标识设备访问次数。 以laravel为例。引入session。 大致思维,第一次访问,判断是否有key值,没有就设置key值,第二次,以至于接下去的每一次都会有key值判断。 这次...
    今天遇到了一个课题,在没有用户登录信息状态下,标识设备访问次数。

    以laravel为例。引入session。
    大致思维,第一次访问,判断是否有key值,没有就设置key值,第二次,以至于接下去的每一次都会有key值判断。
    这次是以浏览器为标识。下面上代码:

    public function address(Request $request){
    			if($request->session()->has('word')){
                $word = $request->session()->get('word');
                
                return $word;
            }else{
                $request->session()->put('word','已经不是第一次访问');
                return '第一次访问';
            }
            
        }
    
    展开全文
  • Android获取设备唯一标识

    千次阅读 2020-12-29 15:43:46
    双卡双待会有两个IMEI值,并且在Android10以后就无法获取到了,而且在模拟器中是可以修改的,所以该值无法作为识别设备唯一标识。(如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个IMEI值) ...

    一、IMEI:国际移动设备识别码的缩写,其总长为15位,每位数字仅使用0~9的数字。
    双卡双待会有两个IMEI值,并且在Android10以后就无法获取到了,而且在模拟器中是可以修改的,所以该值无法作为识别设备唯一的标识。(如果只带有Wifi的设备或者音乐播放器没有通话的硬件功能的话就没有这个IMEI值)
    IMEI的获取方式:
    1、Android6.0以前,无需任何权限通过getDeviceId()方法获取到IMEI码(GSM设备返回的是IMEI码,CDMA设备返回的是MEID码或者ESN码);
    2、Android6.0-Android8.0之间,需要申请READ_PHONE_STATE权限通过getDeviceId()方法获取到IMEI码;
    3、Android8.0及以上,可以通过getImei()方法获得(getDeviceId方法在Android 8.0及之后的版本已经被废弃了)
    4、Android10及以上,targetSdkVersion小于29的话,有权限可以获取到Imei,大于等于29就会报异常了

    二、Mac
    手机Wifi或蓝牙的MAC地址
    并不是所有的设备都有wifi和蓝牙,且需要权限,在 Android 6.0(API 级别 23)到 Android 9(API 级别 28)中,本地设备 MAC 地址(如 WLAN 和蓝牙)无法通过第三方 API 使用。WifiInfo.getMacAddress() 方法和BluetoothAdapter.getDefaultAdapter().getAddress() 方法都会返回 02:00:00:00:00:00

    三、ANDROID_ID
    可以通过 Settings.System.getString(context.getContentResolver(), Settings.Secure.ANDROID_ID)获取到,但只限于Android8.0及以上才有该方法,当设备恢复出厂设置,或者Root过的话,该值会被改变。

    四、PsuedoID
    该方式是通过拼接硬件信息获取到的,网上有很多demo,代码如下:
    代码
    该方法也无法保证唯一性,但是概率极低就是。

    解决方案:
    Android 8.0以下 判断设备唯一性可用 PsuedoID + DeviceId
    Android 8.0及以上 判断设备唯一性可用 PsuedoID + ANDROID_ID

    备注:
    1、获取DeviceId是需要权限的,如果用户用户拒绝了权限,我们可以不让使用,或者其它值代替DeviceId(暂未想到,哈哈~~)
    2、PsuedoID方法中,获取serial,在大于等于26的api中都是返回unknow(https://developer.android.com/reference/android/os/Build.html#SERIAL)
    3、谷歌建议使用AndroidID(https://developer.android.com/training/articles/user-data-ids)

    展开全文
  • Android 设备唯一标识(适配Android版本)

    千次阅读 多人点赞 2020-12-12 10:26:01
    设备唯一标识前言正文1. 唯一标识的含义2. 新建项目3. 项目配置4. Android 5.05. Android 6.06. Android 8.07. Android 10.08. 解决方案总结 前言   相信在看这篇文章之前你已经看过一些类似的文章了,那么你...
  • 如何获取Android设备唯一标识码教程

    千次阅读 2020-12-18 20:37:54
    ID是表示着标签的身份,在JS脚本中会用到id,当JS要修改一个标签的属性时,JS会将id名作为该标签的唯一标识进行操作。也就是说ID只是页面元素的标识,供其他元素脚本等引用。概述有时需要对用户设备进行...
  • Unity3d获得android和ios设备唯一标识-附件资源
  • 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码。虽然Android系统中提供了这样设备识别码,但是由于Android系统版本、厂商定制系统中的Bug等限制,稳定性和唯一性并不理想。而通过其他...
  • 关于Android设备唯一标识符号前言由于在开发中需要开发游客模式,在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备的唯一标识,用以代替用户登录以后的唯一标识符。...
  • appcan.device.getInfo(infoId,callback)获取设备对应id的信息infoId:相关信息id0: 描述CPU频率的字符串,eg:“1024MHZ”。IOS平台获取不到时,返回“0”1: 描述系统版本的字符串,eg:“Android2.3.4”2:标书设备...
  • Php获取移动设备唯一标识

    千次阅读 2021-02-08 22:46:46
    该楼层疑似违规已被系统折叠隐藏此楼查看此楼function is_mobile_request(){$_SERVER['ALL_HTTP'] = isset($_SERVER['ALL_HTTP']) ?...$mobile_browser = 0;if(preg_match('/(up.browser|up.link|mmp|symbian|sm...
  • 获取iOS设备唯一标识

    2016-09-13 15:57:12
    获取用户设备唯一标识
  • 问题在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备唯一标识。但Android6.0后google对权限加以限制和国内rom的不同等原因导致无法一个稳定的唯一标示常见唯一...
  • Android设备唯一标识 背景 Android系统中并没有可靠获取所有厂商设备唯一ID的方法,各个方法都有自己的使用范围和局限性,这也是目前流行的Android系统版本过多,设备也是来自不同厂商,且没有统一标准等原因造成的...
  • 唯一标识一个设备是一个基本功能,可以拥有很多应用场景,比如软件授权(如何保证你的软件在授权后才能在特定机器上使用)、软件License,设备标识设备身份识别等。下面列举一下各种方法的优劣: (1)网卡MAC...
  • document.addEventListener('plusready', ()=> { plus.device.getInfo({ success: (e) => { console.log(e.uuid) }, fail: function(e) {} }); })
  • android :获取设备唯一标识

    千次阅读 2020-04-30 11:50:36
    也不算太大的缺点,但是到了我们的Android 10 开始,谷歌官方对我们的获取Imei进行了更加严格的限制,基本上无法拿到,我们的APP有需要做单点登录,需要设备唯一标识,只能另寻他法; 网络上其实有很多其他的方法包括,...
  • 手机设备唯一标识相关概念

    千次阅读 2020-08-21 10:27:14
    手机设备唯一标识相关概念 IMEI 定义IMEI(International Mobile Equipment Identity)是国际移动设备识别码的缩写。俗称“手机串号”、“手机串码”、“手机序列号”,用于在GSM移动网络中识别每一部独立的手机,...
  • 设备唯一标识/设备码/设备标识码

    千次阅读 2021-04-26 22:27:38
    Media Access Control Address),直译为媒体存取控制位址,也称为局域网地址(LAN Address),MAC位址,以太网地址(Ethernet Address)或物理地址(Physical Address),它是一个用来确认网络设备位置的位址。...
  • 获取设备唯一标识(Unique Identifier):Windows系统

    万次阅读 多人点赞 2018-08-08 11:48:13
    之前有做过防止用户非法使用公司软件的组件(软件授权),其中基于windows系统获取设备唯一标志,上任开发者获取的唯一标识之一CPU ID已经不再唯一产生的Bug,便是参考此文修复。现记录之。     原文地址:...
  • android设备唯一标识生成方法.rar,太多无法一一验证是否可用,程序如果跑不起来需要自调,部分代码功能进行参考学习。
  • 一般情况下,Android获取设备唯一标识,大体上有三种方案 一是通过获取DEVICE_ID, 二是获取MAC地址, 三是自定义规则生成一个标识符存在本地, 但是,Android10以后,google彻底禁止了第三发应用获取imei,并且...
  • 关于Android设备唯一标识符号 前言 由于在开发中需要开发游客模式,在用户没有登录的情况下必须确保设备的唯一性,于是惯性思维想到的肯定是使用DevicesId 来作为设备的唯一标识,用以代替用户登录以后的唯一...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 174,833
精华内容 69,933
关键字:

设备唯一标识

友情链接: SwordSaint.rar