Je suis à la recherche d'un modèle de conception d'enregistrement et d'authentification stable (et conforme à Apple) entre un périphérique iPhone et un serveur. Idéalement, l'enregistrement et l'authentification n'impliqueraient pas l'utilisateur et constitueraient un processus d'arrière-plan.motif d'enregistrement et d'authentification de l'iphone
Jusqu'à présent, j'ai trouvé 3 primitives pour faire des composants de ceci:
- UDID
- UUID
- SBFormattedPhoneNumber
méthode UDID
[[UIDevice currentDevice] uniqueIdentifier]
where @property (nonatomic, readonly, retain) NSString *uniqueIdentifier
uniqueIdentifier est une chaîne unique à chaque périphérique basée sur divers détails matériels. (lecture seule)
Un identifiant de périphérique unique est une valeur de hachage composée de divers identifiants matériels tels que le numéro de série du périphérique. Il est garanti d'être unique pour chaque appareil, mais ne peut pas être lié publiquement à un compte d'utilisateur. Vous pouvez l'utiliser, par exemple, pour stocker des scores élevés pour un jeu dans un serveur central ou pour contrôler l'accès à des produits enregistrés. L'identifiant unique de l'appareil est parfois désigné par son abréviation UDID. Nous pouvons obtenir UDID à partir d'iTunes manuellement pour vérifier
Je ne sais pas ce que « ne peut pas être publiquement lié à un compte utilisateur » moyens.
procédé UUID
NSString *uuid = nil;
CFUUID theUUID = CFUUIDCreate(kCFAllocatorDefault);
if (theUUID) {
uuid = NSMakeCollectable(CFUUIDCreateString(kCFAllocatorDefault, theUUID);
CFRelease(theUUID);
}
CFUUIDCreate crée un objet identificateur unique universel (UUID). L'objet UUID est différent chaque fois que CFUUIDCreate est appelée. Par conséquent, nous devons le générer au premier lancement, puis enregistrez-le dans vos préférences en utilisant NSUserDefaults. L'inconvénient est que si l'application est supprimée et réinstallée ou si l'appareil est restauré à partir de la sauvegarde, vous perdrez l'UUID enregistré et les choses ne seront pas reconnues depuis le même appareil.
SBFormattedPhoneNumber
NSString *num = [[NSUserDefaults standardUserDefaults] stringForKey:@”SBFormattedPhoneNumber”];
NSLog(@”Phone Number: %@”, num);
Le numéro retourné par ce code snippit est le nombre qui est mis en place dans iTunes pour l'appareil. Si vous n'avez pas entré l'iPhone dans iTunes lors de l'activation de l'appareil, ou peut-être [comme dans mon cas] si la valeur par défaut n'était pas le numéro de l'iPhone et que vous avez cliqué sur OK, iTunes ne liste pas le numéro de téléphone. L'iPhone est branché, ce code retournera une chaîne vide. "Pour des raisons de sécurité, iPhone OS limite une application (y compris ses préférences et ses données) à un emplacement unique dans le système de fichiers.Cette restriction fait partie de la fonction de sécurité connue sous le nom de" sandbox "de l'application. ensemble de contrôles affinés limitant l'accès d'une application aux fichiers, aux préférences, aux ressources réseau, au matériel, etc.
Le numéro de téléphone du périphérique n'est pas disponible dans le conteneur de votre application. Vous devrez modifier votre application pour la lire uniquement dans votre conteneur d'annuaire et renvoyer votre fichier binaire à iTunes Connect afin que votre application soit reconsidérée pour l'App Store.
merci d'avance pour votre aide.
peyman
Je suis d'accord avec Claus, le [UIDevice uniqueIdentifier] est le meilleur moyen d'identifier un iPhone. Mais l'identifiant n'est pas un secret donc envisage également de compiler un "secret" (quelques x caractères aléatoires) dans l'application, puis de construire une somme de contrôle avec toutes les valeurs et le secret lors de l'authentification et de l'envoyer en paramètre. Cette approche rendra plus difficile pour quelqu'un de faire une attaque «man-in-the-middle» et se poser comme un iPhone authentifié. – RickiG
merci Claus et RickiG. Très apprécié pour votre temps et votre aide. ce site est incroyable. – Peyman
"Ne peut être lié publiquement à un compte d'utilisateur ..." Je peux lire ceci comme une limitation technique ("l'application n'a pas accès à cette information" - je pense que c'est ainsi que Claus l'explique) ou une restriction légale (" Chez Apple, nous ne voulons pas que vous les associiez "). Je me demande si Claus ou Ricki peuvent commenter à ce sujet. – iter