電力使用率アプリ for WP7

/ Windows Phone

というわけで、2回目の審査は無事に通過したようで、ようやく昨夜マーケットプレースに公開されました。
審査はおおよそ4~5営業日と考えておけば良さげです。

でもって、記念すべき初アプリの内容は性懲りもなく電力使用率ネタで、アプリ名もベタに日本語で「電力使用率」w
英語名は「Power Usage for WP7」とか付けてますが、公開先は日本のみなので、まぁ雰囲気だけ。当然ながら無料アプリです、念の為。

WP7ユーザというかZune導入済みの方は、下記のダウンロードリンクから直接マケプレを覗いていただければ良いのですが、一応どんな感じに掲載されているかスクショ貼っておきます。

特長としては、需給情報を公開している電力会社5社(東京、関西、中部、九州、東北)に対応している点と、プッシュ通知によりタイル上に最新の状況を表示できること。
同種のアプリは既にいくつか存在していたのですが、上記の点をカバーしているものはなかったので、早い者勝ちとばかりに速攻で作ってみた次第。

これまで使わせてもらってきた東電状況APIから卒業して、各社のCSVファイルを直接参照する作りにしています。
東京、関西、東北の各社はCSVフォーマットが同じだったのですが、中部、九州については微妙に違っていたので、一律に見せるのに若干手間取りましたが、使っている情報はごく一部なので、まぁ、誰でも作れるレベルかと。

でもって、いちいちアプリを立ち上げないと情報が見れないのは使えないだろー、ということでトライしたのがWindows Phoneのウリでもある「タイル」へのプッシュ通知。
前回少し書きましたが、通知を受ける端末毎に割り当てられるチャネルURLを管理するためのWebサービスは自前で用意する必要があるため、これをAzure上に配置したWCFサービスで行うことにして、データはAzureストレージのテーブルに保存。
さらに、プッシュ通知依頼をするためのバッチサービスをAzureのWorker Roleとして作成し、こちらはぐるぐる無限ループで最新情報の取得と通知の処理を回しています。
現在の仕様では、5分に1回の通知頻度としており、ネットワーク接続が途切れていたりして通知に失敗した端末に対しては、1時間置いてからリトライするような実装になっています。

利用者が増えたときのサーバ側の挙動が若干気になるところですが、通知エラーをちゃんと拾う実装を追加してからは安定しているようなので、とりあえず様子見。
サーバ負荷が心配になるほどユーザ数が増えてくれればむしろ本望かとw

プッシュ通知を有効にすると、ストレージ上に端末毎のレコードが作られるので、おおよその利用者数が分かって(公式のダウンロード数は更新にタイムラグがあるようでなかなか反映されないのです)、ちょっと嬉しかったりするのですが、公開から20時間ほど経過した現時点で、ちょうど10人。
新着アプリを定期的にヲチしているようなコアなユーザはあまりいないんですかね…

ひとまず、WP7アプリ公開までの一連の流れを体験してみたわけですが、まだあちこち洗練されていない部分はあるものの、最低限必要な仕組みは整っているのかな、といった印象。
基本、英語ベースですが、我々でも何とかなったので、とりあえずアプリさえ作れればどうにかなりそうな感じです。
端末の普及加速を願いつつ、アプリ開発のノウハウを蓄積していきたいと思います。


なお、電力使用率アプリのサポートについてですが、@Meeks_Incにリプライしていただければ対応致します。お気軽にどぞー。


WP7審査落ち&プッシュ通知の注意点

/ Windows Phone

WP7の初アプリ申請からちょうど一週間。
先月29日に申請して、2日の夜にようやく結果メールが到着しました。
が、残念ながら審査落ち…orz

申請後に一箇所クラッシュするバグを見つけていたので覚悟はしていたのですが、Microsoftのテスターさんにもしっかり見つけられてしまったようです。
機内モードにしてネットワークに接続できない状態で特定の操作をすると落ちるバグなので、そりゃ見つけるだろー、といった感じですが、噂通りきっちりテストされているようで…

まぁ、このバグは既に直してあったのでさしたる問題はなかったのですが、よく分からないのはもうひとつの指摘にあったアプリケーションポリシーによるもの。
「2.9.1」に記載されているプッシュ通知に関するポリシーのようで「プッシュ通知を有効にする場合はユーザの許可を得よ」という話が書かれているようなのですが、確認用のメッセージボックスは出していたし、停止操作もできるようにしておいたつもりだったので、何をどうすればいいのか謎。
審査結果の文書は全て英語で書かれていることもあって、「ぉぃぉぃ、日本語ちゃんと読めてるんだろうな?」という疑惑はあるものの、仕方ないので文言を少し見直して「通知(Notification)」を強調したものに変えてみたのですが、果たしてこれで良いのかどうか…


というわけで、まだ詳細はお知らせしていませんが、今回のアプリはタイルへのプッシュ通知を利用しています。
WP7のプッシュ通知は、Microsoftが提供するプッシュ通知サーバ(MPNS)を利用するのですが、このMPNSに対して通知のリクエストを行うためには自前のサーバが必要となります。
また、プッシュ通知する相手先端末の一覧を管理するために何らかのWebサービス、ストレージも必要となるため、個人でやるには若干敷居が高めだったりするのですが、BizSparkパートナー企業ということで、Windows Azureを活用してみた次第。
端末管理にはAzumeインスタンスにWCFサービスを追加し、プッシュ通知のリクエスト用にWorkerRoleインスタンスを新作して対応。
Azumeでのノウハウを利用して比較的スムーズに実装できましたが、MPNSの仕様が英語ベースの情報しかないのがツライところ。
一番気になっていた通知頻度の限界値(throttling limit)は、英語のフォーラムを見る限り「1端末(チャネル)につき500回/24時間」とのこと。
未認証サーバの場合にこの制限がありますが、認証済みサーバの場合は無制限の模様。
いずれにしても、3分に1回の通知は可能ということなので、通常の利用においてはそれほど問題にはならなそうです。

通知の実装上注意が必要なのは、プッシュ通知が到達しなかった端末に対して何度も通知リクエストを送り続けると、MPNS側からロックされて、しばらくの間他の端末に対するリクエストも受け付けなくなってしまうという仕様に対処しなければならないこと。(詳細はこの辺に書かれています)
ある端末に対する通知リクエストがエラーになった場合、自鯖側としては当該端末に対する定期的な通知をいったん停止する必要があるということです。
あくまでサーバ側の挙動なので、マケプレの審査内容には含まれていないと思いますが、あまり適当な作りだとプッシュ通知がうまくいかなくなりますので、ご注意あれ。
ちなみに、端末が長時間スリープしているとプッシュ通知が届かなくなり、前述の現象が発生するようになるので、サーバ側の対策は必須と思われます。


WP7アプリリリースまでの流れ

/ Windows Phone

端末を入手後、早速トライしてみたWindows Phone 7(以下、WP7)のアプリ開発。

WP7では「マーケットプレース(以下、マケプレ)」と呼ばれるサービス(iOSで言うところのApp Storeに相当)がアプリの入手先となります。
マケプレにアプリを登録するには年間9,800円のショバ代が必要で、有償アプリのピンハネ率は3割。まぁ、おおよそiOSと合わせてきたという仕様になっています。
開発プラットフォームはSilverlightとXNAがサポートされていますが、XNAは専らゲーム用なので、一般にはSilverlightを使うことになります。
開発用のSDK(最新の7.5対応版は現時点で未だRC版)は無償提供されていて、VS2010のExpress版も含まれているのでエミュレータベースでの開発は誰でも無償で行うことができますが、実際の端末を使ってのテストは端末アンロックという操作が必要となり、そのためには前述のショバ代(App Hubへの登録)が必要となります。
まぁ、裏で出回っているアンロックツールを使えばその限りではありませんが、マケプレに掲載されていない通称野良アプリを動かすためには端末アンロックが必要となるので、公に配布しても実際に動かせる人は限定されてしまいます。
App Hubに登録が済めば、後は作ったアプリをApp Hubサイトから送信してマイクロソフトに審査をしてもらい、合格すればめでたくマケプレにリリースされるといった流れ。

とりあえず一通りの流れを実地体験してみようということで、App Hubへの登録申請を行いつつ、エミュレータベースでの開発を開始。
SDKを入れると現れるWindows Phone用のテンプレートを指定して新規プロジェクトを作成すると、もうそのまま実行できる状態でプロジェクトが出来上がります。
プロジェクトの中身はデスクトップ用Silverlightアプリの構成とほぼ同じなので、Silverlight、あるいはWPFアプリの開発経験者であれば、サクッと入っていけるはず。
で、おもむろに実行するとエミュレータが起動するわけですが、これがやたら重い。
いったん起動してしまえば後は普通なのですが、初回起動時はやたら時間がかかるので、エミュレータは一度起動したら落とさずにそのまま動かし続けておいたほうが良いようです。
SDK RC版のエミュレータは日本語にも対応していて、出来もなかなか良いので、端末無しでも問題なく完成形まで仕上げていけます。

そんなこんなでアプリを作った後はいよいよマケプレへの送信作業となるわけですが、App Hubへの登録申請は法人名義で約一週間かかりました。途中、Microsoftから認証作業を請け負っているGeoTrust社に登記簿謄本(3ヶ月以内に取得したもの)のメール送信などが必要となるのが若干手間ですが、基本的にメールのやりとりだけで済む手続きなので、それほど大変ではないかと。
ちなみに決済用のクレジットカードは個人名義のもので問題ないようです。
また、登録に必要なLive IDですが、これは既存のものを使うよりもApp Hub専用に新たに作ったほうが無難かもしれません。
なので、実際のファーストステップはLive IDを新規作成するところからになるかも。

マケプレへの登録は大きく2種類あり、ひとつは普通に公開する形と、プライベートベータといって指定したメンバのみがダウンロードできる形があります。
プライベートベータに関しては審査無しでマケプレ掲載できるので、試しに何度か登録してみたわけですが、説明では2時間ほどでダウンロード可能になると書かれていたものの、実際には登録完了のメールが来るまでに数時間、そこからマケプレに掲載されてダウンロードできるようになるまでさらに半日以上かかるという、実質ほぼ1日がかりの世界。
審査がないのだからもう少しスピーディに対応してもらいたいところですが、登録システムがまだ完全ではないのかもしれません。

ベータ版を登録した後に確認すべきはアートワーク関係。
マケプレ登録時にはアイコンや背景画像、キャプチャ画像などが必要となるのですが、これらが実際にどのように表示されるかは事前にいまいちイメージが掴めないため、万全を期すのであれば、ぶっつけ本番ではなく、いったんベータ登録して具合を確認したほうがよろしいかと思われます。
大きめのアイコンや背景画像についてはPC側のWindows Phone連携用ソフト「Zune Software」上で表示されるので、これを使って確認する必要があります。
Zune SoftwareはiOSにおけるiTunesのようにPCからWP7に音楽や動画などを転送するためのツールですが、開発したアプリの端末転送(配置)にも必要ですので、開発時にはSDKと同様に導入必須となります。

というわけで、ベータ登録が済んで、アプリのダウンロード/実行確認、アートワーク確認等、諸々の確認が済んで、いざ本番公開、となるわけですが、本番の登録/公開に関しては現在進行形(審査中)のため、また後日ということで…。


Windows Phone 7

/ Windows Phone

今月25日、満を持して日本でも発売されたWindows Phone 7。
世界に先駆けてauが出した端末IS12Tに搭載されたOSは7.5という最新バージョン。

国内発売の話題が先月末頃から出始めてきたので、一足先に海外のSIMロックフリー端末「HTC Mozart」を購入してみました。
某海外ショップからの個人輸入ですが、価格は円高の恩恵もあって25,000円程度。
香港からの発送で一週間ほどで到着しました。

サイズ的にはiPhone3G/3GSと同程度で、背面も同じくなだらかにカーブしていて、個人的には非常にフィットする形。見た目もわりと似てます。
ただ背面はサラサラしているのでちょっと滑りやすいかも。
有機ELな液晶はかなりキレイですが、タッチパネルの感度がシビアで慣れが必要な感じ。
また、静電式の物理ボタンは液晶とツライチなので、間違って押してしまうことも度々。
動作は期待通りサクサクで、どのアプリでもほとんどストレスなく動きそうです。
標準装備のハブ仕様なアプリ群は操作感が独特なので若干慣れが必要かもしれませんが、iPhoneとはまた一味違った感じで新鮮です。

そんなこんなで、端末のインプレはこれくらいにして、次回はアプリ開発の話。
ちなみに本日付けで、とあるアプリをマーケットプレースに登録申請しています…