Je voudrais obtenir l'appareil IDFA
. Comment obtenir cette information de l'API officielle iOS?
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];
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
.
@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;
}
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
}
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.
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
}
À 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/
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
}
Swift 3 & 4
var IDFA = String()
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
IDFA = ASIdentifierManager.shared().advertisingIdentifier
}
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
}
}
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
}