web-dev-qa-db-fra.com

Comment récupérer iPhone IDFA à partir de l'API?

Je voudrais obtenir l'appareil IDFA. Comment obtenir cette information de l'API officielle iOS?

60
fvisticot

Tout d'abord:

#import <AdSupport/ASIdentifierManager.h> 

Si vous souhaitez l’obtenir en tant que NSString, utilisez:

[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

Donc, votre code pourrait ressembler à ceci:

NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
76
Zachary Drake

Vous devez d’abord vérifier si l’utilisateur a décidé de ne pas suivre le suivi des annonces . Seulement s'il le permet, vous pouvez utiliser la variable IDFA.

Vous pouvez le vérifier en appelant la méthode isAdvertisingTrackingEnabled de ASIdentifierManager.

isAdvertisingTrackingEnabled

Vérifiez la valeur de cette propriété avant d’effectuer toute publicité suivi. Si la valeur est NO, utilisez l'identifiant publicitaire uniquement pour les objectifs suivants: limitation de la fréquence, événements de conversion, estimation du nombre d'utilisateurs uniques, détection de la sécurité et de la fraude, et débogage.

L'extrait de code suivant montre comment obtenir une valeur de chaîne de 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;
}

Rapide

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

ASIdentifierManager est le moyen officiel de récupérer le numéro d'identification publicitaire d'un appareil sous iOS 6+. Vous pouvez utiliser -[[ASIdentifierManager sharedManager] advertisingIdentifier]; pour l'obtenir.

13
CodaFi

Obtenez IDFA à 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
    }
11
Amro Shafie

À partir de iOS 10, lorsqu'un utilisateur active le "suivi limité des annonces", le système d'exploitation envoie l'identifiant publicitaire avec une nouvelle valeur "00000000-0000-0000-0000-000000000000".

Selon cet article: https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/

6
Vlad

Voici une classe d'assistance commentée dans Swift qui vous donnera un objet nil pour l'identifiant si l'utilisateur a désactivé le suivi des publicités:

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

Il suffit de ajoutez-le à votre projet (par exemple dans un fichier nommé IDFA.Swift) et reliez le AdSupport.framework à votre cible via la section "Frameworks and Libraries" de l'onglet Paramètres généraux.

Ensuite, vous pouvez utilisez-le comme ceci :

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

Swift 3 & 4

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

Juste pour étendre la réponse Swro d'Amro, voici un code similaire, enveloppé dans une méthode:

import AdSupport

...

func provideIdentifierForAdvertisingIfAvailable() -> String? {
    if ASIdentifierManager.sharedManager().advertisingTrackingEnabled {
      return ASIdentifierManager.sharedManager().advertisingIdentifier?.UUIDString ?? nil
    } else {
      return nil
    }
  }
1
worthbak

Une approche plus agréable pour obtenir l'IDFA ou nil si le suivi est désactivé via iOS. Le paramètre utilise une extension (privée):

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 ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
            return ASIdentifierManager.shared().advertisingIdentifier.uuidString
        }

        return nil        
}
0
J.D. Wooder