如何从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 } }