2010-09-28 7 views
4

Je fais une application qui doit pouvoir partager des histoires sur Facebook, en utilisant un mot de passe et une adresse e-mail qui a été définie par programme (sans utiliser Facebook-Connect, surtout parce que je veux ma propre conception, si vous vous connectez à Twitter ou Facebook à partir de l'application).Connexion Facebook par programmation en utilisant OAuth/XAuth (?)

Je l'ai déjà fait avec Twitter et XAuth, et cela fonctionne très bien. Y a-t-il un moyen de parvenir à la même chose avec Facebook, ou simplement avec OAuth? (Ou est-ce que Facebook prend en charge XAuth, ce qui le rendrait beaucoup plus facile?)
Existe-t-il un autre moyen de réaliser ce que je veux?

+0

** La prime sur cette question n'a été attribuée à personne, parce que personne n'a réellement résolu mon problème. ** _Juste au cas où quelqu'un se demandait .._ – Emil

+0

À noter que c'est contre les TOS. –

+0

@JamesBillingham C'est aussi à partir de 3 ans, peu pertinent car il existe des API faciles à utiliser inclus dans iOS. – Emil

Répondre

5

La théorie est que votre application ne devrait jamais voir le mot de passe de l'utilisateur. En pratique, puisque le code fonctionne dans votre application, il est trivial d'obtenir le mot de passe de l'utilisateur (et il est aussi trivial de présenter une interface utilisateur similaire pour récupérer le mot de passe de l'utilisateur).

Puisque vous avez du code source complet, il devrait être assez facile de simplement appeler la fonction qui se connecte avec le nom d'utilisateur et le mot de passe. Je ne recommande pas ceci:

  • Facebook probablement ne l'aimera pas, et pourrait révoquer la clé API de votre application.
  • Vous ne devez pas stocker de noms d'utilisateur/mots de passe sauf si vous devez absolument, en particulier dans NSUserDefaults (que Settings.app utilise) car il est complètement non crypté.
  • Setting.app ne prend pas en charge les champs de mot de passe.
  • L'utilisateur ne devrait pas avoir à quitter votre application, à accéder aux paramètres, à ajouter des informations de connexion et à revenir à votre application. C'est un bit mieux avec "multitâche", mais pas beaucoup mieux.

Quel est le problème avec l'utilisation de l'écran de connexion Facebook normal?

EDIT: Plus de détails ...

  • afaik, vous ne pouvez pas fiable Crypter NSUserDefaults comme sauvé par Settings.app. Vous ne pouvez pas décider à quel fichier cela est écrit (Library/Preferences/com.example.myapp.plist, je pense). Dans iOS 4, vous pouvez définir NSFileProtectionKey = NSFileProtectionComplete, mais cela a un tas de problèmes:
    • Vous définissez cela dans votre application. L'utilisateur peut accéder à Settings.app avant d'exécuter votre application.
    • Bien qu'il soit supposé possible d'inclure Library/Preferences/com.example.myapp.plist dans votre application zip/ipa, je ne pense pas qu'il soit possible d'inclure l'attribut NSFileProtectionKey.
    • NSUserDefaults met à jour le plist "atomiquement" en écrivant le nouveau plist dans un nouveau fichier et en renommant le fichier par-dessus l'ancien. Il est peu probable que le nouveau fichier ait NSFileProtectionKey = NSFileProtectionComplete.
    • En fin de compte, si vous donnez le contrôle des données à une API qui ne donne aucune garantie sur la sécurité, elle n'est pas sûre (NSUserDefaults semble avoir tendance à laisser lots des fichiers temporaires qui traînent ...). Apple a fourni le trousseau spécifiquement pour stocker les mots de passe (il y a même un exemple de code décent!); utilise le.
  • Apple ne recommande pas d'utiliser Settings.bundle et aussi votre propre écran de paramètres - vous êtes censé choisir l'un ou l'autre.
+0

Je pense que l'écran de connexion Facebook est moche. C'est aussi partiellement pourquoi je veux le faire de cette façon. Les mots de passe sont maintenant cryptés et stockés quelque part plus sûr. J'ai encore besoin de savoir comment je peux créer une nouvelle session Facebook avec une adresse e-mail et un mot de passe, cependant. – Emil

+0

Facebook utilise un webview pour se connecter avec, donc je ne peux pas simplement appeler une fonction. ** Cette réponse n'a PAS résolu ma question. ** – Emil

+0

Le code source complet est là. Déplacez-vous, lancez les mêmes requêtes HTTP que la vue Web et stockez le jeton d'authentification. Tout se passe dans votre espace d'adressage, donc il n'y a aucune raison que vous ayez réellement besoin de la vue web (Facebook pourrait essayer d'obscurcir le code HTML pour rendre les connexions programmatiques plus difficiles, mais il n'y a aucune raison de contourner cela). –

2

Pour les sites utilisant OAuth, comme Facebook, ce que vous essayez de faire est de contourner la sécurité des utilisateurs. Pour une simple description de OAuth, consultez ce lien: http://bit.ly/awynlU La version courte est que Facebook est en charge de l'authentification de l'utilisateur et le fait sur leurs serveurs. Comme l'a mentionné tc, la théorie est que vous ne voyez jamais le mot de passe.

Bon, mauvais ou indifférent, ce que vous voulez faire est censé être évité. Si cela peut être fait, c'est en violation du modèle de sécurité que le site a mis en place - Facebook dans ce cas. Incidemment, Twitter s'oriente également vers OAuth. Selon l'information que j'ai, "À partir du 31 août, toutes les applications seront nécessaires pour utiliser" OAuth "pour accéder à votre compte Twitter."

+0

J'ai effectivement implémenté Twitter aujourd'hui comme je veux que Facebook soit implémenté, donc ça devrait marcher. J'ai utilisé XAuth, cependant.Facebook n'a pas la possibilité d'utiliser XAuth, n'est-ce pas? – Emil

1

Je me demande pourquoi voulez-vous vraiment aller avec une telle approche hackish. L'utilisateur n'a besoin de se connecter qu'une seule fois pour obtenir le Token OAuth2 et de là, vous pouvez poster autant de fois que vous le souhaitez sur Facebook, sans même demander à l'utilisateur de se connecter avec Facebook.

+0

Je veux un design lisse. – Emil

1

Vous devriez être en mesure d'utiliser le nouveau SDK facebook pour implémenter l'authentification unique facebook. De cette façon, si l'utilisateur a déjà installé l'application facebook sur son appareil, il est déjà connecté et c'est une bien meilleure expérience que l'ancienne implémentation de popup de connexion. La permission doit être donnée pour que votre application accède à leur compte mais autrement que l'écran de connexion moche n'est pas utilisé.

Si l'application Facebook n'est pas installée, elle sera transférée au navigateur.

Les deux méthodes utilisent la gestion d'URL pour retourner à votre application une fois authentifiée.

En savoir plus ici: http://developers.facebook.com/docs/mobile/ios/build/#implementsso

En ce qui concerne la mise en œuvre de votre propre écran de connexion en mode natif à la place, cela est contre TOS Facebook comme ils veulent un signe cohérent et familier dans la plate-forme pour éviter les problèmes de phishing répandus, etc. Ils fortement pousser pour éduquer leurs utilisateurs à fournir uniquement leurs noms d'utilisateur et mots de passe à des pages légitimes.

Questions connexes