How to retrieve iPhone IDFA from API?

前端 未结 11 800
深忆病人
深忆病人 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:39

    Just to extend Amro's Swift answer, here's similar code wrapped in a method:

    import AdSupport
    
    ...
    
    func provideIdentifierForAdvertisingIfAvailable() -> String? {
        if ASIdentifierManager.sharedManager().advertisingTrackingEnabled {
          return ASIdentifierManager.sharedManager().advertisingIdentifier?.UUIDString ?? nil
        } else {
          return nil
        }
      }
    
    0 讨论(0)
  • 2020-12-12 14:43

    A nicer approach to get the IDFA or nil if tracking is disabled via iOS Setting is using a (private) extension:

    import AdSupport
    
    class YourClass {
    
        func printIDFA() {
            print(ASIdentifierManager.shared().advertisingIdentifierIfPresent)
        }
    }
    
    private extension ASIdentifierManager {
    
        /// IDFA or nil if ad tracking is disabled via iOS system settings
        var advertisingIdentifierIfPresent: String? {
            if isAdvertisingTrackingEnabled {
                return advertisingIdentifier.uuidString
            }
    
            return nil 
        }        
    }
    
    0 讨论(0)
  • 2020-12-12 14:50

    Beginning in iOS 10, when a user enables “Limit Ad Tracking,” the OS will send along the advertising identifier with a new value of “00000000-0000-0000-0000-000000000000.”

    As per this article: https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/

    0 讨论(0)
  • 2020-12-12 14:53

    Swift 3 & 4

    var IDFA = String()
    if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
                IDFA = ASIdentifierManager.shared().advertisingIdentifier
    }
    
    0 讨论(0)
  • 2020-12-12 14:54

    Here's a commented helper class in Swift that will give you a nil object for the identifier if the user has turned advertisement tracking off:

    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
        }
    }
    

    Just add it to your project (for example in a file named IDFA.swift) and link the AdSupport.framework in your target via the "Linked Frameworks and Libraries" section in the General settings tab.

    Then you can use it like this:

    if let identifier = IDFA.shared.identifier {
        // use the identifier
    } else {
        // put any fallback logic in here
    }
    
    0 讨论(0)
  • 2020-12-12 14:55

    Get IDFA in Swift:

        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
        }
    
    0 讨论(0)
提交回复
热议问题