美文网首页
8102年的iOS获取设备唯一标识

8102年的iOS获取设备唯一标识

作者: Trigger_o | 来源:发表于2018-11-12 15:44 被阅读0次

UDID卒于iOS5

mac地址卒于iOS7

现在一般IDFA或者keychain来指定一台设备的唯一identifier

IDFA

还原广告和还原iPhone都会使IDFA发生变化
使用

#import <AdSupport/ASIdentifierManager.h>
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

IDFV

通过BundleID的反转的前两部分进行匹配,如果相同就是同一个Vender,例如com.cocoa.app1, com.cocoa.app2 属于同一个Vender,共享同一个IDFV的值。IDFV一定可以获取到,但是如果设备上所有该供应商的应用被卸载,IDFV会发生变化.
使用

[[[UIDevice currentDevice] identifierForVendor] UUIDString];

UUID

UUID的目的是让分布式系统中的所有元素,都能有唯一的辨识信息,而不需要通过中央控制端来做辨识信息的指定。如此一来,每个人都可以创建不与其它人冲突的UUID.
UUID每次生成都是不一样的,因此需要配合keychain关于keychain的使用请看

获取唯一标识符

综上所述,IDFA和IDFV有时候获取不到,所以不能只依赖一个,因此推荐下面这中写法

- (NSString *) deviceIDString
{
    // try from keychain
    NSString *deviceIDStr = [self _deviceIDFromKeychain];
    if ([self _isValidDeviceID:deviceIDStr]) {
        return deviceIDStr;
    }
    
    // try from user defaults
    deviceIDStr = [self _deviceIDFromUserDefaults];
    if ([self _isValidDeviceID:deviceIDStr]) {
        // save it to key chain
        [self _saveDeviceIDToKeychain:deviceIDStr];
        return deviceIDStr;
    }
    
    // try the old one from keychain
    deviceIDStr = [self _oldDeviceIDFromKeychain];
    if ([self _isValidDeviceID:deviceIDStr]) {
        // save as the new one
        [self _saveDeviceIDToKeychain:deviceIDStr];
        [self _saveDeviceIDToUserDefaults:deviceIDStr];
        
        // remove the old one
        [self _removeOldDeviceIDFromKeychain];
        [self _removeOldDeviceIDFromUserDefaults];
        return deviceIDStr;
    }
    
    // try the old one from user defaults
    deviceIDStr = [self _oldDeviceIDFromUserDefaults];
    if ([self _isValidDeviceID:deviceIDStr]) {
        // save as the new one
        [self _saveDeviceIDToKeychain:deviceIDStr];
        [self _saveDeviceIDToUserDefaults:deviceIDStr];
        
        // remove the old one
        [self _removeOldDeviceIDFromKeychain];
        [self _removeOldDeviceIDFromUserDefaults];
        return deviceIDStr;
    }
    
    // try IDFA
    deviceIDStr = [self IDFAString];
    if ([self _isValidDeviceID:deviceIDStr]) {
        // save it to key chain and user defaults
        [self _saveDeviceIDToKeychain:deviceIDStr];
        [self _saveDeviceIDToUserDefaults:deviceIDStr];
        return deviceIDStr;
    }
    
    // try IDFV
    deviceIDStr = [self IDFVString];
    if ([self _isValidDeviceID:deviceIDStr]) {
        // save it to key chain and user defaults
        [self _saveDeviceIDToKeychain:deviceIDStr];
        [self _saveDeviceIDToUserDefaults:deviceIDStr];
        return deviceIDStr;
    }
    
    // try UUID
    deviceIDStr = [self UUIDString];
    if ([self _isValidDeviceID:deviceIDStr]) {
        // save it to key chain and user defaults
        [self _saveDeviceIDToKeychain:deviceIDStr];
        [self _saveDeviceIDToUserDefaults:deviceIDStr];
        return deviceIDStr;
    }
    
    return nil;
}

首先从keychain中取,如果没有则从userdefault中取,还没有则获取IDFA(有则存并返回),没有再获取IDFV(有则存并返回),没有再取之前存的UUID(有则返回), 再没有则生成UUID去存储

提交审核

使用IDFA提交审核时,需要勾选对应选项,
1、在 App 内投放广告
服务应用中的广告。如果你的应用中集成了广告的时候,你需要勾选这一项。
2、将此 App 安装归因于先前投放的特定广告
跟踪广告带来的安装。如果你使用了第三方的工具来跟踪广告带来的激活以及一些其他事件,但是应用里并没有展示广告你需要勾选这一项。
3、将此 App 中发生的操作归因于先前投放的特定广告
跟踪广告带来的用户的后续行为。如果你使用了第三方的工具来跟踪广告带来的激活以及一些其他事件,但是应用里并没有展示广告你需要勾选第2项和第3项。
4、对使用广告标识符做确认
此项必须勾选

对于集成广告,可以是App后台推送的广告,也可以添加第三方的广告服务,比如Google的ADMob

相关文章

网友评论

      本文标题:8102年的iOS获取设备唯一标识

      本文链接:https://www.haomeiwen.com/subject/silcfqtx.html