web-dev-qa-db-fra.com

Comment générer un identifiant unique d'appareil pour iPhone/iPad à l'aide d'Objective-c

Je voulais savoir que Comment générer un identifiant unique d'appareil pour iPhone/iPad avec Objective-c  

de sorte qu'une fois l'application installée sur l'appareil, nous devrions donc suivre cet identifiant de périphérique

  • J'ai cherché à récupérer l'IMEI de l'iPhone/iPad, mais ce n'est pas autorisé dans objective-c.

  • Ensuite, j'ai cherché à générer l'UDID de l'iPhone/iPad, mais il génère pour un ID différent chaque fois que je le lançais sur simulateur.

6
Poonam K.

Oui, UDID est obsolète. nous ne sommes pas autorisés à obtenir UDID pour des raisons de confidentialité. Apple n'autorise pas l'obtention d'identificateurs identifiant de manière unique un périphérique, tels que IMEI, une adresse MAC, un UDID, etc.

UUID est la meilleure voie à suivre dès maintenant. Mais ce serait unique pour chaque fournisseur. Vous n'êtes pas assuré que ce sera unique à chaque fois que vous obtenez la chaîne UUID. La meilleure solution consiste à stocker la chaîne UUID dans le trousseau du téléphone et à la récupérer en cas de besoin, avec un crochet. Lorsque vous réinitialisez le téléphone aux paramètres d’usine, les éléments du trousseau sont effacés. Cette limitation doit être prise en compte.


UPDATE - IN IOS 10.3 BETA'S:

Il semble qu'Apple ait apporté quelques modifications au fonctionnement de Keychain dans iOS 10.3+. Les éléments de trousseau stockés dans le trousseau seront supprimés lorsque toutes les applications du fournisseur en question sont désinstallées. Selon Apple, la présence d'informations sensibles sur une application même après le retrait de celle-ci de l'appareil pourrait entraîner des risques pour la sécurité. Ils ont donc décidé d'interdire ce type de comportement.

Les développeurs qui utilisent le stockage Keychain même après la désinstallation de leurs applications peuvent utiliser cette SOLUTION DE CONTOURNEMENT pour continuer à utiliser les fonctionnalités prévues. Selon cette solution de contournement, toute application peut accéder aux informations stockées dans ce groupe d’accès au trousseau spécifique. Il est donc recommandé d’ajouter une couche supplémentaire de cryptage à vos données pour les protéger encore plus, bien que le trousseau crypte les éléments par défaut.


UPDATE - IOS 10.3.3 (STABLE): Il semble que la suppression des éléments du trousseau ait été un bogue dans les versions antérieures de iOS 10.3.3 et a été corrigée ultérieurement dans la version stable . Cela peut avoir été causé pendant les bêta car des choses étranges peuvent se produire pendant cette phase. L'utilisation du trousseau ci-après ne devrait poser aucun problème.

13
Badhan Ganesh

Vous pouvez utiliser UUID (Universal User Identification). Le lien suivant contient la documentation Apple 

https://developer.Apple.com/reference/uikit/uidevice/1620059- identifierforvendor

https://developer.Apple.com/library/content/releasenotes/General/WhatsNewIniOS/Articles/iOS7.html#// Apple_ref/doc/uid/TP40013162-SW1

vous pouvez utiliser ce code pour UUID: 

//Objectif c

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

//Rapide

let deviceID = UIDevice.currentDevice().identifierForVendor?.UUIDString 

// Swift 3

let deviceID = UIDevice.current.identifierForVendor?.uuidString
7
Asaduzzaman Shuvro

Utilisez le code ci-dessous pour obtenir UDID pour le périphérique iOS Utilisez le téléchargement de la classe KeychainItemWrapper à partir de l'URL KeychainItemWrap

NSString *uuid;
KeychainItemWrapper *keychain = [[KeychainItemWrapper alloc] initWithIdentifier:@"AC_APP_UUID" accessGroup:nil];
NSString *keychainUUID = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
NSString *appVersion = [NSString stringWithFormat:@"%@",@"1.0"];
[keychain setObject:appVersion forKey:(__bridge id)(kSecAttrDescription)];
if (keychainUUID==nil||[keychainUUID isKindOfClass:[NSNull class]]||keychainUUID.length==0) {
    uuid = [[NSUUID UUID] UUIDString];
    [keychain setObject:uuid forKey:(__bridge id)(kSecAttrAccount)];
}else{
    uuid = [keychain objectForKey:(__bridge id)(kSecAttrAccount)];
}
5
SM18

Toute personne venant ici après 2017, Apple a implémenté DeviceCheck à cette fin. 

https://developer.Apple.com/documentation/devicecheck#overview

Vous pouvez utiliser DeviceCheck pour voir si ce périphérique particulier a installé ou utilisé votre application particulière. Cela ne vous donne pas un identifiant unique pour le téléphone, mais vous permet de voir si un utilisateur a gravé une promotion ou non.

0
nelsonenzo