簡體   English   中英

iOS網站互動(NSURLConnection)設計/模式

[英]iOS website interaction (NSURLConnection) design/pattern

這是一個有關如何設計與網站交互的應用程序的問題。

我有一個應用程序,它通過異步NSURLConnection (我認為這是iOS中的首選方法)來查詢網站的信息。 有問題的網站沒有api / web-service界面。 就像瀏覽器一樣進行交互,發送請求,接收答案,解釋答案以確定下一步操作。

該站點還使用用戶名和密碼進行安全保護。 因此,當我想與該網站進行交互時(例如,用例:“獲取照片列表”,“下載照片”,“上傳照片”),我需要先登錄,完成后我要注銷。

我想這樣寫我的函數(但是我很樂於接受建議,也許我看錯了方向)

login
if login successful
  get list of photos
logout

然后,當用戶要求時,我想

login
if login successful
  download photo
logout

我遇到的問題是,每次觸發NSURLConnection ,都會在-connectionDidFinishLoading收到答復。 因此,我需要保持某種狀態才能知道下一步該做什么,這是獲取照片列表的登錄名,還是下載照片的登錄名。

現在,問題不是我無法解決這個問題,而是問題是如何干凈,有效地設置類似的內容,以便可以擴展規模,使其可以支持20甚至50多個用例,並且仍然易於維護。 強調並不是所有用例都像上面說明的那樣簡單。

我想要達到的目標的一個例子是Facebook應用程序。 該應用程序還需要登錄到Facebook,以支持各種用例,例如發布項目,下載帖子(例如帖子),上傳照片等。 他們如何設計這樣的東西?

如果問題是如何登錄到服務器,則實現細節將根據服務器對“登錄”進行身份驗證的方式而有所不同。 一種模型是簡單的HTTP POST。 另一個模型是“ URL加載系統編程指南”中討論的身份驗證挑戰

如果您不知道Web服務器采用的是哪種樣式,通常可以通過嘗試使用Web瀏覽器中的URL訪問其中一個受保護的文件來解決。 如果您看到以下屏幕,則您的服務器正在使用身份驗證挑戰:

認證挑戰

如果您沒有看到Web瀏覽器生成的彈出窗口,而是看到類似HTML“ please log in”的消息,那么您可能必須執行POST登錄過程。 請注意,如果您的服務器正在使用這種過程,則登錄成功或失敗是通過HTML頁面報告的,那么您的應用程序解密就有些麻煩了。 如果您有一個提供JSON或XML響應而不是HTML響應的登錄頁面版本,那將是理想的選擇。 我不知道您是否有能力在服務器上執行此操作,但是如果您可以這樣做的話,它將大大簡化您的iOS開發。

如果您要登錄進行POST,請參見SimpleURLConnections示例應用程序,以獲取有關如何對Web服務器進行簡單POST(和GET)請求的演示。

有關如何處理身份驗證挑戰的示例,請參閱AdvancedURLConnections示例應用程序

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM