部分的に(または完全に)ユーザーによって生成された大量のトラフィックとコンテンツを使用するプロジェクトに取り組んでいる場合、モバイルクライアントを作成するのが良いと考えている可能性が高いでしょう。 そのため、プロジェクトに取り組んでいる私たちは、ユーザーがプロジェクトを積極的に使用して、新しいコンテンツを積極的に作成することを決定しました。 さらに、ユーザーの生活を楽にすることができます。
そしてやった。 注意、多くの写真とテキスト。
現時点でロシアで最も人気のあるモバイルプラットフォーム-iOSとAndroid。 私たちは最初にiPhone用に書くことにしました。
ユースケース
そのため、長年にわたって蓄積されたレストラン、バー、カフェの巨大なデータベースを備えたポータルがあります。 レストランのデータベースに加えて、それらについての膨大な数のレビューがあります。
友人と一緒に施設に来たときに、場所がなかったり、騒々しい、喫煙したり、何らかの理由で今日はあなたに合わないという状況になったことはありますか? 個人的に、私の同僚と私はそのような状況にありました。 あなたが最初に考えることは、あなたが夜を過ごすことができる施設が近くのどこかにあるかどうかです。 この状況でユーザーを支援することにしました。
ユーザーとアプリケーションの相互作用について考え始めました。 彼らはいくつかのインターフェース図を投げ始めました。


実装
アプリケーションをポータルデータベースと通信するためのAPIを作成しました。 トラフィックを節約し、データの読み込みを高速化し、データベース内のデータがこのフォームに保存されるため、それらをJSONに転送することにしました。 その後、iOS 5はまだリリースされておらず、JSONを使用するための
公的資金が登場したため、彼らは
json-frameworkを採用しました 。
アプリケーションでのナビゲーションには、UITabBarControllerと共にUINavigationControllerを使用しました。 アプリケーションでのそれらの共同使用の問題を研究しているときに、2つの選択肢がありました。
- UITabBarController内のUINavigationController-UITabBarController内の各ViewControllerを使用すると、さらに「深く」できますが、同時にすべてが特定のタブ内にあります。 これがiPhone用Dropboxクライアントの仕組みです。 ビデオの大ざっぱな例。
- UINavigationController内のUITabBarController-最初のケースと視覚的に同じものが表示されますが、ビューの「深化」はアプリケーション自体の内部で発生します。 この原則によれば、iPhone用のVKontakteクライアントは機能します。 ビデオの大ざっぱな例。
2番目のオプションの方が気に入ったので、使用しました。 両方のオプションの実装の説明はこの投稿の範囲をわずかに超えているため、誰かが興味を持っている場合-個人的な手紙に書いて、説明+例へのリンクを与えます(個人的なメッセージで-ハブラ効果を避けるために)。
それで、私たちは上記の状況で助けを借りて始めました-次は何ですか。 アプリケーションの起動時に(もちろん、ダウンロード画面の後に)ユーザーが最初に目にするのはマップです。 スクリプトは簡単です:
- アプリケーションの起動。
- ユーザーの場所。
- 座標が画面に表示される境界ボックス内にある施設の読み込み。
- 地図上にマークを表示します。
データベースとして、このプロジェクト
はCouchDBを使用します。 アプリケーションウィンドウ内のレストランの選択には、境界ボックス検索がジオカウチモジュールとともに使用されます。 アプリケーションはウィンドウの境界線をAPIに渡し、データベースはこの「長方形」内の施設を選択します。 データベース内の他のすべてのクエリは、標準のドキュメント指向のデータベース構造を使用します。 たとえば、レビューを追加するとき、特定のデバイスなどから残ったレビューを見つけやすくするためにドキュメントに追加フィールドを作成します。現在、Yandex.Mapジオコーダーから機関の座標を取得します。現在、アプリケーションはGoogleマップ(組み込みFramework MapKit)を使用しますが、近い将来(安定したリリース後)、Yandex.Mapsに切り替える予定です。特にロシアの都市がより完全に表現されているためです。
スクリーンショットの結果:

NSURLConnectionを介した通常の非同期リクエストを使用してデータがロードされるため、この時間はユーザーインターフェイスがブロックされません。
2番目の画面は、現在ラベルがマップ上にロードされている施設で、リストの形式で、それらまでの距離があります。 嬉しいことに、Objective-Cでは、CLLocationクラスに組み込みのdistanceFromLocationメソッドがあり、マップ上の2つのポイント間の距離を決定します(個人的には、グーグルをすばやく検索しました。 この計算では、直線に沿って移動する必要はなく、道路/ジャンクションに沿って移動する必要があることを考慮していないことは明らかです。値は現在の場所から施設までの正確な長いルートではなく、ユーザーの座標を決定するとエラーが発生するか、その場所をより正確に決定する時間がありません。 しかし、それでも、特に冬に激しい霜が降って、すぐに到達/実行したい場合、この情報は有用で決定的な役割を果たします。 または、金曜日があります:)

レストラン/バー情報画面には、ポータルからの設立、ニュース、ユーザーレビューに関する簡単な情報が含まれています。 もちろん-すべてのレビューやニュースを開いて読むことができます。 ニュース/レビューのテキストもポータルからAPIを介して読み込まれ、UIWebViewを介して表示されます-ポータルでレビューに画像/写真を挿入できます。アプリケーションのユーザーに表示されるようにしたいと思います。


アプリのレビュー
もちろん、ユーザーがアプリケーションから直接レビューを作成できるようにしたかったのです。 たとえば、あなたは有名なレストランに座ってください-そして、あなたは40分間コーヒーを与えられていません。 私たちはアプリケーションを入手しました-施設について否定的なレビューを書きました(私を信じて、レストランのマネージャーはレビューを読んで考慮に入れます)。
レビューを書いて、かなり限られた電話スクリーンを乱雑にしないために、3つのスクリーンに分割することが決定されました。
- レビューテキストの書き込み+写真の添付。
- 訪問に関する情報(日付/サービスの種類/評価);
- 推奨事項とレビュー自体の追加。



レビューを追加すると、サイトのデータベースに追加されるため、ポータルのユーザーとモバイルアプリケーションのユーザーの両方に表示されます。 写真の追加も、PUTリクエストを使用してAPIを介して行われます。
アプリストア
もちろん、各類似のストーリーには、コーンがApp Storeからどのように詰め込まれたかについての部分が含まれている必要があります。
10月初旬に、アプリケーションの最初のバージョンをApp Storeに送信しました。 彼女は3回目からそこに着きました、それぞれの試みは約1週間かかりました。 ジオロケーションに関連するすべてのアプリケーションと同じ理由で、彼らは私たちを2回拒否しました。
最初の拒否:彼らはデモビデオを求めました、なぜなら レビュー担当者はアプリケーションの動作を理解していませんでしたが、何らかの理由でこの状況を予測していませんでした。 彼らはアプリケーションを起動しました。地図は州のどこかで開かれました。 それだけです。 私たちのレストランとバーのデータベースにはロシアとエストニアの都市に関する情報しか含まれていないので、地図やリストには他に何も表示されていません。 ビデオを録画し、審査のためにアプリケーションを再送信しました。
2番目の失敗:世界中のアプリケーションの可用性を選択しましたが、ロシアとエストニアでのみ完全に機能します。 排水溝を下って、彼らは適切な国を選択し、再び送りました。 3回目の試行で、アプリケーションはレビューに合格しました。
これで、アプリケーションに関するかなりの量の作業をすでに計画しました。 成長する余地があり、努力するべきものがあります。実際、私たちは旅の始まりに過ぎません。 奇妙な偶然の一致により、状況はこれまでのところiOS 5のみ(私たちの見落としの1つ)ですが、今週はバージョン4をサポートするバージョンを投稿したいと考えています。
アプリケーションの重量がたった200キロバイトで、それがあなたにとって興味深いものになったなら、私たちのユーザーの間であなたに会えてうれしいです:
アプリケーションへのリンク 。