Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
VB開発者のためのWindowsストアアプリをリリースするための13の極意

VB開発者のためのWindowsストアアプリをリリースするための13の極意

極意7: アプリは、キーボード、マウス、タッチで機能する必要がある

2013年9月6日

作成したアプリは、キーボードでもマウスでもタッチでも動く必要がある。この理由で申請をリジェクトされた場合の体験談と対処法を紹介する。

  • このエントリーをはてなブックマークに追加

前書き ―― 今回の極意について

  「Windows 8 アプリの認定の要件」の中に、以下の記述がある。
   「3.5 アプリはタッチ入力、およびキーボード入力とマウス入力を完全にサポートしなければならない
    ・アプリは、ユーザーが対話要素をタッチしたときに視覚的なフィードバックを返す必要があります。

この「認定の要件」の意味

 これの意味するところは、読んだまま、そのままの意味だから理解できるだろうと思う。要は、作成したアプリは、キーボードでも動き、マウスでも動き、タッチでも動く必要があるということだ。また、キーボード操作の場合は[Tab]キーによるフォーカスの移動も必要だ。

 普通にプログラムさえしていれば、問題のないことのように思えるが、これが意外とリジェクトされる原因になることが多い。

 筆者はWindowsストアに「赤ちゃんがほしい」というアプリを公開している(次の画面を参照)。

「赤ちゃんがほしい」アプリ

 このアプリは、Webカメラで写した写真の上に、リストボックス内に表示される赤ちゃんの画像を選択して、それを拡大・縮小したりして任意の位置に合成保存するためのアプリだ。[一覧]アイコンで、保存した画像の一覧ページも表示される。

「アプリは、キーボード、マウス、タッチで機能する必要がある」でのリジェクト

 このアプリは初回、今回の要件に抵触してリジェクトされてしまった。この種類のアプリは何個も申請して認定されているのだが、ときどきこの要件でリジェクトされる。筆者の環境では、キーボード、マウス、タッチ全てで問題なく動作している。しかしリジェクトされてしまった(次の画像を参照)。

リジェクトされた認定レポート

画像一覧ページでの不具合

 先にも書いたが、この「赤ちゃんがほしい」は2画面構成になっている。最初のページでWebカメラから写真を撮り、赤ちゃんの画像を拡大・縮小して任意の位置に配置して、合成保存する。そして、[一覧]アイコンをタップすると、保存した画像が一覧表示されるページに遷移する。この画像一覧ページが2画面目になる(次の画像を参照)。

保存した画像の一覧ページ

 「恐らく問題は、この画像一覧ページで、キーボードによる画像選択がうまくできないのではないか」と推測した。そう考えたのには、それなりの理由があった。筆者の環境ではほぼ問題なく、キーボードの[←]/[→]キーで画像は選択できていたのだが、まれに、前の画像を選択しようとして[←]キーを操作しても選択できないことがあったからだ。再現性が低かったので、「大丈夫だろう」と思って申請したのだが、「恐らく審査員の環境で、この再現性の低かった不具合が発生したのだろう」と推測した。

筆者の取った対応

 まずコード面から簡単に説明すると、画像一覧ページでは、画像はGridViewコントロール内に表示している。画像一覧のページに遷移したとき、ScrollIntoViewメソッドで、最後に追加された画像までスクロールして選択されるようにしている。そして、選択された画像にフォーカスが移るように、「GridView1.Focus(Windows.UI.Xaml.FocusState.Keyboard)」と記述している。フォーカスを持たすことで、先の画像を見ると分かると思うが、選択された画像の枠が白い枠線で囲まれる。画像がこの白い枠線で囲まれていないと、キーボードの[←]/[→]キーによる画像の選択はできない。ただし[Tab]キーを使って、フォーカスをGridViewコントロールに移動した後ならキーボードの[←]/[→]キーによる選択が可能になる。

 しかし今回の場合は、すでに一番新しく追加された画像が選択され、フォーカスもある状態なのだから、この状態でキーボードによる操作ができなければならない。通常は、何ら問題なくキーボードで自由に画像を選択できる。しかし、先にも書いたが、まれに、選択されたGridViewコントロールの枠に白い枠線が表示されない、つまりフォーカスが移っていない状態が発生して、キーボードで画像が選択できなくなっていたのだ。筆者のコードの書き方が悪いのかどうか、現時点では再現性が低いので何とも言えない。しかし、フォーカスがGridViewコントロールに移っていない状態でも、キーボードの[←]キーではなく、[→]キーを操作すると、フォーカスが画像に移り、GridViewコントロールの画像がキーボードで選択可能になる。

 そこで筆者は、[審査担当者へのコメント]欄に次のようにコメントした。

[審査担当者へのコメント]欄の利用

  キーボード、マウス、タッチで機能しないのは、画像一覧の画面での出来事ではないかと推測します。しかし、私の環境では、キーボード、マウス、タッチ全てで問題なく動作しています。画像の一覧画面では、最後に追加された画像が選択状態になっています。その状態から[←]キーで前の画像を選択しようとして選択できない場合は、[→]キーを操作してみてください。キーボードで画像が選択できるようになります。もしリジェクトが、私の思っている画面での出来事でない場合は、お手数ですが、不具合の発生する画面のスクリーンショットを付けてください。よろしくお願いいたします。

 以上のようにコメント欄に書いて再申請した。すると問題なく認定された。

再申請する場合はアプリ・パッケージを再作成する

 リジェクトされて再申請する場合に忘れてはならないのが、アプリ・パッケージの再作成だ。プログラム・コードを変更していないからといって、先にアップロードしていたファイルをそのまま使って再申請してはならない。再申請する場合は、コードに変更がなくても再度、アプリ・パッケージを作り直して、新しいのをアップロードすることをお勧めする。再申請した場合は、アップロードされているファイルが、新しいファイルか、以前のままの古いファイルかは、作成されるパッケージに自動で追加されるバージョン番号で、審査員には分かるようになっている。審査の受けを良くする意味でも、必ずアプリの再パッケージ化をしてアップロードしてほしい。

ListBoxコントロールのIsEnabledプロパティを「False」に指定していた場合

 もう1点注意しておかなければならないのが、コントロールのIsEnabledプロパティの値が「False」であった場合だ。例えば、アプリを起動した時点では、ListBoxコントロール内に表示されている画像を選択できないように、IsEnabledプロパティに「False」を指定していたとする。そして、Webカメラで写真を撮った時点でListBoxコントロール内の画像が選択可能になる(=「True」に指定し直す)とする。こういった場合は、この手順を[審査担当者へのコメント]欄にきっちり書いておかねば、担当者が「マウスや、タッチ、キーボードでListBoxコントロール内の画像が選択できない」と勘違いしてリジェクトされる可能性がある。

筆者の取った対応策

 起動した時点ではListBoxコントロールは選択不可であり、Webカメラで写真を撮った時点でListBoxコントロールが選択可能になる、ということを、[説明]欄や[審査担当者へのコメント]欄にはっきりと書いておく必要がある。例えば以下のように書いておく。筆者はこれが原因で、実際に何回かリジェクトされた経験があるのだ。無駄な時間を費やしたと後悔している。

  このアプリでは、起動した時点では、ListBox内の画像は選択できない状態になっています。Webカメラで写真を撮ると、ListBox内の画像が選択できるようになります。

 そこで最近では、アプリが起動した時点ではListBoxコントロールは非表示にしておき、Webカメラで写真を撮った時点で、ListBoxコントロールを表示して画像の選択を可能にする、といった方法を取っている。これなら、審査員が勘違いする心配はない。審査員の手順動作まで予想してプログラムを書かねばならないとは、なかなかしんどいことである(-_-;)。

お知らせ

Windows 8の[検索]チャームで「ストア」を指定し、検索欄に、「kuniyasu」または「YakushijiKuniyasu」または「eightman」と入力すると、筆者の公開しているアプリの一覧を見ることができる。

 Windowsストアにアプリを申請してリジェクトされた経験のある方なら、きっと実感されていると思うが、Windowsストアの審査員のリジェクトに対するコメントが、あまりに事務的で分かりづらいとは思われたことはないだろうか? そのWindowsストアの審査について、以下にコラムを書いた。筆者の愚痴のような内容だが、不親切なWindowsストアのリジェクトに、どう対処したらいいかを簡単に書いてみた。

Windowsストアの審査員の対応って……

 筆者は以前Windows Phone 7.5のアプリも開発しており、Marketplaceに何点かアプリも公開している。この際のWindows Phone Dev Centerでの審査員の対応は実に素晴らしかったと記憶している。不具合が発生したら、その手順まできっちりと書いてくれていた。だから修正にも大した時間を要さず、スムーズに再申請ができた。Windowsストアの審査員の対応も、Windows Phoneのときの審査員の対応と同じだろうと期待していると痛い目に遭う(-_-;)

 ただし、この極意が掲載されるころには、Marketplaceに公開していたWindows Phoneのアプリは全て削除されているだろう。なぜなら、Windows Phoneの機種がIS12T以来、日本で販売されていない現状、Windows Phoneアプリ開発は無用であると判断して、開発者登録費用の更新を停止してしまったからだ。開発者登録を停止すると、Windows Phoneにおいては、Marketplaceで公開していたアプリが全て削除されるようだ。

 では、Windowsストア・アプリの場合はどうか、というと、「Windows ストア アプリ開発者契約書」の「10.期間および終了についての規定」の「b」に、この件に関しての記述があり、「以前に、該当アプリをダウンロードされた方にのみ提供可能な状態にする」と明記されている。

 話がそれてしまった、元に戻そう。

 Windows Phoneのときの審査員の対応と、Windowsストアの審査の、リジェクト時の対応には雲泥の差があると思ったほうがいい。Windowsストアの審査員の対応は、決して親切丁寧とは言えない。事務的に「Windows 8ストア 認定の要件」の番号とその内容だけを書き、担当者からのコメントが数行付く程度で、どのような手順で、どの画面で不具合が発生したのかは一切教えてくれない。

 こういった状況だから、Windowsストアにアプリを初めて申請して、リジェクトされた方は、大変な苦労をされるだろうと思う。私もその経験者であるから、リジェクトされた方の気持ちは痛いほど分かる。どうしてもリジェクトされた箇所が分からない場合は、再申請する際の[審査担当者へのコメント]欄に、「どこの画面での不具合か、スクリーンショットと手順を教えてください」と正直に書くことだ。すると、ちゃんとスクリーンショットも添付してくれる。その添付したスクリーンショットの中に、簡単ではあるが手順も書いてくれる。

 審査員も好きこのんでリジェクトしているわけではないだろう。同じ人間として考えるなら、できるだけ認定してストアに公開できるようにしてあげよう、という気持ちで審査されていると思う。リジェクトされて、そのリジェクトの意味がいくら考えても分からない場合は、正直に担当の審査員に聞くことが最善の方法である。分からないことをいくら考えても、時間だけが無駄に過ぎていくだけだ。それより、直接審査員に問いただすほうが結果的に、認定される近道になると筆者は思っている。遠慮などする必要は全くないのである。しかし、最終的には自分の力で問題を解決して、認定に持っていかねばならない。一度リジェクトされると、場合によっては認定までに数週間を要する覚悟が必要だ。

 今回はこれで終わりだ。今回の「認定の要件」で、初めてリジェクトをされた場合は、意味は分かっていても、どの画面のことを言っているのかを理解できないことが多い。今回例に挙げたサンプルは2画面しかないからいいが、画面の多いアプリで、この要件でリジェクトされたら、どの画面のことか、かなり悩まねばならないだろう。そんな場合は[審査担当者へのコメント]欄で、どの画面のことか尋ねるといい。

 またマイクロソフトでは「Windows 8 Clinic」という窓口を用意しているので、ここに問い合わせるのもいいと思う。遠回りになるが、最終的にはこれが認定への近道になると筆者は考える。

 では、また次の機会にお会いしよう。

※以下では、本稿の前後を合わせて5回分(第5回~第9回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

VB開発者のためのWindowsストアアプリをリリースするための13の極意
5. 極意5: カテゴリとサブカテゴリの選び方

「カテゴリやサブカテゴリだから適当でいいや!」と高をくくっていると痛い目に遭う。実際の経験を基に、カテゴリとサブカテゴリの選択指針をまとめる。

VB開発者のためのWindowsストアアプリをリリースするための13の極意
6. 極意6: ユーザーがWindowsストアからアプリを入手したとき、そのアプリは完全に機能しなければならない

「アプリは完全に機能しなければならない?!」ってどういう意味? 筆者の体験談から、マイクロソフトのテスターが「アプリが不完全だ」と判断する例と対処法を説明する。

VB開発者のためのWindowsストアアプリをリリースするための13の極意
7. 【現在、表示中】≫ 極意7: アプリは、キーボード、マウス、タッチで機能する必要がある

作成したアプリは、キーボードでもマウスでもタッチでも動く必要がある。この理由で申請をリジェクトされた場合の体験談と対処法を紹介する。

VB開発者のためのWindowsストアアプリをリリースするための13の極意
8. 極意8: アプリで広告を表示するために、説明、タイル、通知、アプリ バー、または端からのスワイプ操作を使ってはならない

収益を得るために広告を掲載する場合、何が良くて何がダメなのか。不合格になった認定レポートを紹介し、その対処方法を紹介する。

VB開発者のためのWindowsストアアプリをリリースするための13の極意
9. 極意9: アプリで提供されるプライマリ・エクスペリエンスはアプリ内で行われなければならない

Windowsストア・アプリからWeb上の情報を表示するために、Webブラウザーを開くと申請時にリジェクトされる?! その対象方法を紹介する。

サイトからのお知らせ

Twitterでつぶやこう!