2

これは、ウェブサイトと相互作用するアプリを設計する方法についての質問です。

私は、非同期で行われる情報をWebサイトに照会するアプリを持っていますNSURLConnection(これはiOSで推奨される方法だと思います)。問題のWebサイトには、api/web-serviceインターフェースがありません。インタラクションは、ブラウザが行うように行われ、リクエストを送信し、回答を受け取り、回答を解釈して次のアクションを決定します。

このサイトは、ユーザー名とパスワードで保護されています。したがって、Webサイトを操作する場合(たとえば、「写真のリストを取得する」、「写真をダウンロードする」、「写真をアップロードする」などのユースケース)、最初にログインする必要があり、終了したらログアウトします。 。

私は自分の関数をこのように書きたいです(しかし、私は提案に対して非常にオープンです、おそらく私はそれを間違った方法で見ています)

login
if login successful
  get list of photos
logout

その後、ユーザーがそれを求めた後、私はしたいです

login
if login successful
  download photo
logout

私が遭遇している問題は、あなたが発砲するたびNSURLConnectionに、返信がで受信されること-connectionDidFinishLoadingです。だから私は次に何をすべきかを知るためにある種の状態を保つ必要があります、それは写真のリストを取得するためのこのログインでしたか、それとも写真をダウンロードするためのログインでしたか。

問題は、これを機能させることができないということではありません。問題は、このようなものをクリーンかつ効率的に設定して、20以上または50以上のユースケースをサポートし、それでも簡単に保守できるように拡張できるようにする方法です。すべてのユースケースが上に示したものほど単純ではないことを強調します。

私が達成しようとしていることの例は、例えばFacebookアプリです。そのアプリはまた、Facebookにログインして、アイテムの投稿、投稿などの投稿のダウンロード、写真のアップロードなど、さまざまなユースケースをサポートする必要があります。彼らはどのようにこのようなものを設計しましたか?

4

1 に答える 1

1

問題がサーバーへのログイン方法である場合、実装の詳細は、サーバーが「ログイン」を認証する方法に基づいて少し異なります。1 つのモデルは単純な HTTP POST です。もう 1 つのモデルは、 URL ローディング システム プログラミング ガイドで説明されている認証チャレンジです。

Web サーバーが採用しているスタイルがわからない場合は、Web ブラウザーから URL を使用して保護されたファイルの 1 つにアクセスしようとすると、通常はそれを理解できます。次のような画面が表示された場合、サーバーは認証チャレンジを採用しています。

認証チャレンジ

Web ブラウザで生成されたポップアップが表示されず、HTML の「ログインしてください」メッセージのようなものが表示される場合は、おそらく POST ログイン プロセスを実行する必要があります。サーバーがこの種のプロセスを使用している場合、ログインの成功または失敗が HTML ページを介して報告される場合、アプリで解読するのは少し面倒です。HTML 応答ではなく、JSON または XML 応答を提供するログイン ページのバージョンがあれば理想的です。サーバーでそれを行う余裕があるかどうかはわかりませんが、そのように行うことができれば、iOS 開発が大幅に簡素化されます。

POST を実行してログインしている場合は、Web サーバーの単純な POST (および GET) 要求を作成する方法のデモについて、 SimpleURLConnections サンプル アプリを参照してください。

認証チャレンジを処理する方法の例については、 AdvancedURLConnections サンプル アプリを参照してください。

于 2012-12-15T19:32:20.653 に答える