2105年の初めに、 FINA World Aquatics Championship 2015のモバイルアプリケーションの開発に取り組みました。 その直前に、FINA 2015の拡張現実技術を備えたプレゼンテーションアプリケーションKAZAN ARを開発しました。アプリケーションの目標は、チャンピオンシップに関連する情報をすばやく簡単に取得する方法をチャンピオンシップのゲストと参加者に提供することでした。 プロジェクトの作業開始時点では、サイトのみがあり、外部APIはまだ存在していませんでした。 わずか1か月で、2つのプラットフォーム用の多機能アプリケーションを開発する必要があり、共和国のイメージが危機にatしていました。 このタスクにどのように対処し、Microsoft Azureがこれをどのように支援したかについては、以下をお読みください。
ソリューションのアーキテクチャ
iOSおよびAndroidプラットフォーム用のアプリケーションを開発する際、単一のバックエンドを提供するという課題に直面しました。 Azureクラウドプラットフォームを選択したのは、その信頼性、迅速な開始能力、開発の容易さからです。
その結果、次のアーキテクチャが作成されました。
バックエンド: Django 1.7 + Django REST Framework上のWebアプリケーション(http://apifina.robotscandream.com/)。 Azure Web Appは、Djangoアプリケーションや、PHP、.NET、Java、Node.jsに基づく他のアプリケーションをホストする機能を備えたPaaSサービスです。
パーサー : Ubuntu仮想マシン。 解析には、PythonライブラリGrabが使用されました。 バックエンドとパーサーには共通のコードベースがあります。 Azure仮想マシンを使用すると、LinuxおよびWindowsで任意のソリューションをホストでき、Azure Marketplaceのさまざまなディストリビューションとソリューションに基づいた既製のテンプレートを提供できます 。
DB :レプリケーションなしのUbuntu仮想マシン上のMysql。 Azure Virtual Machine Galleryは、Canonicalをサポートした市販の公式Ubuntuイメージを備えています。
プッシュ 通知: Azure Push Notification Hub、スポーツ、国、およびメッセージによるタグのサブスクリプションは、メッセージのローカライズ用のテンプレートを使用します。 オンデマンドですぐに使用できるAzureプッシュ通知ハブは、 OSおよびPNSサービスを備えたデバイスへの大規模なプッシュ通知通知のための単一のメカニズムの可能性を提供します。 このサービスは、タグ、さまざまな対象者やさまざまな言語で配信するためのメッセージテンプレートなど、すぐに使えるユーザーのサブスクリプションを提供することで、開発者を支援します。
イメージ :Azure Storageは、デフォルトで3つのコピーにデータを保存する大規模なストレージであり、BLOB、キュー、Key-Value形式のデータ、SMBリソース形式のファイルなど、あらゆるタイプのデータを保存できます。
データ表示
クライアントは、一部のサービスエンティティを除き、サーバーベースと同じベースを維持しました。 クライアントのデータは、(「指定された時間後に変更されたニュースのリストを取得する」などの要求によって)増分的に更新されました。 更新は、さまざまなセクション(スケジュール、結果、ニュース、写真など)ごとに個別に(個別のHTTPリクエスト)行われ、自動的に(iOSでのバックグラウンドフェッチ、Androidでの同期アダプター)および手動で(ただし、いつの間にか)ユーザー向け)アプリケーションを表示するとき。
ディスプレイのサーバー側は可能な限りシンプルです。 シリアライザー(ModelSerializer)およびビュー(ModelViewSet)のクラス(2つの小さなファイルすべて)が宣言的に定義され、残りはDjango REST Frameworkによって行われました。
サーバーでのデータの受信と読み込み
オブジェクト(説明、写真、輸送ルート)に関する情報は、チャンピオンシップ中に変更される可能性があるため、管理パネルから手動で入力するというオプションに決めました。 写真をAzureストレージにアップロードするために、わずかに変更されたdjango-storagesライブラリが使用されました。
ニュースおよびメディアセクションの解析には、GrabライブラリのSpider APIが使用されました。 2つの言語(英語とロシア語)でサイトから情報を適切に収集できるもの。 同時に、ニュースベースでは既に変更が追跡されていました。
メダルの順位は、XML形式のデータを発行したサイトの開発者(ノックアウトできた唯一の開発者)が提供するAPIを介してkazan2015.com Webサイトと同期されました。 この情報は変換され、必要な形式でサーバーデータベースに追加されました(クライアントの増分更新用)
選手に関するスケジュールと情報がCSVテーブルから読み込まれ、更新されました。 更新の場合、変更されたレコードの識別を実装することも必要でした。
FINA 2015競技結果プロバイダーの公式ウェブサイト-www.omegatiming.comからダウンロードしたPDFファイルのパーサーを書き込むことはできなかったため、競技結果は管理パネルを介して手動で入力されました 。 さらに、ファイルは分野ごとに異なる表示形式でした。
プッシュ通知は、対応するデータが表示されたときに自動的に送信されました。 ユーザーにパーソナライズされたプッシュサブスクリプションを作成する機能を提供しました。
ワード番号
以下は、iOSベースのクライアントを使用した結果です。
Androidクライアントを使用した結果:
インターフェースについて少し
アプリケーションの設計プロセスでは、設計段階で導入された「エラーの存続」のプラクティスを使用したことに注意してください。 このアプリケーションはさまざまな国の市民によって使用されていたため、ユーザーエクスペリエンスの異なるユーザー向けの使いやすいアプリケーションを作成する必要がありました。 これを行うために、スポーツイベントの失敗を防ぐために、最も失敗したアプリケーションのアプリケーションを分析しました。
このアプリは、Playマーケットで5つ星のうち4つ、App Storeで5つのうち4.5つを獲得しました。 これは良い結果だと思います。 さらに、さまざまな言語での優れたアプリケーションに対する感謝状を常に受け取りました。 それは私たちの仕事にとって最高の報酬でした-[:)]
ロボットはチームを夢見ることができます。