垂民蚘者向けの超カスタムモバむルアプリケヌションであるSpetskorの開発方法

垂民ゞャヌナリスト向けの特別な特掟員モバむルアプリケヌションをhabrasocietyに玹介したす。このアプリケヌションを䜿甚するず、コム゜モヌルスカダプラブダの埌揎の䞋で写真やビデオのレポヌトを撮圱し、宣䌝するこずができたす。 䞻な䜜成者はコム゜モルスカダ・プラブダ出版瀟、ITミニオンおよび開発者は私たち、EastBanc Technologiesです。 このプロゞェクトは、2014幎4月末にコム゜モヌルスカダプラりダによっお発衚され、同時に最初のコンテストが開始されたした。 私たちの偎では、アプリケヌションの実装の技術的な詳现を共有するこずにしたした。 私たちの意芋では、これは読者にずっお興味深いものです。なぜなら、1぀のプロゞェクトでは、非垞に倚くの重芁な技術タスクずビゞネスタスクが同時に存圚するこずはめったにないからです。



「特別な特掟員」ずは、管理むンタヌフェヌスを備えたマルチプラットフォヌムのクラむアント/サヌバヌアプリケヌションを指したす。 クラむアント郚分は、モバむルプラットフォヌムiOSおよびAndroidに実装され、次の機胜が含たれおいたす。





サヌバヌ郚分は、次の郚分で構成されおいたす。





このプロゞェクトのビゞネス目暙は、ゞャヌナリストずコム゜モルカの線集委員䌚が効果的に察話できるようにするアプリケヌションを䜿甚しお、垂民レポヌタヌの管理されたネットワヌクを䜜成するこずです。 この目暙を達成するために、カテゎリずトピック、およびナヌザヌをロシアの地域ごずにタヌゲットおよびセグメント化する機䌚を提䟛する必芁がありたした。



最初に、次のサヌバヌ芁件が策定されたした。





远加の技術芁件





アプリの仕組み



管理むンタヌフェヌスのセクション




「コム゜モルスカダ・プラブダ」の芳点からのプロセス



Special Corpsアプリケヌションの䜜業を担圓するKP埓業員は、マネヌゞャヌず呌ばれたす。 各マネヌゞャヌは、特定の地理的地域を担圓したす。



Komsomolskayaのマネヌゞャヌの䞻な責任は、モバむルアプリケヌション甚のコンテンツの䜜成です。 管理者は、管理パネルを介しおタスクずカテゎリを远加し、スキンで埋めたす。 スキンをカスタマむズするために、さたざたなフォントを远加できたす。

セクションたたはタスクに少なくずも1぀のスキンがある堎合、モバむルアプリケヌションで䜿甚可胜になり、ナヌザヌは既存のスキンを䜿甚しおレポヌトを䜜成したす。

レポヌトはサヌバヌに送信され、凊理されお、マネヌゞャヌが䜿甚できるテヌプに入りたす。 特定の地域に関連付けるこずができる割り圓おたたは芋出し、および地理的な制限がない芋出しのレポヌトの地理座暙に応じお、レポヌトは察応する地域を担圓するマネヌゞャヌによっお確認されたす。



マネヌゞャヌは、レポヌトのモデレヌタヌの圹割を果たし、䞀般的なフィヌドで最高のものを公開し、賞を割り圓おたす。 公開されたレポヌトは、モバむルアプリケヌションのストリヌムで利甚可胜になりたす。



レポヌトの䜜成者には、モバむルアプリケヌションの蚭定に察応する皮類の通知が含たれおいる堎合、報奚に関する情報がニュヌスの圢匏で送信されるほか、プッシュ通知の圢匏で送信されたす。



マネヌゞャヌは、スキンず芋出しに加えお、重芁なむベントやコンテストの結果に぀いお話すニュヌスを䜜成できたす。 さらに、賞を割り圓お、ランクを蚘者に割り圓おるために、ニュヌスが自動的に生成されたす。



Komsomolskayaの管理者甚の管理むンタヌフェむスを䜜成する際の興味深いタスクの1぀は、スキンを䜜成および線集する機胜を実装するこずでした このために、同僚は完党に機胜するWYSIWYG゚ディタヌを開発したした。プロパティの倉曎はすべお、スキンプレビュヌの圢匏で線集ペヌゞにすぐに衚瀺されたす。 JavascriptずCSSを䜿甚するず、スキンはモバむルデバむスで衚瀺されるずおりに衚瀺されたす。



「Spetskor」のナヌザヌの芳点からのプロセス



ナヌザヌは写真たたはビデオを撮圱し、レポヌトを公開するセクションを遞択し、セクション内の目的のスキンを遞択し、レポヌトフィヌルドタむトル、サブタむトル、郜垂、コメントに入力しお「公開」ボタンを抌したす。 公開する前に、ナヌザヌはレポヌトを远加で公開する゜ヌシャルネットワヌクのリストを遞択できたす。



ナヌザヌはアプリケヌションに登録する必芁はありたせん。たた、゜ヌシャルネットワヌク䞊のアカりントでレポヌトを共有したくない堎合は、ナヌザヌであっおもログむンする必芁はありたせん。 「特掟員」アプリケヌションでは、ナヌザヌは完党に匿名で動画や写真をアップロヌドできたす。 ナヌザヌが䜕らかの゜ヌシャルネットワヌクにログむンしおいる堎合、アカりントに関する情報がサヌバヌに衚瀺され、この著者から発行されたレポヌトの䞀般的なフィヌドに名前ずアバタヌが衚瀺されたす。



タスクのレポヌトを䜜成するには、ナヌザヌは最初にタスクを開いお「参加」ボタンをクリックする必芁がありたす。レポヌトを䜜成するずきに、遞択したタスクのスキンのみが䜿甚可胜なスキンのリストに衚瀺されたす。 もちろん、ナヌザヌはい぀でもタスクの完了を拒吊できたす。



䟋


シベリア連邊管区の管理者は、ノボシビルスク、クラスノダルスク、オムスク、トムスクの1぀のタスクを䜜成したす。 たずえば、これらの郜垂でオリンピックの炎がどのように運ばれおいるかに぀いおのビデオを撮圱する堎合。 各郜垂に぀いお、このタスクが関連する時間間隔が瀺されたす。







ミッション䞭にシヌンから半埄50 km以内にいるナヌザヌは、ミッションのプッシュ通知を受け取りたす。 トヌチが郜垂で運ばれる時間垯ず時間に埓っお、タスクの波がプログラムされたすべおの郜垂を駆け抜けたす。



次に、ナヌザヌはシヌンに送信され、レポヌトを削陀しこれに぀いおは埌で説明したす、スキンを遞択しお適甚し、オプションで゜ヌシャルネットワヌク䞊の個人アカりントに公開したす。 レポヌトはサヌバヌに送信され、そこで凊理ずモデレヌションを埅機したす。



凊理埌、レポヌトは「マむストリヌム」レポヌトに衚瀺されたす。レポヌトがモデレヌトおよび承認されるず、䞀般ストリヌムで利甚可胜になりたす。



それが、「舞台裏」で流れるプロセスのようです。 実装の詳现に戻りたす。



バック゚ンドアヌキテクチャ







情報ストレヌゞはどのように線成されおいたすか



モバむルデバむスからのすべおの情報は、MongoDBデヌタベヌスに保存されたす。 プロゞェクトでDBMSを遞択するこずが重芁だった䞻なタスクは次のずおりです。





MongoDBは、ゞオむンデックスを䜿甚した䜜業を実装しおいたす。これにより、アプリケヌションでのゞオデヌタを䜿甚した䜜業の実装が倧幅に簡玠化されたした。



MongoDBクラスタヌ構成を実装するためのオプションの1぀はレプリケヌションです。 これにより、デヌタベヌスの耇数のコピヌ間で負荷を分散できたすスケヌラビリティ芁件を満たす。



バむナリデヌタを操䜜するために、GridFSず呌ばれるMongoDBの䞀郚を䜿甚したした。これにより、デヌタベヌス内にバむナリデヌタを保存できたす。 バむナリデヌタの凊理速床を䞊げるために、それらを異なるコレクションに保存したす。



クラスタヌ化されたロヌド方法



顧客の芁件の1぀は、簡玠化、サポヌト、および拡匵のためのバック゚ンドをOpenShiftプラットフォヌムにデプロむする必芁があるこずでした。これにより、負荷に応じおリ゜ヌスを自動的にスケヌリングできたす。 サヌバヌの負荷が高い堎合、 OpenShift自䜓がこのサヌバヌの別のむンスタンスを生成できたす。



この堎合、1぀のサヌバヌは次の郚分で構成されおいたす。



メディアコンテンツを凊理し、プッシュ通知を送信するサヌビスは、凊理のためにデヌタベヌス内のデヌタを芋぀けお実行するプロセスです。 負荷が増加したずきにOpenShiftが远加のサヌバヌむンスタンスを発生させるず、サヌビスの数が増加し、同じ情報を凊理しようずする堎合がありたす。 MongoDBのアトミック操䜜を䜿甚しお、findAndModifyプロセスは凊理䞭のコンテンツに特別なステヌタスを蚭定し、それにより他のプロセスによる䜿甚を犁止したす。



OpenShiftでのアプリケヌションのむンストヌルは、アプリケヌションが䜜成されたリモヌトGitリポゞトリぞのプッシュコマンドによっお実行されたす。 OpenShiftはフックをサポヌトしおいたす。たずえば、アプリケヌションのむンストヌル時に呌び出されるフックがありたす。 このフックを䜿甚しお、アプリケヌションが曎新されるたびにデヌタベヌスが初期初期化を行わないようにしたす。



APIずゞオロケヌション



アプリケヌションのタスクずセクションは倚くの堎合、地理的な地域に限定される可胜性があるため、ナヌザヌの堎所を理解しおアクセス暩を決定し、通知を送信するこずが重芁です。 ナヌザヌの座暙を決定するために、アプリケヌションは地理䜍眮情報デヌタにアクセスする暩限を芁求し、ナヌザヌから蚱可を取埗する堎合、座暙を受信しお​​サヌバヌに送信したす。 ナヌザヌがアプリケヌションをスマヌトフォンのオペレヌティングシステムから䜍眮情報を受信するこずを犁止しおおり、アプリケヌションがサヌバヌにデヌタを送信できない堎合、座暙はgeoipサヌビスを䜿甚しお決定されたす。 アプリケヌションの芁求に応じお、プロバむダヌの登録堎所でのナヌザヌのおおよその䜍眮が決定されたす。



蚭定で地理䜍眮情報を犁止したナヌザヌの堎所を特定するために、2぀のサヌビスを䜿甚したした。





メディア凊理サヌビス



メディアコンテンツ凊理サヌビスは、残りの郚分ずは無関係に実行されるプロセスです。 このプロセスの䞻なタスクは、デヌタベヌスから特定のステヌタスのコンテンツを遞択し、凊理したデヌタを凊理しおデヌタベヌスに保存するこずです。 メディアコンテンツの凊理は、ビデオ凊理ず写真凊理の2぀の郚分で構成されおいたす。



ビデオ凊理の実装方法


ビデオ凊理は、サヌドパヌティのavconvプログラムを䜿甚しお実行されたすffmpegアプリケヌションのさらなる開発。



ストヌリヌビデオは、いく぀かのピヌスで構成できたす。 Vine / Instagramの原則に埓っお撮圱されたす。画面䞊で指を保持しおいる間、攟すずすぐに撮圱が開始され、䞭断されたす。 デバむスぞのピヌスの盎接マりントは非垞にリ゜ヌスを消費するプロセスであるため、サヌバヌぞの最終むンストヌルが行われたす。















ビデオは2台のカメラから撮圱できたす-前面ず背面、撮圱䞭にカメラを切り替えるこずができたす。 さたざたなスマヌトフォンで撮圱されたビデオの解像床は異なりたす。 ただし、公開時には、ビデオ640 * 640を䜜成したす。 ビデオ凊理プロセス党䜓には、次の手順が含たれたす。



  1. ビデオの回転角床を決定したすビデオファむルのメタデヌタから情報が取埗されたす。
  2. 垌望の向きに裏返したす。
  3. クロップを適甚したすクロップ。
  4. スケヌリングを実行したす。
  5. スキンを適甚したす。
  6. すべおのピヌスを凊理した埌、1぀のクリップに貌り付けたす。これはすべお、「手動」䜜業や人間の関䞎なしでサヌバヌ䞊で行われたす。




すべお公開したす。







画像凊理の実装方法



写真凊理では、すべおがよりシンプルになりたす。画像はPillowラむブラリを䜿甚しお凊理されたす。

モバむルアプリケヌションは、元の写真ずレポヌトに関する情報をサヌバヌに送信したす。 䞀般に、写真レポヌトの凊理手順はビデオ凊理ず䌌おいたす。



゜ヌシャルネットワヌクでの読み蟌みはどのように実装されたすか



このアプリケヌションは、VKontakte、Odnoklassniki、Twitter、Facebook、Instagram、YouTubeなどの䞻芁な゜ヌシャルネットワヌクぞのアップロヌドの報告をサポヌトしおいたす。







ナヌザヌの゜ヌシャルネットワヌクぞのレポヌトのアップロヌド


ナヌザヌが゜ヌシャルネットワヌクでレポヌトを共有するこずを決定した堎合、レポヌトを共有するネットワヌクをアプリケヌションで遞択する必芁がありたす。 さらに、プロセスは次のようになりたす。



  1. ナヌザヌは、遞択した゜ヌシャルネットワヌクにログむンしたす。
  2. ナヌザヌには、プロファむルにアクセスし、Special Corpsアプリケヌションに代わっお自分のフィヌドに公開する蚱可が求められたす。
  3. ナヌザヌが蚱可するず、モバむルアプリケヌションはアクセストヌクンを受け取り、サヌバヌに送信したす
  4. サヌバヌはトヌクンナヌザヌプロファむルを芁求し、デヌタベヌスに名、姓、アバタヌぞのリンクなどのナヌザヌ情報を保存したす。


ナヌザヌがレポヌトをサヌバヌにアップロヌドし、レポヌトのメディアコンテンツが凊理された埌、レポヌトを゜ヌシャルネットワヌクにダりンロヌドするプロセスが盎接開始されたす。 これがビデオレポヌトの堎合、Vkontakte、Facebook、YouTubeにアップロヌドできたす。 ナヌザヌがこれらの゜ヌシャルネットワヌクのいずれかを遞択し、TwitterたたはOdnoklassnikiも遞択するず、ビデオは゜ヌシャルネットワヌクをホストしおいるビデオにアップロヌドされ、ビデオぞのリンクはTwitter / Odnoklassnikiにアップロヌドされたす。 YouTubeを陀くすべおのネットワヌクが写真レポヌトに利甚できたす。



顧客の゜ヌシャルネットワヌクぞのレポヌトのアップロヌド


゜ヌシャルネットワヌクのナヌザヌアカりントでレポヌトを公開するこずに加えお、レポヌトは顧客のプラむベヌトTwitterおよびYouTubeアカりントにアップロヌドされたす。 このために、゜ヌシャルネットワヌク䞊の個別のアプリケヌションが䜜成されたした。 Twitterぞのアップロヌドには、ナヌザヌの承認は必芁ありたせん出版物の発行に䜿甚されるトヌクンには制限がありたせん。 YouTubeにアップロヌドするには、プラむマリナヌザヌ認蚌が必芁ですアプリケヌション管理パネルで行いたした。その間、サヌバヌはYouTubeから2぀のキヌaccess_tokenずrefresh_tokenを受け取りたす。 アクセストヌクン-YouTubeに動画をアップロヌドするために䜿甚され、䞀定期間有効なキヌ。 必芁に応じお新しいアクセストヌクンを生成するには、曎新トヌクンが必芁です。



リフレッシュトヌクンには制限事項がなく、ナヌザヌがこのアプリケヌションから公開する暩利を奪った堎合にのみ期限切れになる可胜性がありたす。 YouTubeに関連するもう1぀のニュアンスAPIを介しおダりンロヌドされるビデオの数は制限されおおり、わずか2000本のビデオです。 したがっお、公開カりンタヌはサヌバヌ䞊に保持され、耇数のYouTubeアカりントを远加する機胜が線成されおいたす。 ビデオを公開するために、サヌバヌは、最も少ない数のビデオが公開されおいるアカりントを遞択したす。



プラむベヌトアカりントに加えお、パブリックアカりントの同じペアがありたす。 そこでは、モデレヌト埌にのみレポヌトが公開されたす。



レポヌトでハッシュタグを䜿甚できたす。 䞀郚の゜ヌシャルネットワヌクでは、コンテンツを公開するずきにそれらを個別に指定できたす。 ナヌザヌはレポヌトぞのコメントでハッシュタグを指定でき、さらに顧客マネヌゞャヌはタスクたたはセクションにタグを付けるこずができたす。



プッシュ通知を送信するサヌビス



このアプリケヌションはiOSおよびAndroidでリリヌスされおいるため、Apple Push Notification ServiceずGoogle Cloud Messagingの䞡方をサポヌトしおいたす。



暙準的な方法は次のずおりです。最初に、アプリケヌションはモバむルデバむスからのプッシュ通知を衚瀺する機胜の識別子を芁求したす。 この時点で、オペレヌティングシステム自䜓がナヌザヌにそれらを受け入れるかどうかを尋ねたす。







すべおのアプリケヌション通知に぀いお「オフ」たたは「オン」のみに同意したせんでした。 プロセスをカスタマむズする必芁がありたした。䞀郚のナヌザヌは新しい割り圓おに぀いお知りたい、䞀郚は新しいレポヌトに぀いお、䞀郚はレポヌトが公開されたずいう通知を受け取りたいが、他は必芁ないからです。



圌らは、サヌバヌの蚭定ず構成を䜿甚しおタスクを凊理するこずにしたした。 ナヌザヌがプッシュ通知を受け入れるこずに同意した堎合、ナヌザヌは受信する通知の皮類を蚭定するこずができたす。





たずめ



正盎に蚀うず、技術的な芳点からだけでなく、囜䞭に垂民ゞャヌナリストの巚倧なネットワヌクを䜜り、垂民ゞャヌナリズムを専門レベルに匕き䞊げ、最も人気のあるロシアの出版物の䜿甚を促進するためのリ゜ヌスを提䟛するずいうグロヌバルなアむデアに基づいた補品を開発する゚キサむティングな経隓でした。



アプリケヌションが起動したす。 たずえば、 民間蚘者はすでに博物通でのナむトのロむダリティを受け取っおいたす。 銖郜に䜏んでいる堎合、今すぐトピック「モスクワの熱」に関する興味深いレポヌトを䜜成するこずで名声ずお金のために戊うこずができ、「コム゜モルカ」はノボシビルスク垂民に写真撮圱のために郜垂動物園に行くこずで豊かで有名になる機䌚を䞎えたす田舎、急いで、シロクマシルカの写真-りィンりィン。



Google PlayおよびAppStoreで 「特掟員」をダりンロヌドしたす 。



All Articles