iOS5之后,原来获取iPhone的DeviceId的接口:[UIDevice uniqueIdentifier] 被废弃!
这个改动会影响非常多的人,尤其是数据分析者。由于iPhone取IMEI困难(属于私有方法),所以大多数应用将DeviceId,也就是uniqueIdentifier作为IMEI来使用。如果这个接口被废弃,那么,我们就需要寻求一个新的方式来标识唯一的设备。
官方推荐的方法是,每个应用内创建一个UUID来作为唯一标志,并将之存储,但是这个解决方法明显不能接受!原因是,你每次创建的UUID都是不一样的,意味着,你卸载后重新安装这个软件,生成的UUID就不一样了,无法达到我们将之作为数据分析的唯一标识符的要求。
现有的解决方案是,使用iPhone的Mac地址,因为Mac地址也是唯一的。unix有系统调用可以获取Mac地址。但是有些事情需要注意:
1.iPhone可能有多个Mac地址,wifi的地址,以及SIM卡的地址。一般来讲,我们取en0的地址,因为他是iPhone的wifi的地址,是肯定存在的。(例外情况依然有:市面上依然存在一部分联通的阉割版无wifi的iPhone)
2.Mac地址涉及到隐私,不应该胡乱将用户的Mac地址传播!所以我们需要将Mac地址进行hash之后,才能作为DeviceId上传。
网上已经有现成的解决方案:
https://github.com/gekitz/UIDevice-with-UniqueIdentifier-for-iOS-5
本文出自 “风沙” 博客,请务必保留此出处
http://kensou.blog.51cto.com/3495587/655083
分享到:
相关推荐
《iOS应用源码解析——基于UIDevice2》 在iOS应用开发中,了解并掌握源码是提升技术深度的关键步骤。本次我们关注的是"UIDevice2"相关的源码,这是一份与iOS设备信息交互密切相关的代码。"UIDevice"是苹果iOS SDK中...
综上所述,了解并使用`Reachability`库可以帮助我们监测iOS设备的网络状态,而通过`UIDevice`的电池状态和电量属性,我们可以获取电池相关信息。这些功能对于构建具有优秀用户体验的iOS应用来说非常重要。结合提供的...
在iOS应用开发中,`UIDevice`类是获取设备相关信息的关键工具。这个类提供了丰富的属性和方法,使得开发者能够获取到设备的多个方面信息,包括但不限于设备名称、唯一标识符、系统名称、系统版本、设备型号以及电池...
在iOS 5之前,开发者可以直接通过`UIDevice`类的`uniqueIdentifier`属性来获取UUID。然而,由于隐私和安全原因,从iOS 5开始,苹果不再推荐使用`uniqueIdentifier`,因为它无法保证永久不变,且容易被滥用。替代方案...
本示例代码主要展示了如何使用UIKit中的UIDevice类来获取iOS设备的当前可用内存。UIDevice是苹果提供的一种系统服务接口,允许开发者获取设备的各种信息,包括硬件配置、电池状态、网络状态等。 首先,我们需要导入...
UIDevice-DisplayName displayName()返回iOS设备的友好名称,其中不包括特定的类型信息(即“ iPhone X”) displayName(includeType: true)返回iOS设备的友好名称,其中还包括设备类型(例如“ iPhone X(GSM)”)...
UIDevice类是一个单例,其唯一的实例( [UIDevice currentDevice] ) 代表了当前使用的设备。 通过这个实例,可以获得设备的相关信息(包括系统名称,版本号,设备模式等等)。 也可以使用使用该实例来监测设备的...
这个压缩包"IOS应用源码Demo-获取当前硬件可用内存的例子UIDevice-毕设学习.zip"提供了一个实例,教你如何利用`UIDevice`类来获取设备的可用内存信息,这对于进行性能优化和调试非常有用。下面将详细介绍这一知识点...
可以供Robotium等实现跨进程的Uiautomator.jar,直接导入即可调用 API e.g: UiDevice uiDevice = UiDevice.getInstance(getInstrumentation());
3. **处理屏幕旋转**:iOS设备支持多种屏幕方向,如Portrait(竖屏)、Landscape Left(左横屏)、Landscape Right(右横屏)等。为了使悬浮窗在屏幕旋转时保持正确的位置,你需要监听屏幕方向的变化。可以通过观察`...
1. **监控系统事件**:iOS会定期发送电池状态变化的通知,我们可以通过监听这些通知来实时更新电量。使用`NotificationCenter`注册电池状态变更的观察者: ```swift NotificationCenter.default.addObserver( ...
在iOS开发中,"Toast"通常指的是短暂显示在屏幕上的提示信息,用于向用户传达一些非阻塞式的通知或信息。这种设计模式源自Android系统,但在iOS中也被广泛应用,特别是在iPad这样的大屏幕设备上,可以提供更好的用户...
总结起来,要实现在iOS应用中判断手机是否充电以及获取电量剩余,主要涉及到`CFBatteryUnplugged`函数(判断充电状态)和`UIDevice`类的`batteryState`和`batteryLevel`属性(获取电量)。开发者可以通过监听通知和...
这个"IOS应用源码——获取当前硬件可用内存的例子UIDevice.zip"提供了一个简单的示例,演示了如何利用Apple的UIKit框架中的UIDevice类来获取iOS设备的当前可用内存。下面将详细介绍这个知识点及其相关背景。 首先,...
抽奖转盘在iOS应用开发中是一种常见的互动元素,通常用于增加用户参与度和趣味性,例如在电商促销、游戏活动或者应用内部奖励机制中。这个"抽奖转盘ios"源代码是一个实现此类功能的工程DEMO,允许开发者快速集成到...
淘iOS 适用于Apple平台的简单访问属性和分析库,可与您的Rails 后端集成。 :waning_gibbous_moon: 用户访问跟踪 :inbox_tray: 通过UTM和引荐来源网址参数访问归因 :tear-off_calendar: 简单,直接的内部事件跟踪安装...
在iOS应用开发中,"旋转罗盘菜单"是一种独特且吸引用户的交互设计,它通常用于展示一系列可选项,用户可以通过旋转模拟罗盘的方式来选择。这种菜单设计为用户提供了一种直观且有趣的交互方式,尤其适用于设置界面...
**UIDevice** 是iOS中的一个基础类,用于表示当前应用运行的设备。通过这个类可以获取到设备的基本信息,如操作系统版本、设备型号等。 #### 三、扩展功能介绍 ##### 1. 设备重启 - **功能**: `+ (int)reboot;` ...
在iOS开发中,实现“长按”(Long Press)效果是一项常见的交互设计,尤其是在需要触发特定功能或操作的场景下,比如微信中的录音按钮。这个功能对于提升用户体验有着重要作用,因为它提供了一种非点击式的交互方式...
这个压缩包"IOS应用源码之获取当前硬件可用内存的例子UIDevice .zip"提供了一个示例代码,用于演示如何利用苹果的UIKit框架中的UIDevice类来获取iOS设备的当前可用内存。这篇文章将深入探讨这个知识点,并详细解释其...