如何从API检索iPhone IDFA?

fvi*_*cot 64 iphone ios idfa tvos

我想得到这个设备IDFA.如何从iOS官方API获取此信息?

Zac*_*ake 78

首先:

#import <AdSupport/ASIdentifierManager.h> 
Run Code Online (Sandbox Code Playgroud)

如果您想将其作为NSString,请使用:

[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
Run Code Online (Sandbox Code Playgroud)

所以你的代码可能如下所示:

NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
Run Code Online (Sandbox Code Playgroud)

  • 请记住:#import <AdSupport/ASIdentifierManager.h> (13认同)
  • 使用Swift:`import AdSupport`,然后使用`ASIdentifierManager.sharedManager().advertisingIdentifier`来获取IDFA! (2认同)

Raf*_*fAl 67

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

你可以通过调用isAdvertisingTrackingEnabled方法来检查它ASIdentifierManager.

isAdvertisingTrackingEnabled

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

以下代码段显示了如何获取字符串值IDFA.

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;
}
Run Code Online (Sandbox Code Playgroud)

迅速

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
}
Run Code Online (Sandbox Code Playgroud)


Cod*_*aFi 14

ASIdentifierManager是从运行iOS 6+的设备获取广告标识号的官方方式.你可以-[[ASIdentifierManager sharedManager] advertisingIdentifier];用来获得它.


Amr*_*fie 12

在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
    }
Run Code Online (Sandbox Code Playgroud)


yoA*_*ex5 10

IDFA - 广告标识符

isAdvertisingTrackingEnabled -> trackingAuthorizationStatus
Run Code Online (Sandbox Code Playgroud)

iOS v14 开始, Apple 弃用了isAdvertisingTrackingEnabled并将逻辑移到AppTrackingTransparencyFramework 中。现在用户必须授予阅读权限idfa(与位置权限相同)

用户可以通过以下方式控制它:

#iOS 13
#AdSupport
#ASIdentifierManager.shared().isAdvertisingTrackingEnabled
Settings -> Privacy -> Advertising -> Limit Ad Tracking
Run Code Online (Sandbox Code Playgroud)
#iOS 14
#AppTrackingTransparency
#ATTrackingManager.trackingAuthorizationStatus

#a global flag
Settings -> Privacy -> Tracking -> `Allow Apps to Request to Track` 
#or select an app from list to control every app separately 

#a local flag
Settings -> <app_name> -> Allow Tracking 

Run Code Online (Sandbox Code Playgroud)

执行

import AppTrackingTransparency
import AdSupport
Run Code Online (Sandbox Code Playgroud)
func getIDFA() -> String? {
    // Check whether advertising tracking is enabled
    if #available(iOS 14, *) {
        if ATTrackingManager.trackingAuthorizationStatus != ATTrackingManager.AuthorizationStatus.authorized  {
            return nil
        }
    } else {
        if ASIdentifierManager.shared().isAdvertisingTrackingEnabled == false {
            return nil
        }
    }

    return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
Run Code Online (Sandbox Code Playgroud)


Vla*_*lad 6

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

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


Jee*_*hut 6

这是Swift中一个注释的帮助器类,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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

然后你可以像这样使用它:

if let identifier = IDFA.shared.identifier {
    // use the identifier
} else {
    // put any fallback logic in here
}
Run Code Online (Sandbox Code Playgroud)


Osc*_*car 5

斯威夫特3和4

var IDFA = String()
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
            IDFA = ASIdentifierManager.shared().advertisingIdentifier
}
Run Code Online (Sandbox Code Playgroud)