web-dev-qa-db-fra.com

Toujours obtenir un identifiant de périphérique unique dans iOS 7

Notre application iOS est destinée à des utilisateurs spécifiques. Nous avons donc utilisé identifiant unique de l'appareil pour l'identification de l'utilisateur. Cette approche fonctionne bien jusqu'à iOS 6, car nous obtenons le même valeur à chaque fois.

NSString *strUniqueIdentifier = [[UIDevice currentDevice] uniqueIdentifier];

Dans iOS 7, la méthode ci-dessus renvoie valeurs différentes et nous rencontrons des problèmes d'identification de l'utilisateur. iOS 7 fournit les remplaçants suivants.

NSUUID *oNSUUID = [[UIDevice currentDevice] identifierForVendor];
[strApplicationUUID setString:[oNSUUID UUIDString]];

Nous avons remplacé uniqueIdentifier par identifierForVendor et créé une construction ad hoc. Nous avons ensuite installé la version sur les appareils iOS 7 et iOS 6. Jusqu'à présent, dans iOS 7, nous obtenons le même valeur à chaque fois, mais iOS 6 donne valeurs différentes à chaque fois que nous supprimons et réinstallons l'application.

31
jaydev

Utilisez cette petite méthode d'assistance pour conserver l'identifiant dans le trousseau entre les sessions d'installation/de suppression d'application

-(NSString *)getUniqueDeviceIdentifierAsString
{
    NSString *appName=[[[NSBundle mainBundle] infoDictionary] objectForKey:(NSString*)kCFBundleNameKey];

    NSString *strApplicationUUID = [SSKeychain passwordForService:appName account:@"incoding"];
    if (strApplicationUUID == nil)
    {
        strApplicationUUID  = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
        [SSKeychain setPassword:strApplicationUUID forService:appName account:@"incoding"];
    }

    return strApplicationUUID;
}

Ajoutez la bibliothèque SSKeychain à votre projet, par exemple. via Cocoapods avec pod 'SSKeychain'

31
nerowolfe

Qu'est-ce que l'UDID remplacé par?

Pour l’instant, il semblerait que Apple envisage de remplacer les UDID par deux identifiants différents: les identifiants des fournisseurs et les identifiants de publicité.

ID fournisseur

Identifiant identique entre les applications du même développeur . Supprimé avec la suppression de la dernière application pour cet identifiant d'équipe.

Identifiants publicitaires

Unique à l'appareil . Disponible pour toutes les applications. utilisé pour la publicité - iAd a converti UDID pour iOS 6 et versions ultérieures ..___ Réinitialisez avec «Effacer tout le contenu et les paramètres».


Dans la plupart des cas, les ID de fournisseur permettront aux développeurs disposant de plusieurs applications de vous identifier comme le même utilisateur dans toutes leurs applications. Cela peut aider les développeurs à mieux comprendre leur public et à fournir un meilleur service.

Les identifiants de publicité continueront de créer un identifiant unique pour l'appareil, mais contrairement à l'UDID, il peut être désactivé ou réinitialisé, tout comme les cookies peuvent être contrôlés dans le navigateur de votre ordinateur de bureau ou de votre ordinateur portable.

Avec l'annonce d'iOS7 en début de semaine, Apple a franchi une étape supplémentaire: désactiver un autre identifiant unique, "l'adresse MAC", que les développeurs d'applications et les agences de publicité pourraient utiliser à la place du nouvel identifiant de publicité. En comblant cette lacune, Apple entreprend de forcer ces entreprises à n'utiliser qu'un identifiant inter-applications que les utilisateurs peuvent contrôler.

Reste à savoir si les entreprises de ciblage continueront à chercher des solutions au mandat d'Apple. D’autres technologies, telles que «l’empreinte digitale des appareils», ont été développées pour identifier votre appareil de façon unique en dehors du cadre d’Apple. Reste à savoir si Apple s’attaquera à ces méthodes.

8
ktnam

Dans la référence de classe UIDevice pour identifierForVendor:

La valeur change lorsque l’utilisateur supprime toutes les applications de ce fournisseur de l’appareil et en réinstalle par la suite une ou plusieurs. Cette valeur peut également s'appliquer lors de l'installation de versions de test utilisant Xcode ou lors de l'installation d'une application sur un périphérique utilisant une distribution ad hoc. Par conséquent, si votre application stocke la valeur de cette propriété n'importe où, vous devez gérer avec élégance les situations dans lesquelles l'identificateur change.

2
neilco

Des applications supplémentaires du même fournisseur sont-elles installées sur des appareils iOS7? Selon les docs :

La valeur de cette propriété reste la même tant que l'application (ou une autre application Du même fournisseur) est installée sur le périphérique iOS. La valeur change lorsque l’utilisateur supprime toutes les applications de ce fournisseur du fichier périphérique et réinstalle ensuite un ou plusieurs d’entre eux. La valeur peut également lors de l'installation de versions de test à l'aide de Xcode ou lors de l'installation d'une application sur un appareil utilisant une distribution ad hoc. Par conséquent, si votre application stocke la valeur de cette propriété n’importe où, vous devriez gérer gracieusement situations où l'identifiant change.

Fournissez-vous l'application via l'AppStore? Si non:

Si l'application n'a pas été installée à partir de l'App Store (par exemple, lorsque l'application Est toujours en développement), le fournisseur est déterminé en fonction de l'application ID de paquet. L'ID de l'ensemble est supposé être au format DNS inversé, et les deux premiers composants sont utilisés pour générer un identifiant de fournisseur. Pour Par exemple, com.example.app1 et com.example.app2 sembleraient avoir le même identifiant de fournisseur.

2
tilo

Si aucune autre application signée par vous n'est installée sur le périphérique, l'identificateur pour le fournisseur peut être modifié. De plus, l'identifiant du fournisseur peut changer si vous installez votre application via différentes méthodes de distribution, c'est-à-dire. L’application peut ne pas avoir le même identifiant de fournisseur lorsqu’elle est installée via XCode et distribuée via TestFlight ou HockeyApp.

1
Maggie

Pour ajouter quelque chose à la réponse de nerowolfe , il existe un excellent porte-clés nommé MCSMKeychainItem qui permet, entre autres choses, de générer et de récupérer un ID de périphérique unique avec une seule ligne de code:

[MCSMApplicationUUIDKeychainItem applicationUUID];

donc l'utilisation de base sera quelque chose comme

+ (NSString *)deviceId {
  // load unique device ID or generate new one
  return [MCSMApplicationUUIDKeychainItem applicationUUID];
}

Il fonctionne sur la base du trousseau, où il stocke l'identifiant unique généré une fois (comme suggéré par nerowolf). C'est open-source et vous pouvez le télécharger ici sur github .

Note: Je ne suis pas l'auteur de l'extension, je ne le connais pas du tout.

0
FurloSK

Essayez de vider les caches de l'application sur votre ordinateur, puis vérifiez. C'est peut-être votre problème de cache

0
Hussain Shabbir