当 AdvertisingIdentifier 为 nil 时,我应该使用啥方法?

Posted

技术标签:

【中文标题】当 AdvertisingIdentifier 为 nil 时,我应该使用啥方法?【英文标题】:What approach should I use when advertisingIdentifier is nil?当 AdvertisingIdentifier 为 nil 时,我应该使用什么方法? 【发布时间】:2015-02-12 12:10:02 【问题描述】:

根据苹果文档,有时[ASIdentifierManager sharedManager].advertisingIdentifier 方法会返回一个nil 值,而我的应用程序中确实需要这个值:

https://developer.apple.com/library/prerelease/ios/documentation/AdSupport/Reference/ASIdentifierManager_Ref/index.html#//apple_ref/occ/instp/ASIdentifierManager/advertisingIdentifier

如果该值为 nil,则等待并稍后再次获取该值。有时候是这样的, 例如,在设备重新启动之后但在用户之前 已解锁设备。

我应该等多久?在这种情况下我应该使用什么方法?也许继续尝试获取广告标识符,直到它可用?还是我应该告诉用户尝试重新启动应用程序?有什么想法吗?

谢谢。

【问题讨论】:

您使用的解决方案有什么更新吗?我不明白的是,在使用swift的时候,advertisingIdentifier类型不是可选的,这意味着该值永远不会为nil(我们甚至可以不测试它是否为nil!) 【参考方案1】:

您应该手动创建 UUID 并将其保存在首选项中。

NSString *UUID = [[NSUserDefaults standardUserDefaults] objectForKey:kApplicationUUIDKey];
if (!UUID) 
    CFUUIDRef uuid = CFUUIDCreate(NULL);
    UUID = (__bridge_transfer NSString *)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);

    [[NSUserDefaults standardUserDefaults] setObject:UUID forKey:kApplicationUUIDKey];
    [[NSUserDefaults standardUserDefaults] synchronize];

【讨论】:

我不认为这对这个问题是一个好主意 - 这是由于用户偏好而导致广告 ID 不可用时的答案。 就我个人而言,我遇到了这个问题,我的应用程序崩溃了,因为 adsIdentifier 给出了 nil 值,所以我将使用: NSString *UUID = [[NSUUID UUID] UUIDString];【参考方案2】:

当用户使用受保护的文件解锁手机并监听applicationProtectedDataDidBecomeAvailable时,您可以有效地收到通知

【讨论】:

以上是关于当 AdvertisingIdentifier 为 nil 时,我应该使用啥方法?的主要内容,如果未能解决你的问题,请参考以下文章

IOS - - 获取设备的UUID

关于iOS设备的那些事

广告标识符 (IDFA)? - 阿德莫布

iOS获取设备型号设备类型等信息

iOS 设备获取唯一标识符汇总

使用 IOS 13 编译的应用程序的 IOS14 跟踪权限