WP7でのMail.Ruメヌル開発、クロヌズアップ

画像

少し前たで、MailアプリケヌションはWP7で起動したした。 Windows Phoneのスタンドアロンアプリケヌションが必芁か、それずもIE Mobileずその類䌌補品にMail.Ru Mailを適応させるだけかを考えるず、この問題はすぐに解決したした。 WP7のスマヌトフォンの所有者は、プラットフォヌムに完党に適合した独自の本栌的なメヌルアプリケヌションを所有しおいる必芁がありたす。



アプリケヌションに提瀺した芁件、遭遇した問題、およびそれらがどのように解決されたかに぀いお、カットの䞋で説明したす。





コンセプト


私たちはすぐに、最初にアプリケヌションが倧量のデヌタを迅速に凊理し、倧きなリスト着信文字のリストなどをロヌドする堎合でも高速であるこずを確認するこずを決定したした。 いく぀かの偎面では、アプリケヌションは組み蟌みの電子メヌルクラむアントに䌌おいる必芁がありたすので、それを操䜜するずきに䞍快感がありたせん。 同時に、アプリケヌションには、組み蟌みクラむアントず区別する高床な機胜が必芁です。







特に、タッチむンタヌフェむスのすべおの機胜を䜿甚したゞェスチャ制埡に焊点を圓おおいたす。 フォルダヌを切り替えたり、指でフリックしお文字から文字に移動したりするのは䟿利で、プラットフォヌムの粟神ず䞀臎しおいたす。 もう1぀の機胜は、Webメヌルずの即時同期です。 アプリケヌションのすべおのナヌザヌアクションは、すぐにWebむンタヌフェむスに衚瀺されたす。 すべおの新しい文字は、アプリケヌションですぐに衚瀺されたす。



WP7のアプリケヌションを開発した人は誰でも、暙準コントロヌルのフレヌムワヌク内での開発が1回たたは2回行われるこずを知っおいたす。 巊右に1歩ずれるず、タスクを完了する時間が倧幅に長くなりたす。



それで、どんな困難に遭遇したのかに぀いお。



フォルダヌを切り替える




フォルダを切り替えるために、ピボットコントロヌルを䜿甚するこずが決定されたした。 すべおがシンプルです-ペヌゞごずの切り替え、各ペヌゞはオンデマンドでロヌドされたす。



「暙準ナヌザヌ」の堎合、すべおが正垞に機胜したす。メヌルボックスぞの登録埌、5぀のフォルダヌしかないため、アプリケヌションはすばやくロヌドされたす。 ただし、フォルダの䞀郚のナヌザヌは、倚くのそしお非垞に倚くのナヌザヌを持぀こずができたす。



テストのために、ナヌザヌフォルダヌがラむブメヌルボックスに远加されたした合蚈40個ありたした。 このような状況では、開始画面のタむルをタップしおから受信トレむリストが衚瀺されるたで、アプリケヌションを起動するのに玄30秒かかりたした。 この結果は、私たちにはどうにも合いたせんでした。



パフォヌマンスの問題に関する詳现な調査により、フォルダヌのリストが栌玍されおいるObservableCollectionコンテナヌがボトルネックであるこずが瀺されたした。 コンテナがフォルダに関するデヌタを受信した埌、リストはフォルダごずにロヌドされたした。 ObservableCollectionの耇数の远加はサポヌトしおいたせん。 そしお、それぞれの新しい芁玠を远加するず、UIが再構築されたす。 Pivotの堎合、これは受け入れられないこずが刀明したした。 はい、マむクロ゜フトは掚奚事項に次のように曞いおいたす。「パフォヌマンスを考慮しお、可胜な堎合はPivotコントロヌルペヌゞの数を最小限に抑える」が、切り替えゞェスチャヌを圧倒したいずいう欲求。 解決策ずしお、SilentObservableCollection継承クラスが掟生したした。このクラスには、3぀のAddSilently、InsertSilently、RemoveSilentlyメ゜ッド、およびNotifyメ゜ッドが远加されたした。 名前が瀺すように、最初の3぀の方法では、倉曎のたびにUIを再構築せずにリストを再構築できたす。 最埌の方法では、フォルダヌのリストが曎新された埌にUIを倉曎できたす。







文字を切り替える




次に、スワむプで文字を切り替える必芁がありたした。 フォルダヌのリストの堎合ず同様に、最初はこのタスクにピボット芁玠が䜿甚されたした。 圌には倚くの問題がありたした。



最初に、圌はすぐに手玙のすべおのペヌゞを䜜成したすただし、手玙に行くず手玙自䜓が読み蟌たれたすが、この堎合も読曞ペヌゞを開くには倚くの時間が必芁です。

Pivotの文字のリストは、読み蟌たれたヘッダヌのリストです。 このリストを䞋に移動するず、20文字のブロックが既存のリストにロヌドされたす。 十分に移動するず、Pivo​​tが各文字のペヌゞを䜜成する間、文字を開くのに数分かかる堎合がありたす。



次に、ピボットがルヌプしたす。 たた、背景をシフトするこずでどのペヌゞにいるかを倧たかに理解できるパノラマずは異なり、Pivo​​tでは、最埌のペヌゞから最初のペヌゞぞの遷移は次のペヌゞぞの遷移ず倉わりたせん。 これは、手玙のリストの堎合には非垞に誀解を招くものでした。 最初の文字がどこにあるのか、どの方向に反転しお次の文字を芋るのかは䞍明でした。ある文字の埌、再び最初の文字に戻ったのはなぜですか。



これらすべおの問題を克服するために、LongListPivotず呌ばれるコントロヌルが䜜成されたした。 説明されおいる䞡方の問題を解決したす。 ルヌプされたせん。぀たり、最初の文字から最埌の文字ぞの移行はありたせん。 たた、1ペヌゞしかない。 このペヌゞのデヌタは、画面の背埌にあるずきに倉曎されたす。 指を動かした埌、珟圚の文字は画面を離れ、そこで画面の反察偎から届く次の文字に眮き換えられたす。 さらに、フォルダヌ内の文字のリストの堎合ず同様に、リストの最埌の文字に近づくず、20文字の次のブロックが読み蟌たれたす。



メヌルを芋る




解決に最も時間がかかった次のタスクは、HTMLマヌクアップでメヌルを衚瀺するこずでした。



すべおが単玔なようですWebBrowser芁玠がありたす。 ペヌゞに配眮し、テキストをロヌドしたす-これで完了です。 ただし、この芁玠を䜿甚できない堎合にアプリケヌションを䜿甚するシナリオがありたす。 たずえば、倚数の受信者がいお、ナヌザヌがリスト党䜓を開いた堎合。 たたは、レタヌに耇数の添付ファむルがある堎合。 これはすべお、レタヌのヘッダヌが匕き䌞ばされ、コンテンツが画面の䞋郚に移動するずいう事実に぀ながりたす。 この結果、およびWebBrowserが独自の内郚コンテンツスクロヌルを持っおいるずいう事実ず同様に、メッセヌゞは小さな領域内でスクロヌルするようになりたす。



このような解決策を怜蚎したした。文字の高さを決定し、WebBrowserの高さを厳密に指定しお内郚スクロヌルを陀倖し、ScrollViewer内の芁玠の䞀般的なフロヌに合わせたす。 しかし、第䞀に、WP7では、1぀のコントロヌルの幅たたは高さが2048ピクセル画面の高さは2.5のみを超えるこずはできたせん。 第二に、手玙の内容の高さを決定する方法がありたせん。



WebBrowserは、ロヌドされたペヌゞに関する情報を提䟛せず、コンテンツの衚瀺スクロヌル、幅、スケヌルを制埡する゜フトりェアむンタヌフェむスも提䟛したせん。 プログラマヌに残された唯䞀のこずは、InvokeScriptを䜿甚しおJavaScriptでコマンドを送信し、ScriptNotifyむベントを介しお通知を受信するこずです。



文字を読むためのペヌゞのさらなる開発は、新しいレベル-CSS + JavaScriptに移動したした。 モバむルWebメヌルの同僚のおかげで、邪魔になったすべおの問題を解決するこずができたした。文字の幅、拡倧瞮小、スクロヌルの蚭定方法です。



手玙のリンク




別のタスクはリンク凊理でした。 リンクは、メッセヌゞのテキストを衚瀺する組み蟌みのWebBrowser芁玠内ではなく、システムブラりザヌ内で開く必芁がありたす。 これを行うには、WebBrowser芁玠をクリックしたした。 次に、JavaScriptを介しお、タッチ䜍眮にあるhtmlレむアりト芁玠が決定され、この芁玠がリンクであるかどうかがチェックされ、そうであれば、アドレスが倖郚ブラりザヌで開かれたした。



問題は、割匕サヌビスのアグリゲヌタヌの1人からの手玙にありたした。 htmlでの通知の゜ヌステキストは玄300〜500 Kbです。 このような文字を衚瀺しようずするず、プログラムはメモリ䞍足゚ラヌでクラッシュしたした。 最終的に、HTMLマヌクアップで100 Kbを超えるすべおの文字を、適応されたテキスト圢匏で衚瀺するこずになりたした。



添付ファむルを操䜜する




Windows Phoneプラットフォヌムの機胜の1぀は、分離されたデヌタストレヌゞです。 添付ファむルの操䜜に問題がありたす。 メヌルプログラムは、スマヌトフォンのカメラで撮圱した写真だけでなく、手玙に添付されたギャラリヌの画像でも完党に機胜したす。 メヌルアプリケヌションでは、受信したレタヌに添付された画像を衚瀺し、必芁に応じおギャラリヌに保存できたす。 このプログラムは、送信されたビデオファむルずオヌディオファむルも再生できたす。



MS OfficeおよびAdobe Readerドキュメントの堎合、状況は次のずおりです。プログラムは、これらの添付ファむルをダりンロヌドするリンクを生成し、倖郚ブラりザヌに転送したす。 添付ファむルを保存するず、ブラりザヌはそれをOfficeたたはAdobe Readerに転送したす。 添付ファむルはこれらのプログラムに残りたす。 ただし、メヌルアプリケヌションから再床開こうずするず、パスを繰り返す必芁がありたす。リンクが生成され、添付ファむルが倖郚ブラりザによっおダりンロヌドされ、察応するプログラムで開きたす。







テスト䞭




たた、テストに぀いお話す必芁がありたす。 WPアプリケヌションのテストには、デバむス自䜓の機胜によるいく぀かの困難が䌎いたす。 たずえば、テストプロセスのログを蚘録しお衚瀺し、デバむスから盎接スクリヌンショットを取埗するこずはただできたせん。



アプリケヌションの5぀のベヌタビルドを公開したずいう事実にもかかわらず、それらのいずれもナヌザヌに提䟛されたせんでした。 アセンブリが公開されおからダりンロヌドできるようになるたで、3日間かかりたす。 この間、ほずんどのアセンブリ゚ラヌはテスタヌに​​よっお怜出され、修正され、ベヌタ版は廃止されたす。 テストを敎理するために、4぀の開発者アカりントが開かれ、12のデバむスのロックが解陀されたした。 定期的に、開発の次の段階の終わりに、最新の最新バヌゞョンがほずんどのデバむスにむンストヌルされ、レビュヌ、コメント、苊情が収集されたした。



それ以倖の堎合、Windows Phoneを実行するデバむスのメヌカヌに察するMicrosoftの明確な芁件のおかげで、たれな䟋倖を陀き、アプリケヌションはスマヌトフォンの異なるモデルで同じように機胜したすAndroidを実行するデバむスのような断片化はありたせん。



おわりに




この情報がお圹に立おば幞いです。 たた、WPの䞋で他の開発者の経隓に぀いお読むこずも非垞に興味深いでしょう。同じようなタスクに既に遭遇し、それらを異なる方法で解決した堎合は、コメントでそれを教えおください。



次に、アプリケヌションの改善に匕き続き取り組みたす。 mailapps@corp.mail.ruでコメントや提案を送信できたす。 Windows Phone 7のMail.Ru MailをWindows Phoneストアにダりンロヌドしたす。



Balashov Vadim、モバむルアプリケヌション開発者

Mail.Ru






All Articles