38 votes

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?

67voto

Jacob Relkin Points 90729

Remarque: Apple n'acceptera plus les applications que l'accès à l'UDID d'un dispositif à compter du 1er Mai 2013.

Au lieu de cela, vous devez utiliser les nouvelles méthodes identifierForVendor et advertisingIdentifier dans iOS 6+ pour accéder à ce. Voir related post ici pour plus de détails.


Ancienne (obsolète et entraînera dans l'App Store ou le rejet)

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

Comme d'iOS7, l' uniqueIdentifier de la propriété n'est plus disponible.

Voir l' UIDevice de référence.

11voto

DZenBot Points 1154

Comme certains ont dit, dans iOS5 elle est obsolète:

NSString *udid = [[UIDevice currentDevice] uniqueIdentifier]

Apple a maintenant 3 Api pour obtenir un UUID de l'appareil:

La variante 1 (NSUUID classe):

NSString *udid = [[NSUUID UUID] UUIDString]

La variante 2 (UIDevice classe):

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

La variante 3 (ASIdentifierManager classe, elle ne requiert qu'AdSupport cadre):

NSUUID *UUID = [[ASIdentifierManager sharedManager] advertisingIdentifier];
NSString *udid = [UUID UUIDString];

Mais ils sont tous alphanumérique, et une ferme typique dispositif identificateur unique est uniquement des chiffres. Donc, thos 3 Api sont inutiles, et l'ancien [[UIDevice currentDevice] uniqueIdentifier] travaille toujours dans iOS6, mais pour combien de temps?

Si le "obsolète" avertissement qui vous dérange, il suffit d'ajouter:

#pragma GCC diagnostic ignored "-Wdeprecated-declarations"

Espérons que cela aide!

6voto

ravinder kumar Points 427

Dans IOS5 et supérieur, utilisez celui-ci pour trouver UDID

 NSString *uuidString = nil;
CFUUIDRef uuid = CFUUIDCreate(NULL);
if (uuid) {
    uuidString = (__bridge NSString *)CFUUIDCreateString(NULL, uuid);
    CFRelease(uuid);
}
NSLog(@"UDID: [%@]", uuidString);
 

3voto

Miros Points 129

Il pourrait être utile de mentionner que la identifierForVendor n'est pas unique pour un périphérique, il peut et va changer éventuellement.

Apple dit ceci à propos de identifierForVendor:

La valeur de cette propriété est la même pour les applications qui viennent de la même fournisseur en cours d'exécution sur le même appareil. Une autre valeur est retournée pour les applications sur le même appareil qui viennent de différents fournisseurs, et pour applications sur différents appareils, quel que soit le fournisseur.

Si la valeur est nulle, d'attente et d'obtenir de nouveau la valeur plus tard. Ce qui se passe, par exemple, après que le dispositif a été redémarré mais avant que l'utilisateur a déverrouillé le périphérique.

La valeur de cette propriété reste la même, tandis que l'application (ou un autre app de la même vendeur) est installé sur l'appareil iOS. La valeur les changements lorsque l'utilisateur supprime tous que fournisseur d'applications de l' appareil et ensuite réinstalle un ou plusieurs d'entre eux. La valeur peut aussi changer lors de l'installation de versions de test en utilisant Xcode, ou lors de l'installation d'une application sur un périphérique en utilisant ad-hoc de la distribution. Par conséquent, si votre app stores la valeur de cette propriété n'importe où, vous devez gérer harmonieusement les situations où l'identificateur de changements.

Mais ce qui est encore pire, c'est qu'il semble que Apple est aussi la suppression de la dernière station de l'aide de l'adresse MAC Unique identifyer, selon ce AVG Blog.

Alors, que faire maintenant, si nous voulons identifier les appareils - eg. pour les licences, les paramètres ou à d'autres fins??

2voto

El Tomato Points 1347

Dans IOS5 et supérieur, utilisez celui-ci pour trouver UDID

NSString * uuidString = nil;

CFUUIDRef uuid = CFUUIDCreate (NULL); ...

Je pense que vous montrez comment générer un numéro d'identification unique et non pas obtenir l'identifiant unique d'un périphérique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X