web-dev-qa-db-fra.com

AdvertisingIdentifier et identifierForVendor renvoient "00000000-0000-0000-0000-000000000000"

J'ai implémenté cette méthode pour obtenir advertisingIdentifier et identifierForVendor:

- (NSString *) advertisingIdentifier
{
    if (!NSClassFromString(@"ASIdentifierManager")) {
        return [OpenUDID value];
    }
    return [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
}

- (NSString *) identifierForVendor
{
    if ([[UIDevice currentDevice] respondsToSelector:@selector(identifierForVendor)]) {
        return [[[UIDevice currentDevice] identifierForVendor] UUIDString];
    }
    return @"";
}

- (BOOL)isAdvertisingTrackingEnabled
{
    if (NSClassFromString(@"ASIdentifierManager") && ![[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
        return NO;
    }
    return YES;
}

Sur le simulateur, tout fonctionne comme il se doit et je peux obtenir la représentation des 2 chaînes de caractères.

Mais lorsque je lance à partir d'iPhone 3GS avec iOS 6.0 (10A403), ces 2 méthodes renvoient "00000000-0000-0000-0000-000000000000" comme identifiant. Déjà fait:

  • Redémarrage de l'appareil
  • Supprimé l'application et réinstallé
  • Création et création ad hoc, installées, supprimées et réinstallées
  • Exécuter ce code depuis une autre application
  • Testé sur iPad 2 avec iOS 6.0 (10A403) et tout s'est bien passé ok (j'ai les bons identifiants)
25
J. Costa

Cela semble être un bug dans iOS. Voir le même problème sur les appareils mis à niveau sans fil, mais les appareils mis à niveau avec Xcode ou iTunes fonctionnent normalement sans zéros.

J'ai essayé de suivre les mêmes étapes que vous et le seul thème commun était celui de l'over-the-air (mauvais) par rapport à la mise à niveau en mode attaché (bon).

Mise à jour: Les utilisateurs qui passent directement d'iOS 5.1 à 6.1 par voie hertzienne éprouvent un comportement différent. Chaque fois que l'application est complètement fermée et redémarrée, une nouvelle valeur est renvoyée par identifierForVendor. On pourrait s'y attendre si l'application était en cours de désinstallation et de réinstallation, mais ce n'est pas le cas.

24
MattP

Apple a confirmé ce bogue dans son système en réponse à une demande d'incident du support technique. Ils ont dit que identifierForVendor et advertisingIdentifier parfois Renvoyer tous les zéros peuvent être vus à la fois dans les versions de développement et les applications téléchargées à distance de l'App Store. Ils n'ont pas de travail et ne savent pas quand le problème sera résolu.

8
Peter B. Kramer

Dans certaines situations, l’API renvoie une réponse vide pour l’ID, comme après la restauration du périphérique.

Nous vous suggérons de différer la récupération de votre identifiant afin que vous puissiez appeler quelque chose comme ceci:

-(void)retrieveID
{
    if (<check fails>)
        [self performSelector:@"retrieveID" withObject:nil afterDelay:1.0];
}

Et chercher l'ID plus tard.

0
vedrano