web-dev-qa-db-fra.com

Comment puis-je récupérer l'UDID sur iOS?

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?

38
Oh Danny Boy

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 .

67
Jacob Relkin

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!

11
DZenBot

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);
6
ravinder521986

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 ??

3
Miros

Le meilleur moyen est de le faire comme ça

NSString *udid = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
2
user3711806

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.

2
AncAinu

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.

2
El Tomato

Que diriez-vous d'utiliser [OpenUDID] lib https://github.com/ylechelle/OpenUDID

1
Minh Hoang Truong

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.enter image description here

http://www.raywenderlich.com/2915/ios-code-signing-under-the-hood/organizerudid

1
swathy krishnan

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.

0
Femina