How to retrieve iPhone IDFA from API?

前端 未结 11 801
深忆病人
深忆病人 2020-12-12 14:37

I would like to get the device IDFA. How to get this info from iOS official API ?

相关标签:
11条回答
  • 2020-12-12 14:57

    You first have to check if user user has decided to opt out from ad tracking. Only if he allowed it you can use the IDFA.

    You can check it by calling isAdvertisingTrackingEnabled method of ASIdentifierManager.

    isAdvertisingTrackingEnabled

    Check the value of this property before performing any advertising tracking. If the value is NO, use the advertising identifier only for the following purposes: frequency capping, conversion events, estimating the number of unique users, security and fraud detection, and debugging.

    The following code snippet shows how to obtain a string value of 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;
    }
    

    Swift

    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
    }
    
    0 讨论(0)
  • 2020-12-12 14:57

    ASIdentifierManager is the official way to garner the Advertising Identification Number from a device running iOS 6+. You can use -[[ASIdentifierManager sharedManager] advertisingIdentifier]; to get it.

    0 讨论(0)
  • 2020-12-12 15:03

    IDFA - Identifier for Advertising

    isAdvertisingTrackingEnabled -> trackingAuthorizationStatus
    

    From iOS v14 Apple deprecated isAdvertisingTrackingEnabled and moved the logic into AppTrackingTransparency Framework. Now user has to grand a permission to read idfa(in the same way as Location permission)

    User can control it via:

    #iOS 13
    #AdSupport
    #ASIdentifierManager.shared().isAdvertisingTrackingEnabled
    Settings -> Privacy -> Advertising -> Limit Ad Tracking
    
    #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 
    
    

    Implementation

    import AppTrackingTransparency
    import AdSupport
    
    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
    }
    
    0 讨论(0)
  • 2020-12-12 15:05

    First of all:

    #import <AdSupport/ASIdentifierManager.h> 
    

    If you would like to get it as an NSString, use:

    [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
    

    So your code might look like this:

    NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
    
    0 讨论(0)
  • 2020-12-12 15:05

    Swift 5 with encapsulation:

    import AdSupport
    
    struct ID{
        static var advertising: String? {
             // Firstly, Check whether advertising tracking is enabled
             guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {
                  return nil
             }
             // Then, Get and return IDFA
             return ASIdentifierManager.shared().advertisingIdentifier.uuidString
         }
    }
    
    0 讨论(0)
提交回复
热议问题