2010-05-25 11 views
3

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:

  1. UDID
  2. UUID
  3. 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

Répondre

2

Apple recommande l'utilisation de la méthode de UDID que vous vous trouviez. C'est unique et stable pour chaque appareil. D'ailleurs c'est très facile à manipuler. Ne peut pas être lié publiquement à un compte d'utilisateur signifie que vous n'êtes pas en mesure d'obtenir le compte iTunes des utilisateurs sur la base de ce qui ajoute à la sécurité de l'utilisation de cette méthode.

L'UUID change chaque fois que vous le générez. Vous devrez donc le stocker vous-même entre les courses de l'application.

Le numéro de téléphone n'est pas très stable car il peut être modifié par l'utilisateur. De plus, il sera considéré comme une violation des données privées des utilisateurs pour les récupérer, les stocker et les transférer.

Donc, je vous recommande fortement d'utiliser la méthode UDID.

+2

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

+0

merci Claus et RickiG. Très apprécié pour votre temps et votre aide. ce site est incroyable. – Peyman

+0

"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

1

Je dirais utiliser la méthode UUID. Il fournit un identifiant unique pour votre propre application tandis que UDID donne à toutes les applications le même identifiant. La méthode UDID est également obsolète dans iOS 5.