これで、すべてのモバイルアプリケーション(非常にまれな例外を除く)がネットワークを使用します。認証、データの送受信などに。
このトピックに関する経験を記事にまとめることにしました。
標準アプリケーションでネットワークを操作すると、いくつかの問題を解決できます。
- 認可
- データの要求と送信
- データストレージ
- 写真を扱う
ログイン
すべてのソーシャルサービスには、Facebookや他の多くのソーシャルネットワークを使用したOAuth認証があります。
それらを介してログインすると、トークンが取得されます。トークンはユーザーIDとともにサーバーに送信され、アプリケーションはそこからセッションIDを受け取ります。 両方のキーがいつでも時代遅れになる可能性があることに留意してください。 セッションが失われた場合、サーバーへの自動再認証が行われます。 トークンが失われた場合、認証ウィンドウがユーザーに表示されます新しいトークンを受け取ったら、サーバーへのリクエストを整理して新しいセッションIDを取得する必要があります。
アプリケーションのリクエストのいずれかが「セッションの有効期限が切れました」というエラー(または同様のエラー)で返された場合、認証方法は自動的に機能し、エラーが発生した方法を実行する必要があります。
アプリケーション画面の遷移
アプリケーションに多数の異なるタブ(メッセージ、友達、プロファイル、チェックイン、ユーザーアクティビティ、ニュース、いいね)があるため、新しいコントローラーごとにデータの読み込みが必要です。 また、アプリケーションの実行中は常にタイマーのデータを要求するサーバーへのバックグラウンド要求があります(新しいメッセージの数の要求、友人への招待、アプリケーション内の通貨残高の変更など)。 また、リクエストのタイプに応じて、コントローラーに更新について同期的または非同期的に通知する必要があります。
サーバーから写真を取得する
あなたが見ることができるように、画像はまったく同じものを使用することができます。 サーバーがURLを高解像度画像にのみ送信する場合、ロード後にキャッシュ、圧縮、丸みを帯びさせる、または角を丸くする必要があります。 アプリケーションの設計に必要なものすべて。
オリジナルをローカルに保存し、画像をリクエストするときにキャッシュされたファイルを検索します。 オリジナルであるが、解像度がより少ないか別の形式を必要とする場合:画像を縮小し、タイプfile_name_resolutionの名前で結果を保存します-表示、いいえ、出荷します。
データ保存
オンラインストアカタログ、チャット履歴、ニュースフィード。 これらはすべて時代遅れであり、かなり大量のデータの変化するボリュームです。 そのようなアクションごとにサーバーメソッドを実行することが最適です。 メッセージのリストを開き、最初の50ポジション(レコード、メッセージ、製品)を要求し、非同期的にアップロードされたアバターまたは製品の写真をリクエストしました。 チャットに切り替えて、このユーザーと最後の50件の履歴メッセージを求め、スクロールしながらさらに50件を求めました。
これにより、転送されるデータの量が減り、アプリケーションはエッジですばやく動作します。
基本アーキテクチャソリューション
主な解決策は、クエリを管理するクラスを整理することです。 ネットワークの操作を担当するシングルトンクラス(またはクラスのセット)。
彼の仕事:
- コールキューを作成し、正しい/正しくないサーバーの応答に応じて自動的に調整します
- 特定のメソッドにサブスクライブされたコントローラーへのデータ受信に関する通知を送信します(nsnotificationを介したiOSで)
- 画像アップロードマネージャーにタスクを送信する
- ユーザーアクティビティのバックグラウンドダウンロードストリームの管理(新しいメッセージ、いいね!などの通知)
iOSでは、クラスは標準のNSConnectionに基づいて実装されました。
要求がキューに追加されます。 それが優先順位を持つ動的配列であるか、NSOperationQueue(iOSのように)であるかはあなた次第です。 キュー内の各リクエストが優先され、認証が失われてエラーが返された場合、再接続のために生成されたリクエストが取得されると、最後のリクエストが最大の優先度を受け取ります。 これにより、ユーザーがボタンをタップし、セッションが失われ、接続エラーが返される状況が回避され、何も起こりません。
今のところすべてです。 第2部では、接続クラスコード、ネイティフィケーションとの相互作用の組織、およびイメージマネージャーの例を提供する予定です。
ありがとう