久しぶりにWindows Phoneアプリを新作しましたのでご紹介。
「Picasa Uploader」というベタな名前のアプリで、文字通りGoogleのPicasaウェブアルバムに写真をアップロードするだけのユーティリティです。
以前から写真のバックアップ先のひとつとしてPicasaを使っているのですが、Windows Phoneで複数ファイルを一括で共有保存できるアプリがどうにも見当たらなかったので作るしかないんかなぁ、などと思っていたところ、タイミング良くMSCCのコンテストが開催されたので参加賞のMSDN Subscription 3年分に釣られて開発することに相成った次第。
Windows Phoneのバージョンもほぼ8.1で落ち着いているようなので、今回はWindowsランタイムベースのいわゆるユニバーサルアプリのテンプレートを使って8.1専用として作成しました。
ユニバーサルアプリといえば、PCとPhoneの両方で同じアプリを同時に作れる、みたいな話になっていますが、義務というわけではないので、今回はあくまでPhone版のみの開発です。(PCならWebで事足りますし…)
GoogleへのサインインやPicasaのAPIなどは初めて触ったので最初は少し難儀しましたが、UIはいたって貧相シンプルなので、SilverlightとWindowsランタイムの差異もそれほど感じることなく進めることができました。
ファイル転送には新しく追加されたBackgroundTransferクラスを利用しており、一旦転送スタートの指示をかけてしまえばアプリが裏に回っても転送継続してくれるという便利な機能が使えるのですが、最終的にはコヤツのハンドリングが一番手こずるという事態に…
どういうことかというと、「アプリが裏に回っても転送される」という最大のウリを試そうとしてアップロード中にバックボタンやホームボタンを押してアプリをバックグラウンドに回すと、なぜかファイルが重複してアップロードされるという現象が発生するのです。
複数ファイルを一括アップロードした場合、全部が全部ダブるわけではなく、サイズが小さいファイルで発生しやすい傾向があったりして、最初は全くの謎だったのですが、最終的に「BackgroundTransferが勝手にリトライしている可能性が高い」という結論に達した次第。
具体的な挙動としては、転送がRunning 100%に達してからCompletedというステータスに変わるまで少し間があるのですが、この間にアプリが裏に回った場合に重複する、という感じ。
UploadOperationというクラスはネットワーク障害などの対策として最大3回のリトライを行う旨の説明があるのですが、どうやらこの機構が誤爆している気配。
アプリ側ではこの挙動を制御する術がないので、とりあえず伝わるかどうか分からない注意書きをアプリ説明に載せてフォローすることに。
ちなみに多言語対応をしている余裕がなかったので英語オンリーです。
少しニッチな方向性のアプリなので、広告外しタイプの有料アプリに仕立ててしまいましたが、試用版でも機能制限は特に設けていないのでPicasaを使っているWindows Phoneユーザはぜひ試してみてください。
コメントを残す