2

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

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

该站点还使用用户名和密码进行保护,并且确实如此。因此,当我想与网站交互时(比如说,用例,例如:“获取照片列表”、“下载照片”、“上传照片”),我需要先登录,完成后我要退出.

我想这样写我的函数(但我很愿意接受建议,也许我看错了)

login
if login successful
  get list of photos
logout

然后当用户要求它之后,我想

login
if login successful
  download photo
logout

我遇到的问题是,每次你触发 anNSURLConnection时,都会收到回复-connectionDidFinishLoading。所以我需要保持某种状态才能知道下一步该做什么,是获取照片列表的登录名还是下载照片的登录名。

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

我试图实现的一个例子是 facebook 应用程序。该应用程序还需要登录 facebook 以支持各种用例,例如发布项目、下载帖子、发布帖子、上传照片等。他们是如何设计出这样的东西的?

4

1 回答 1

1

如果问题是如何登录到您的服务器,则实施细节将根据您的服务器如何验证“登录”而有所不同。一种模型是简单的 HTTP POST。另一种模型是URL 加载系统编程指南中讨论的身份验证挑战。

如果您不知道您的 Web 服务器采用了哪种样式,您通常可以通过您的 Web 浏览器尝试使用 URL 访问其中一个受保护的文件来弄清楚。如果您看到这样的屏幕,您的服务器正在使用身份验证挑战:

身份验证质询

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

如果您正在登录并执行 POST,请参阅SimpleURLConnections 示例应用程序,了解如何对您的 Web 服务器发出简单的 POST(和 GET)请求。

有关如何处理身份验证质询的示例,请参阅AdvancedURLConnections 示例应用程序。

于 2012-12-15T19:32:20.653 回答