iOS网站互动(NSURLConnection)设计/模式

时间:2012-12-15 19:01:19

标签: ios web-services web nsurlconnection

这是一个关于如何设计与网站互动的应用的问题。

我有一个应用程序,它在网站上查询信息,使用异步NSURLConnection完成(我认为这是iOS中首选的方法)。有问题的网站没有api / web服务界面。交互是像浏览器一样完成的,发送请求,接收答案,解释答案以确定下一步行动。

该网站也使用用户名和密码进行保护。因此,当我想与网站进行互动时(比方说,使用类似:“获取照片列表”,“下载照片”,“上传照片”)我需要先登录,当我完成后我才会退出

我想写这样的函数(但我很乐意接受建议,也许我会以错误的方式看待它)

login
if login successful
  get list of photos
logout

然后在用户要求之后我想

login
if login successful
  download photo
logout

我遇到的问题是,每当您点击NSURLConnection时,都会在-connectionDidFinishLoading收到回复。所以我需要保持某种状态才能知道下一步该做什么,这是用于获取照片列表的登录信息还是登录以下载照片。

现在,问题不在于我不能让它工作,问题是如何干净,高效地设置这样的东西,以便它可以扩展,以便它可以支持20多个甚至50多个用例,仍然是易于维护。强调并非所有用例都像上面说明的那样简单。

我想要实现的一个例子就是facebook应用程序。该应用程序还需要登录到Facebook支持一系列的用例,如发布项目,下载帖子,如帖子,上传照片和许多其他。他们是如何设计这样的东西的?

1 个答案:

答案 0 :(得分:1)

如果问题是如何登录到您的服务器,实施细节将根据您的服务器验证“登录”的方式略有不同。一个模型是一个简单的HTTP POST。另一个模型是authentication challenges,如 URL加载系统编程指南中所述。

如果您不知道您的Web服务器采用了哪种样式,那么如果您尝试使用Web浏览器中的URL访问其中一个安全文件,通常可以弄明白。如果您看到如下屏幕,您的服务器将采用身份验证挑战:

authentication challenge

如果您没有看到Web浏览器生成弹出窗口,而是看到类似HTML“请登录”的消息,那么您可能必须执行POST登录过程。请注意,如果您的服务器使用这种过程,如果通过HTML页面报告登录成功或失败,那么让您的应用程序解密会有点麻烦。如果你有一个提供JSON或XML响应的登录页面版本而不是HTML响应,那将是理想的。我不知道你是否有在你的服务器上做到这一点的自由度,但如果你能这样做,它将极大地简化你的iOS开发。

如果您正在登录进行POST,请参阅SimpleURLConnections sample app以获取有关如何对Web服务器发出简单POST(和GET)请求的演示。

有关如何处理身份验证质询的示例,请参阅AdvancedURLConnections sample app