这是一个关于如何设计一个与网站交互的应用程序的问题。
我有一个查询网站信息的应用程序,使用异步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,支持像张贴项目,下载帖子,像帖子,上传照片和许多其他的一系列用例。他们是怎么设计出这样的东西的?
发布于 2012-12-16 03:32:21
如果问题是如何登录到您的服务器,实现细节将根据您的服务器如何验证“登录”而略有不同。一种模型是简单的HTTP POST。另一种模型是authentication challenges,如“URL加载系统编程指南”中所述。
如果您不知道您的web服务器采用的是哪种样式,您通常可以通过尝试使用web浏览器中的URL访问其中一个受保护的文件。如果您看到如下屏幕,您的服务器将面临身份验证挑战:
如果您没有看到web浏览器生成的弹出窗口,而是看到类似HTML“请登录”的消息,那么您可能必须执行POST登录过程。请注意,如果您的服务器正在使用这种过程,如果登录成功或失败是通过HTML页面报告的,那么让您的应用程序解密就有点麻烦了。如果您有一个提供JSON或XML响应而不是HTML响应的登录页面版本,If将是理想的选择。我不知道您是否有足够的空间在服务器上执行此操作,但如果您可以这样做,它将极大地简化您的iOS开发。
如果您正在登录进行POST,请参阅SimpleURLConnections sample app以了解如何向您的web服务器发出简单的POST (和GET)请求。
有关如何处理身份验证挑战的示例,请参阅AdvancedURLConnections sample app。
https://stackoverflow.com/questions/13895208
复制相似问题