85 votes

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

J'aimerais obtenir le dispositif IDFA . Comment obtenir cette information à partir de l'API officielle d'iOS ?

100voto

Zachary Drake Points 321

Tout d'abord, vous devez demander à l'utilisateur l'autorisation d'utiliser son IDFA :

#import <AppTrackingTransparency/AppTrackingTransparency.h> 

[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
 // Tracking authorization completed. Start loading ads here. 
 }];

Ce flux de permissions ne s'exécutera qu'une seule fois, la première fois qu'il sera appelé, même si vous redémarrez l'application et/ou l'appelez à nouveau. Si vous souhaitez répondre différemment, vous devrez supprimer complètement l'application de l'appareil ou du simulateur et la réinstaller. Notez que les simulateurs iOS renvoient des IDFA vides (tous les zéros) quelle que soit la réponse au flux de permission. Voir https://developer.apple.com/documentation/apptrackingtransparency pour plus de détails, notamment sur la manière de personnaliser le message affiché aux utilisateurs lorsqu'on leur demande de les suivre. Notez que de nombreux SDK publicitaires ont leurs propres appels de flux de consentement que vous pouvez utiliser.

Pour obtenir l'IDFA une fois que vous avez obtenu l'autorisation :

#import <AdSupport/ASIdentifierManager.h> 

Si vous souhaitez l'obtenir sous forme de NSString, utilisez :

[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

Votre code pourrait donc ressembler à ceci :

NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSLog (@"IDFA: %@", idfaString);

86voto

reecon Points 8418

Vous devez d'abord vérifier si l'utilisateur a décidé de ne pas participer au suivi de la publicité . Ce n'est que s'il l'a autorisé que vous pouvez utiliser le IDFA .

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

isAdvertisingTrackingEnabled

Vérifier la valeur de cette propriété avant d'effectuer un suivi publicitaire. de la publicité. Si la valeur est NO utiliser l'identifiant publicitaire les objectifs suivants : plafonnement de la fréquence, événements de conversion, l'estimation du nombre d'utilisateurs uniques, la sécurité et la détection des fraudes, et débogage.

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

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
}

20voto

yoAlex5 Points 2350

IDFA - Identifiant pour la publicité

isAdvertisingTrackingEnabled -> trackingAuthorizationStatus

En iOS v14 Apple est obsolète isAdvertisingTrackingEnabled et a déplacé la logique dans AppTrackingTransparency Le cadre . L'utilisateur doit maintenant obtenir l'autorisation de lire idfa (de la même manière que pour l'autorisation de localisation)

L'utilisateur peut le contrôler 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 

Mise en œuvre

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
}

14voto

CodaFi Points 29073

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

12voto

Amro Shafie Points 2033

Obtenez l'IDFA dans 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
    }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X