欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

IOS学习——唯一标识符 博客分类: IOS iOSIDFAOpenIDUUID 

程序员文章站 2024-03-17 08:22:58
...
1.苹果广告审核规则

如果你的应用采集了IDFA,但是在上架的时候申明未使用将肯定被拒绝

如果你的应用采集了IDFA,但是却没有使用广告服务时候肯定会被拒绝,这个时候如果集成广告将不会受影响


2.苹果广告避免方法

IDFA能够较精准的识别用户,尤其对于广告主追踪广告转化率提供了很大帮助。友盟统计分析SDK采集IDFA是为了确保在苹果变更唯一标识符时(例如从UDID变更为OpenUDID),对用户数据进行稳定过渡,而不至于发生数据突增的情况。

如果您的应用由于IDFA问题被AppStore拒绝,可以采取如下建议:
1.以广告主身份尝试申诉,广告主采集IDFA标识是被允许的;
2.集成任意一家广告服务,上线后选择继续使用或关闭该服务;
3.更换苹果帐号重新提交应用(已有开发者顺利通过审核)。
4.不采集IDFA意味着放弃了准确追踪用户的机会,在保证数据的稳定性与一致性方面存在风险。如果您仍希望不采集IDFA,可以通过这里下载无IDFA版本的SDK

3.苹果历史版本唯一序列号

CFUUID
iOS2.0 开始就存在,它是CoreFoundatio包的一部分,因此API属于C语言风格
获得的这个CFUUID值系统并没有存储。每次调用CFUUIDCreate,系统都会返回一个新的唯一标示符

NSUUID
iOS 6中才出现,这跟CFUUID几乎完全一样,只不过它是Objective-C接口
跟CFUUID一样,这个值系统也不会存储,每次调用的时候都会获得一个新的唯一标示符
每次运行的时候都不一样,但是生成的是唯一的

IDFA(IDFA-identifierForIdentifier)
iOS 6中才出现的新的方法,advertisingIdentifier是新框架AdSupport.framework的一部分广告标示符是由系统存储着的。不过即使这是由系统存储的,但是有几种情况下,会重新生成广告标示符。如果用户完全重置系统((设置程序 -> 通用 -> 还原 -> 还原位置与隐私) ,这个广告标示符会重新生成。另外如果用户明确的还原广告(设置程序-> 通用 -> 关于本机 -> 广告 -> 还原广告标示符) ,那么广告标示符也会重新生成。关于广告标示符的还原,有一点需要注意:如果程序在后台运行,此时用户“还原广告标示符”,然后再回到程序中,此时获取广告标示符并不会立即获得还原后的标示符。必须要终止程序,然后再重新启动程序,才能获得还原后的广告标示符。之所以会这样,我猜测是由于ASIdentifierManager是一个单例

Vindor((IDFV-identifierForVendor)
iOS 6中才出现的新的方法,不过获取这个IDFV的新方法被添加在已有的UIDevice类中。
跟advertisingIdentifier一样,该方法返回的是一个NSUUID对象。
NSString *idfv = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
he value of this property is the same for apps that come from the same vendor running on the same device. A different value is returned for apps on the same device that come from different vendors, and for apps on different devices regardless of vendor.
如果满足这样的条件,那么获取到的这个属性值就不会变:相同的vindor-相同的设备,idfv相同。如果是这样的情况,那么这个值是不会相同的:相同的设备-不同的vindor,或者是不同的设备-无论是否相同的vindor。
vendor非常简单:一个Vendor是CFBundleIdentifier(反转DNS格式)的前两部分。例如,com.doubleencore.app1 和 com.doubleencore.app2 得到的identifierForVendor是相同的,因为它们的CFBundleIdentifier 前两部分是相同的。不过这样获得的identifierForVendor则完全不同:com.massivelyoverrated 或 net.doubleencore。 在这里,还需要注意的一点就是:如果用户卸载了同一个vendor对应的所有程序,然后在重新安装同一个vendor提供的程序,此时identifierForVendor会被重置。
Vendor是CFBundleIdentifier(反转DNS格式)的前两部分。来自同一个运营商的应用运行在同一个设备上,此属性的值是相同的;不同的运营商应用运行在同一个设备上值不同。

UDID
ios5已经废弃,系统的唯一序列号,app账号添加就是用的这个

OpenUDID
在每个设备的openUDID是通过第一个带有openUDID sdk包的app生成,当然如果重新刷机这个还是会丢失
在iOS 5发布时,uniqueIdentifier被弃用了,这引起了广大开发者需要寻找一个可以替代UDID,并且不受苹果控制的方案。由此OpenUDID成为了当时使用最广泛的开源UDID替代方案。OpenUDID在工程中实现起来非常简单,并且还支持一系列的广告提供商。
NSString *openUDID = [OpenUDID value];
OpenUDID利用了一个非常巧妙的方法在不同程序间存储标示符 — 在粘贴板中用了一个特殊的名称来存储标示符。通过这种方法,别的程序(同样使用了OpenUDID)知道去什么地方获取已经生成的标示符(而不用再生成一个新的)。
之前已经提到过,在将来,苹果将开始强制使用advertisingIdentifier 或identifierForVendor。如果这一天到来的话,即使OpenUDID看起来是非常不错的选择,但是你可能不得不过渡到苹果推出的方法

MAC地址
MAC地址就如同我们身份证上的身份证号码,具有全球唯一性。这样就可以非常好的标识设备唯一性,类似与苹果设备的UDID号,从iOS7及更高版本往后,如果你向ios设备请求获取mac地址,系统将返回一个固定值“02:00:00:00:00:00”