Je me demandais s'il était possible de connaître l'UDID de l'iPhone de l'utilisateur. Quelqu'un peut-il faire la lumière?
Remarque: Apple n'acceptera plus les applications qui accèdent à l'UDID d'un appareil à partir du 1er mai 201 .
À la place, vous devez utiliser les nouvelles méthodes identifierForVendor
et advertisingIdentifier
dans iOS 6+ pour y accéder. Voir article connexe ici pour plus de détails.
Ancienne méthode (obsolète et entraînera le rejet de l'App Store)
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
Depuis iOS7, la propriété uniqueIdentifier
n'est plus disponible.
Voir la référence UIDevice
.
Comme certains l'ont dit, dans iOS5, cela est obsolète:
NSString *udid = [[UIDevice currentDevice] uniqueIdentifier];
Apple dispose désormais de 3 API pour obtenir un UUID (Universally Unique Identifier) de l'appareil:
Alternative 1 (classe NSUUID):
NSString *udid = [[NSUUID UUID] UUIDString];
Alternative 2 (classe UIDevice):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
Alternative 3 (classe ASIdentifierManager, nécessite le framework AdSupport):
NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];
Mais ils sont tous alphanumériques, et un identifiant unique d'appareil typique n'est que des chiffres. Donc, ces 3 API sont inutiles, et l'ancien [[UIDevice currentDevice] uniqueIdentifier] fonctionne toujours dans iOS6, mais pour combien de temps?
Si l'avertissement "obsolète" vous dérange, ajoutez simplement:
#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
J'espère que cela aide!
Dans IOS5 et supérieur, utilisez celui-ci pour trouver l'UDID
NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
Il peut être utile de mentionner que l'identifiant ForVendor n'est pas unique pour un appareil, il peut et finira par changer.
Apple dit ceci à propos de identifierForVendor :
La valeur de cette propriété est la même pour les applications provenant du même fournisseur et exécutées sur le même appareil. Une valeur différente est renvoyée pour les applications sur le même appareil provenant de différents fournisseurs et pour les applications sur différents appareils, quel que soit le fournisseur.
Si la valeur est nulle, attendez et récupérez-la plus tard. Cela se produit, par exemple, après le redémarrage de l'appareil mais avant que l'utilisateur n'ait déverrouillé l'appareil.
La valeur de cette propriété reste la même pendant que l'application (ou une autre application du même fournisseur) est installée sur l'appareil iOS. La valeur change lorsque l'utilisateur supprime toutes les applications de ce fournisseur de l'appareil et réinstalle par la suite une ou plusieurs d'entre elles. La valeur peut également changer lors de l'installation de versions de test à l'aide de Xcode ou lors de l'installation d'une application sur un appareil à l'aide d'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'identifiant change.
Mais ce qui est encore pire, c'est qu'il semble que Apple supprime également le dernier recours d'utiliser l'adresse MAC comme identifiant unique, selon this AVG Blog .
Alors, que faire maintenant, si nous voulons identifier de manière unique les appareils - par exemple. pour les licences, les paramètres ou à d'autres fins ??
Le meilleur moyen est de le faire comme ça
NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
Je ne peux pas commenter, mais je voudrais avertir les autres. En réponse à DZenBot, toutes les méthodes ne donnent pas les mêmes résultats:
Alternative 1 (classe NSUUID):
NSString *udid = [[NSUUID UUID] UUIDString];
Alternative 2 (classe UIDevice) (Disponible dans iOS 6.0 et versions ultérieures):
NSString *udid = [[[UIDevice currentDevice] identifierForVendor] UUIDString];
Alternative 1 générer un ID aléatoire while Alternative 2 donne un ID fixe qui ne changera pas.
Dans IOS5 et supérieur, utilisez celui-ci pour trouver l'UDID
NSString * uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate (NULL); ...
Je pense que vous montrez comment générer un numéro d'identification unique, pas pour obtenir l'identifiant unique d'un appareil.
Que diriez-vous d'utiliser [OpenUDID] lib https://github.com/ylechelle/OpenUDID
C'est très simple. Accédez à la fenêtre Xcode et sélectionnez Périphériques ou vous pouvez le trouver dans l'Organiseur.
http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid
Rappelez-vous que l'UDID est déconseillé dans IOS 5. Dans iOS 7, Apple renvoie désormais toujours une valeur fixe lors de l'interrogation du MAC pour contrecarrer spécifiquement le MAC comme base pour un schéma d'ID . Vous devez donc vraiment utiliser - [UIDevice identifierForVendor] ou créer un UUID par installation. J'espère qu'il le fera aider quelqu'un.