Picasa Uploader

/ Windows Phone

image

久しぶりに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ユーザはぜひ試してみてください。


WP8.1 Developer Preview

/ Windows Phone


国内では一向に販売されず、当然の如く認知度も上がらないWindows Phoneですが、Windowsに少し遅れてこの春にバージョンが8から8.1に上がります。
先日開発者向けにプレビュー版がリリースされたので早速導入してみました。
見た目的には通知センターが追加されたこととスタート画面のカスタマイズの幅が広がったところが大きな変化でしょうか。
中でもタイルを透過させてスタート画面の背景に画像が表示できる機能はかなりキャッチー。
リリース中のアプリで作ったタイルを置くとどうなるのかと試したらば、まぁ透けませんw
仕組み的に透過PNGが背景になっていないタイルは透けないようで、JPEGでタイルを作成している自前アプリは全滅状態。
仕方ないので、ImageToolsを使ってPNG出力に変更することに。
元がWriteableBitmapからのJPEG出力なので、ほんの数行書き換えればOKなのが救い。

ということで、とりあえず「Live Calendar」、「Live Calendar +」、「タイルカレンダー」の3本は修正版をリリース完了。
このうち、一番人気の「Live Calendar」に寄付機能を付けるべくアプリ内購入の機能をサポートするWindows Phone 8プロジェクトにアップデート。
タイルカレンダーとかぶってしまうのであえて日本は非公開にしていたのですが、機能的に微妙に異なる部分もあるので日本でも公開してみることにしました。
カレンダーの内容も含めすべて英語表記になるので、お好みで使い分けていただければ幸い。
「タイルカレンダー」のほうは修正ついでに六曜表示の機能を追加してみました。
この他にも透過タイルに対応させたほうが良さげなアプリがいくつかありそうなので順次対応していきたいと思います。


バックグラウンドエージェント期限の通知

/ Windows Phone

Windows Phoneアプリにはバックグラウンドエージェントと呼ばれる常駐処理的な仕組みがあります。
具体的にはPeriodicTaskというクラスを介してエージェントタスクを登録しておくと、アプリが起動していない状態でもおよそ30分間隔で処理を定期的に実行することができるようになる、というものです。
リファレンスをみても分かる通り、PeriodicTaskにはリソースや機能面で数々の制約が存在するのですが、なかでも「2週間ごとに再スケジュールが必要」という仕様がとても厄介。
「再スケジュール」というと分かりにくいかもしれませんが、要は「2週間に最低でも一回はアプリを起動する必要がある」ということです。
2週間アプリを起動しなかった場合、バックグラウンドエージェントは停止してタスク実行されなくなるのです。
「2週間も起動していないんだから使ってないんだろ、バッテリの無駄遣いだから止めてあげるね♪」ということなのでしょうが、モノによっては余計なお世話的な仕様であることは否めません。

実際、我々が提供しているアプリでもこの機能を利用してライブタイルの書き換えなどを行っているわけですが、この制限をご存じないユーザからの「タイルが更新されなくなった」というレビューは後を絶たず、どうにかならないものかと常々思っていたのですが、今のところこの辺りの仕様に変化は見られない様子。
仕方がないので、抜本的な対策ではありませんが、2週間の期限が近づいたらトースト通知する仕組みを仕込んでみました。
やることは単純で、アプリの起動日時を保存しておいて、エージェントタスクのOnInvokeメソッド内、NotifyComplete呼び出しの直前でトースト通知を出すだけです。
トースト通知をタップするとアプリが起動するので、その時点で起動日時がリセットされるという仕掛けです。

トースト通知で表示できる文字数が少ないうえに、少し経つと消えてしまうのが難点ですが、通知に気づいてくれさえすればタップしてくれるかと…
この仕掛け、「Alarm +」には当初から実装済みなのですが、今回別件のためにバージョンアップして現在申請中の「Live Calendar」と「Live Calendar +」にも組み込んでみました。
久しぶりにいじったので余計なバグを仕込んでいなければ良いのですがw


Alarms +

/ Windows Phone

image
2013年最後のエントリはWindows Phone 8のアプリ紹介。

Alarms +」という名前のまんま、アラームアプリです。(日本語名は「アラーム +」)
基本、外国製のスマートフォンは祝日に対応したアラームを標準搭載していないので、サクッと作れるようなら作ってみよう、ということで調べ始めたのがはじまり。
AndroidやiPhoneには当然の如く祝日対応アラームアプリが存在するようですが、Windows Phoneでは見当たらない様子。
実装に関する制約が色々と厳しいWPなので、こりゃ作れないパターンかしらん、と半ば諦めつつあれこれいじってみた結果、バックグラウンドタスクからアラーム情報の更新と削除は可能なことが判明。(追加はできない)
ただし、公式には「できない」ことになっているようなので、審査に通るかどうかは保証しかねますw
祝日を除外する仕組みは意外と単純で、とりあえず毎日鳴る設定でアラームを仕掛けておいて、約30分おきに実行されるバックグラウンドタスクで実際にアラームを鳴らすか鳴らさないかを判定し、鳴らさないと判定されたらばアラーム時刻を翌日に変更してスキップさせる、というもの。
基本的な動作の確認はすぐにできたので、いざ作り込み。
もはや完全に終了した感のある日本向けに作る意味はないので、既定の言語は英語で、日本語はオマケ扱いw
祝日に関してはとりあえず米国だけは自動設定をサポートしないと格好がつかないので仕様を調べて組み込み、日本の祝日は手持ちの判定用クラスを流用。
その他の国や地域でも使えるようにしたかったので、祝日はユーザが自由にメンテナンス(追加、削除)できる形に実装しました。
これまで以上に地味なUIですが、変に独自性を出してもかえって使いにくくなりそうなので、あえてWP標準のアラームに似せてみた次第。
唯一不満が残るのは、アラーム音が変えられないことで、人によっては致命的な要素になってしまうかもしれませんが、色々と試行錯誤してみたものの、結局アプリ埋め込みで用意したサウンドしか設定できないようなので、素材の調達や好みの問題もあるため、今回は対応を見送りました。
GDR3でアラーム音が変えられるという話を見かけたので、プレビュー版を入れてみたのですが、アラーム音ではなくリマインダ通知の音だったようで、結局どうにもなりませんでした。
WPのアラームは消音設定でもお構いなしに既定の大音量で鳴る仕様なので、まぁ目覚ましとしては事足りるかと…(言い訳)

Windows Phone 8専用アプリの開発は今更ながら初めてだったわけですが、これまでとさして変わることもなく、比較的スムーズに開発できました。
特に期限があるわけでもないので、プライベートで使ってテストを繰り返すという、いつになく時間をかけた作り方をしたのですが、年末年始の休みに間に合ったのが吉と出るか凶と出るか…
なにせ、うまく祝日がスキップできないと年末年始の休みにアラームがガンガン鳴りかねないのでw

今回、WPでは使ったことのなかったアプリ内課金を採用しており、複数件のアラーム登録にはライセンス購入が必要となります。
とりあえず単一のアラーム登録は無料で利用できますので、日本では数少ないWP8ユーザの方、ぜひ一度お試しください。


AdDuplex

/ Windows 8, Windows Phone

先日、AdDuplexという広告サービスの会社から招待メールを受信。
「WindowsPhoneアプリ、Windowsストアアプリの売上を増やしませんか」といった内容で一見怪しげなものの、露骨なスパムではなくて名指しで送られてきたうえに出稿用のクーポンコードまで記載されている意外にまともなメール。
とはいえ、現状広告を貼っているアプリはWin8用の国内向けアプリ「電力使用率」くらいしかないため放置を決め込んでいたのですが、数日経ってまたもや同じ人物(セールスリーダーさん)からメールが。
「メール届いてますかー?、返事お待ちしております」みたいな催促が来てしまったので半ば仕方なく登録してみることに。
なにやら、いま登録するとSurface2やLumia1520が当たるキャンペーンを張っていたりもするので、どうやらユーザ獲得に必死になっている雰囲気。

アカウント自体の登録はごく簡単なものですが、広告を掲載するためのアプリへの仕込みは当然必要。
といっても、専用の広告コントロールをNuGet経由で取得してプロジェクトに組み込み、あとはXAMLに貼り付けて表示制御するだけなので、それほど難しいものではありません。
「電力使用率」はMicrosoft Advertisingの広告を貼っているのですが、いかんせん広告表示率が低いので、「広告無し」となった場合の代替表示にAdDuplexの広告を表示する形に変更してみました。
固定位置に広告コントロールをベタ貼りしているだけなので、表示切り替えも簡単…のはず。
単純にMS Adから「NoAdAvailable」のエラーコードが返ってきたらAdDuplex側を表示するようにしただけなのですが、テストしていてもMS側のAdがなかなか表示してくれないので、はたしてちゃんと実装されているか不安だったりw

また、このAdDuplexというサービスは広告表示エリアでアプリを相互に宣伝する機能を持っているらしく、自アプリの広告を登録する必要があります。
もちろん広告素材として画像を使うこともできるのですが、サイズ種別が多いため各サイズをマトモに作り込んで用意するのはかなり大変。
そんな理由からか、テキストを4行分用意するとテキストベースのシンプルな広告を自動的に作ってくれます。
ただひとつ、素朴な疑問。このサービス、アプリではなく普通の広告は出るのかな…?

ちなみに、メールに付いてきたクーポンコードは20,000imps、60ドル分のクレジットだったわけですが、今のところ表立って宣伝するようなアプリもなく、広告素材を用意する気力もないので、当面寝かせておくしかない状態。
もったいないので、何かアプリを作れ、という天の声なのかもしれませんw

[追記]
どうやら少し勘違いしていたようで、このAdDuplexというサービスはそれ単体で直接的な収益が得られるものではなく、アプリの露出を増やすことによって間接的に収益アップに繋げることを目的としているようです。
そういうことなので、アプリ以外の通常の広告が表示されることはありません。
当然クリックしたからといってどこかにお金が入るものでもないので、あくまでアプリ開発者の互助会みたいなものですね。