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

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

極意9: アプリで提供されるプライマリ・エクスペリエンスはアプリ内で行われなければならない

2013年9月20日

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

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

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

 「Windows 8 アプリの認定の要件」の中に、以下の記述がある。

  「2.4 アプリで提供されるプライマリ エクスペリエンスはアプリ内で行われなければならない

 何とも意味不明な「認定の要件」である。直訳すると、プライマリとは「基本的な」、エクスペリエンスとは「経験」の意味になる。「基本的な経験はアプリ内で行わなければならない」って、一体どういう意味だ???

この認定の要件の意味

 正直、筆者が初めてこの「Windows 8 アプリの認定の要件」でリジェクトされたときは、一体何のことを言っているのか全く理解できず、どう対処したらいいのか、途方に暮れた記憶がある。いろいろWebで情報を収集して、これは「アプリが提供している価値はアプリ内で完結している必要があるということだ。具体的には例えば、Windowsストア・アプリで、Webブラウザーを開いて情報を表示させるアプリがあるが、Webブラウザーを開くことによって価値を提供しているアプリは、ストアの審査に通らない」ということらしい、と知った。

 なるほど、先の「基本的な経験」とは「アプリが提供する価値」を指すのだろうと納得した。

この認定の要件をクリアするには

 では、Webブラウザーで直接情報を表示させることがダメなのなら、どうすれば認定されるのか? この件に関してもいろいろWebの情報をあさってはみたが、解決方法について書かれているサイトを見つけられなかった。Webに情報がない以上は自分で何とかしなくてはならない。リジェクトされた「認定レポート」の内容を、貧弱な英文理解能力で判断したり、添付されているPDFファイルをじっと眺めたりしては、しばし考え込むことが多かった。

 しかし、よくしたもので、うまく理解できない英文でも、機械翻訳の力を借りたり、自分の知っている英単語で判断したりしていくと、自然と担当者が何を言いたいのかが分かってくる。特にPDFに掲載されていたスクリーンショットを見たときは、初めは何のことやら理解できなかったが、そこに書いてある英文の少ない情報を基に、このスクリーンショットを使うとマズイのだな、ということは理解できた。

 「何がマズイのか」が理解できて、次に困ったのが「では、どうすればいいのか?」という点だ。担当者は、単にこれはマズイとしか言ってこない。では、こうすればいいとは教えてはくれない。そこは自分の力で解決しなければならないのだ。スクリーンショットがまずいとPDFを添付してくるということは、このスクリーンショットは載せなければいいのだな、とはすぐに思い付いた。

 しかし、それだけでいいのか? MSDNブログには「Windowsストア・アプリで、Webブラウザーを開いて情報を表示させるアプリがあるが、アプリが提供している価値はアプリ内で完結している必要があり、Webブラウザーを開くことで価値を提供しているアプリは、ストアの審査に通らないということだ」と書いてある。「Webブラウザーを開くことで価値を提供しているアプリは、ストアの審査に通らない」ということは、Webブラウザーで表示はしているが、これは、必ずしも価値を提供するために表示させているのではない、ということを担当者に理解してもらえばいいのだと思い付いた。少し光明が見えてきたようだった。

VBコードでWebブラウザーを直接起動する方法

 VB(Visual Basic)のコードでいうなら、リスト1のように直接ブラウザーを起動させて、コンテンツを表示させて価値を提供してはならないということだ。

Visual Basic
Windows.System.Launcher.LaunchUriAsync(URI)
リスト1 直接Webブラウザーを呼び出すVBコード

 筆者は、このコードを使ったアプリをWindowsストアに公開している。「四国八十八か所」だ(次の画面を参照)。四国八十八か所の所在地をBing Maps上に表示するアプリだ。

[検索]ボタンでブラウザーを直接起動し情報を表示している

 このアプリは、初回に申請した時点で見事にリジェクトされた。今回の「認定の要件」など知らずにアプリを作り、申請したのだから、当然の結果といえば当然の結果なのだ。かといって、先に「認定の要件」に目を通していても、結果は同じであったろうと思う。この「認定の要件」の意味が分かるはずもないからだ。

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

 その認定レポートは次のようなものだった。

「お客様のアプリは、要件2.4を満たしていません。」という理由でリジェクトされた「認定レポート」

 このアプリは、[検索]ボタンをタップするとWebブラウザーが起動して、四国八十八か所の札所の情報が表示されるようにしている。当時は、この「認定の要件」を知らなかったものだから、[説明]欄にも「[検索]ボタンをタップするとWebブラウザーが起動して情報を表示します。」と記入したり、Webブラウザーが起動したスクリーンショットを掲載したりしていた。もちろん、この点が引っかかったのだ。

添付されていたPDFの内容

 上記の画像の一番下に、「詳しい情報のダウンロード (.zip ファイル、37 7KB)」と記述されている箇所がある。ここをタップしてZIPファイルをダウンロードして解凍すると、PDFファイルが現れる。そのPDFファイルを開いたのが、次の画面だ。

「四国八十八か所」のアプリで、[検索]ボタンをタップしてWebブラウザーを表示させたスクリーンショットが載っている

 このスクリーンショットが添付されているということは、このスクリーンショットを使用するのがマズイのだと理解できる。

 このように、Webブラウザーを直接起動して情報を表示させることはリジェクトの対象となる。また、Webブラウザーのスクリーンショットを掲載していると、これももちろんリジェクトの対象となる。[説明]欄にもWebブラウザーについては何も触れない方が賢明だ。

 [検索]ボタンをタップしたときのコードが次のリストだ。

Visual Basic
AddHandler myButton.Click, Async Sub(mySender As Object, myArgs As RoutedEventArgs)
  Dim myIndex = DirectCast(mySender, Button).Tag
  Dim _Index As Integer = CInt(myIndex)
  Dim myPlace = xmldoc.Descendants("札所")(_Index).Attribute("所在地").Value
  Dim myTemple = xmldoc.Descendants("札所")(_Index).Value

  ' Bingで指定した札所の情報を表示させている
  Dim myUri = New Uri("http://www.bing.com/search?q=" & Uri.EscapeDataString(myPlace) & " " & Uri.EscapeDataString(myTemple))
  Dim mySucess = Await Windows.System.Launcher.LaunchUriAsync(myUri)
  If Not mySucess Then
    Exit Sub
  End If
End Sub
リスト2 [検索]ボタンをタップしたときのイベント・ハンドラ

 実際、アプリを申請する際、筆者は上記のコードを常に使用している。そしてWebブラウザーを直接起動しているアプリも多数認定されている。どうすれば認定されるか、それにはコツがある。筆者が悩み抜いて見付けた解決方法である(^_^)v。それについて書いておこう。

認定される方法

 第1回目にも書いているが、筆者がこのアプリを認定させるのに取った方法は、[審査担当者へのコメント]欄に次の文書を書いておくことだった。

ブラウザーでの表示はあくまでも補助的手段で、メインは場所の所在地をBing Maps上に表示する点にあります。

 「Webブラウザーを開くことで価値を提供してはならない」というのだから、それなら、このアプリの価値は、四国八十八か所の位置をBing Maps上に表示することであって、Webブラウザーで情報を表示することは、補助的な手段にすぎないと、審査担当者に知らせることだと思い付いた。

 そして、ブラウザーでの表示画面のスクリーンショットを掲載したりはせず、[説明]欄にも「ボタン・タップなどでブラウザーが起動し情報を表示します。」などとは一切書かないことだ。ブラウザーの件には触れないことが一番だ。筆者の場合は、この方法で直接ブラウザーを起動するアプリでも、全て認定されている。

 実際、Webブラウザーで表示させるアプリが全てリジェクト対象となると、作るアプリの実用性も半減されてしまう。Webブラウザーを利用して、該当するデータを表示させる場面は多いはずだ。それなのに、「2.4 アプリで提供されるプライマリ エクスペリエンスはアプリ内で行われなければならない」という「認定の要件」はちょっと理解しがたい部分がある。しかし、実際には前述のような方法で、Webブラウザーを使用したアプリは全て認定されているので、問題はないといえば問題はないのだが。

 筆者個人の考えとしては、上記のやり方で認定されるのなら、別にこの「認定の要件」は不要ではないかと考える。Webブラウザーで表示したスクリーンショットを掲載すると何が問題で、[説明]欄でWebブラウザーについて触れると何がいけないのか、筆者が「認定の要件」をよく理解していないだけなのかもしれないが、子供だましのような方法(-_-;)で認定される「認定の要件」って一体なんなのだろうか(-_-;)、と、ふと思ってしまった。

 今回使用した方法以外にWebブラウザーを表示させる方法が、もう1個ある。WinRT XAML Toolkitに含まれるWebBrowserコントロールを使う方法だ。この方法について、コラムを書いた。

【コラム】WinRT XAML ToolkitのWebBrowserコントロールを使う

 Windows.System.Launcher.LaunchUriAsyncメソッドで、直接、Webブラウザーを起動して情報を表示させるのがダメなのなら、「WinRT XAML Toolkit*1」に含まれるWebブラウザー・コントロールを使用して情報を表示させるのはOKなのかと思って試したことがある。「WebBrowserShow.xaml」というページを作り、このページにWebBrowserコントロールを配置しておく。そして、MainPage.xamlから渡された値を、リスト3のように記述して情報を表示する。

Visual Basic
WebBrowser1.Source = New Uri(myUrl, UriKind.Absolute)
リスト3 WebBrowserコントロールに指定したURLを表示させるVBコード

 この方法で申請して認定され公開されているアプリが、「新版:日本のお城」だ。このアプリでは、[Webで検索]ボタンをタップするとWebBrowserコントロールの中に情報を表示させるようにしている。この方法だと、WebBrowserコントロールで表示されたスクリーンショットを掲載してもOKだし、[説明]欄に「[Webで検索]ボタンをタップすると選択したお城の詳細データをブラウザーで表示します」と記述していても何ら問題なく認定されている。

 直接、Webブラウザーを起動させる方法はNGで、WebBrowserコントロール内に表示させる方法がOKとは、一体どこに違いがあるのか、筆者の老いかけた脳みそでは理解しきれていない(-_-;)。「ひょっとしたら、WebBrowserコントロールを使用する方法もNGで、単に審査員が勘違いをしているだけにすぎないのではないか?」などと杞憂(きゆう)することもあるのが本音だ。それほど、この「認定の要件」は審査結果にバラつきがあるのも事実なのだ。

 ただ、WebBorwserコントロールを使う場合は、新たに1ページ余分にWebBorwserコントロールを配置するページを作り、[戻る]アイコンを配置したりと、Webブラウザーを直接起動するよりは多少手間がかかる。そこで、ものぐさな筆者はできるだけ簡単な、Webブラウザーを直接起動させる方法を最近では取っている。スクリーンショットを掲載せず、Webブラウザーに触れないだけなら、こちらの方が、プログラムが簡単なのだ。どちらの方法を選択するかは、各開発者が決めればいい。

  • *1WinRT XAML Toolkitは、Visual Studio 2012のソリューション・エクスプローラー内の、[参照の追加]の右クリック・メニューにある[NuGet パッケージの管理]からインストールできる。

 もう1点、Webブラウザーで情報を表示させる場合は、気を付けなければならないことがある。それは、表示されたページの、リンク先のページの拡張子が「.shtml」または「.shtm」の場合だ*2。この場合は、ページを表示させるためにリンクをタップした際、スクリプト・エラーが表示される。こういった場合は、一度、Visual Studio 2012のメニューバーから[デバッグ]-[デバッグなしで開始]で実行してみよう。これで問題なく表示できれば、申請しても問題はない。

  • *2.shtmlとは、SSI(Server Side Include)スクリプトを含んだHTMLファイルに付く拡張子のことである。

お知らせ

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

 今回はこれで終わりだ。筆者が、この「認定の要件」をクリアできる方法にたどり着くまでには、いろいろ試行錯誤した。その試行錯誤して得られた情報を今回は書いた。ひょっとしたら、独断と偏見が混じっているかもしれない。その場合は、お許しを願いたい。読者の皆様のお役に立つといいのだが……。

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

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

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

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

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

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

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

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

VB開発者のためのWindowsストアアプリをリリースするための13の極意
10. 極意10: サポートしている全ての言語でアプリをローカライズしなければならない

日本語版のWindowsストア・アプリ上の表記に英単語があると申請時にリジェクトされる?! その対象方法を紹介する。

VB開発者のためのWindowsストアアプリをリリースするための13の極意
11. 極意11: バージョンの一致と日本語OS

アプリの実バージョンと、表示しているバージョンが一致していない場合のリジェクト例。また、日本語版限定に用意した機能を申請する場合に注意するポイントを紹介する。

サイトからのお知らせ

Twitterでつぶやこう!