如何从API中检索iPhone IDFA?

我想获得设备IDFA 。 如何从iOS官方API获取此信息?

首先:

 #import <AdSupport/ASIdentifierManager.h> 

如果你想把它作为一个NSString,使用:

 [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString] 

所以你的代码可能是这样的:

 NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]; 

您首先必须检查用户用户是否决定退出广告跟踪 。 只有他允许,你才可以使用IDFA

您可以通过调用isAdvertisingTrackingEnabled方法来检查它。

isAdvertisingTrackingEnabled

在执行任何广告跟踪之前检查此属性的值。 如果值为NO ,则仅将广告标识符用于以下目的:频次上限,转换事件,估计唯一用户数量,安全和欺诈检测以及debugging。

以下代码片段显示了如何获取IDFA的string值。

ObjC

 @import AdSupport; - (NSString *)identifierForAdvertising { // Check whether advertising tracking is enabled if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) { NSUUID *identifier = [[ASIdentifierManager sharedManager] advertisingIdentifier]; return [identifier UUIDString]; } // Get and return IDFA return nil; } 

迅速

 import AdSupport func identifierForAdvertising() -> String? { // Check whether advertising tracking is enabled guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else { return nil } // Get and return IDFA return ASIdentifierManager.shared().advertisingIdentifier.uuidString } 

ASIdentifierManager是从运行iOS 6+的设备获取广告标识号的官方方式。 您可以使用-[[ASIdentifierManager sharedManager] advertisingIdentifier]; 为拿到它,为实现它。

在Swift中获取IDFA:

  import AdSupport ... let myIDFA: String? // Check if Advertising Tracking is Enabled if ASIdentifierManager.sharedManager().advertisingTrackingEnabled { // Set the IDFA myIDFA = ASIdentifierManager.sharedManager().advertisingIdentifier.UUIDString } else { myIDFA = nil } 

从iOS 10开始,当用户启用“限制广告跟踪”时,操作系统将沿广告标识发送新值“00000000-0000-0000-0000-000000000000”。

按照这篇文章: https : //fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/

这里有一个Swift中的注释助手类,如果用户已经closures了广告跟踪,将会给你一个nil标识的对象:

 import AdSupport class IDFA { // MARK: - Stored Type Properties static let shared = IDFA() // MARK: - Computed Instance Properties /// Returns `true` if the user has turned off advertisement tracking, else `false`. var limited: Bool { return !ASIdentifierManager.shared().isAdvertisingTrackingEnabled } /// Returns the identifier if the user has turned advertisement tracking on, else `nil`. var identifier: String? { guard !limited else { return nil } return ASIdentifierManager.shared().advertisingIdentifier.uuidString } } 

只需将其添加到项目中 (例如在名为IDFA.swift的文件中),然后通过“常规设置”选项卡中的“链接的框架和库”部分链接目标中的AdSupport.framework

那么你可以像这样使用它

 if let identifier = IDFA.shared.identifier { // use the identifier } else { // put any fallback logic in here } 

Swift 3&4

 var IDFA = String() if ASIdentifierManager.shared().isAdvertisingTrackingEnabled { IDFA = ASIdentifierManager.shared().advertisingIdentifier } 

为了扩展Amro的Swift答案,下面是一个包装在方法中的类似的代码:

 import AdSupport ... func provideIdentifierForAdvertisingIfAvailable() -> String? { if ASIdentifierManager.sharedManager().advertisingTrackingEnabled { return ASIdentifierManager.sharedManager().advertisingIdentifier?.UUIDString ?? nil } else { return nil } } 
Interesting Posts