Facebook使用OAuth/XAuth(?)以编程方式登录

Emi*_*mil 4 facebook oauth objective-c xauth ios4

我正在制作一个应用程序,需要能够分享故事到Facebook,使用以编程方式设置的密码和电子邮件地址(不使用Facebook-Connect,主要是因为我想要我自己的设计,无论您是登录到Twitter还是来自应用程序的Facebook).

我已经使用Twitter和XAuth完成了这项工作,这非常有效.有什么方法可以用Facebook或者只是常规OAuth来实现同样的目标吗?(或Facebook是否支持XAuth,这会让它变得更容易?)
还有其他任何方法可以实现我想要的吗?

tc.*_*tc. 5

理论上,您的应用程序永远不会看到用户的密码.

在实践中,由于代码都在您的应用程序中运行,因此获取用户密码是微不足道的(并且提供类似的 UI以获取用户密码也是微不足道的).

由于您拥有完整的源代码,因此只需调用使用用户名和密码登录的功能即可.我不推荐这个:

  • Facebook可能不会喜欢它,并可能会撤销您应用的API密钥.
  • 您不应该存储用户名/密码,除非您必须,尤其是在NSUserDefaults(Settings.app使用)中,因为它完全未加密.
  • Setting.app不支持密码字段.
  • 用户不必退出您的应用,转到"设置",添加登录详细信息,然后切换回您的应用.这是一个有点更好地与"多任务处理",但不是说更好.

使用普通的Facebook登录界面有什么问题?

编辑:更多细节......

  • AFAIK,您无法可靠地加密由Settings.app保存的NSUserDefaults.您无法决定将其写入哪个文件(我认为是Library/Preferences/com.example.myapp.plist).在iOS 4中,您可以设置NSFileProtectionKey = NSFileProtectionComplete,但这有很多问题:
    • 你在你的应用程序中设置它.用户可以在运行应用程序之前转到Settings.app.
    • 虽然可以在你的app zip/ipa中包含Library/Preferences/com.example.myapp.plist,但我认为不可能包含NSFileProtectionKey属性.
    • NSUserDefaults通过将新plist写入新文件并将文件重命名为旧文件来"原子地"更新plist.新文件不太可能有NSFileProtectionKey = NSFileProtectionComplete.
    • 最终,如果您将数据控制权交给不能保证安全性的API,那么它就是不安全的(NSUserDefaults似乎容易留下许多临时文件......).Apple提供了专门用于存储密码的钥匙链(甚至还有一些不错的示例代码!); 用它.
  • Apple不建议使用Settings.bundle以及您自己的设置屏幕 - 您应该选择其中一个.