2012-12-15 92 views
2

這是一個關於如何設計與網站交互的應用程序的問題。iOS網站互動(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

如果問題是如何登錄到您的服務器,根據您的服務器如何驗證「登錄」,實現細節會有所不同。一個模型是一個簡單的HTTP POST。另一種模式是authentication challenges,如URL加載系統編程指南中所述。

如果您不知道您的Web服務器採用了哪種風格,那麼如果您嘗試使用Web瀏覽器中的URL訪問其中一個安全文件,通常就可以知道它。您的服務器使用的身份驗證挑戰,如果你看到這樣的畫面:

authentication challenge

如果您沒有看到一個網頁瀏覽器生成的彈出,而是看有點像HTML「請登錄」消息,那麼你可能不得不做POST登錄過程。請注意,如果您的服務器正在使用這種過程,如果登錄的成功或失敗是通過HTML頁面報告的,那麼讓您的應用解密有點麻煩。如果您有一個提供JSON或XML響應的登錄頁面版本,而不是HTML響應,那麼這將是理想選擇。我不知道你有沒有在服務器上這樣做的自由度,但如果你能這樣做,它將大大簡化你的iOS開發。

如果您正在登錄進行POST,請參閱SimpleURLConnections sample app以獲取有關如何對Web服務器進行簡單POST(和GET)請求的演示。

有關如何處理身份驗證挑戰的示例,請參閱AdvancedURLConnections sample app

+0

感謝Rob,你的回答很有幫助,但是......這不是如何實現特定認證方法的問題。我想知道如何以乾淨的可擴展方式使用NSUrlConnection。我會看看你提供的技巧和指針的例子。 – DIJ

+0

@DIJ如果你正在挖掘源代碼的靈感,我可能還建議你考慮瀏覽['AFNetworking'](https://github.com/AFNetworking/AFNetworking)或['RestKit']的代碼http://restkit.org)(它本身也建立在'AFNetworking'上)。這些提供了「NSURLConnection」功能,同時提供了一些有價值的抽象。這可能是你的衚衕。 – Rob