がりらぼ

WindowsRuntimeの応援ブログ

Windowsストアアプリにプライバシーポリシーをつける

アプリによっては、プライバシーポリシーをちゃんと記述していないと、4.1でリジェクトされてしまいます。
まず、プライバシーポリシーとは
プライバシーポリシー (英語: privacy policy) は、 インターネットのウェブサイトにおいて、収集した個人情報をどう扱うのか(保護するのか、それとも一定条件の元に利用するのか)などを、サイトの管理者が定めた規範のこと。個人情報保護方針などともいう。
Wikiペディアより抜粋

個人情報を取り扱うアプリでは必要そうですね。ちなみに僕はローカルの画像を参照するだけでプライバシーポリシーいるって言われました。

ではどうするか。
まず、ご自身のWebサイト、ブログでもいいですが、プライバシーポリシーを書きましょう。
プライバシーポリシー
僕は英語にしましたが、日本語で、適当なところから抜粋して可変したら大丈夫です。

次にアプリの設定にプライバシーポリシーを追加します。

2014/7/3現在、WindowsUpdateによってストア申請時に入力したプライバシーポリシーURLが自動的にアプリに反映されるようになりました。
よって以下の作業は不要になり、上記でつくたプライバシーポリシーのサイトURLをストア申請時に入力するだけでOKになりました。


using文を宣言

using Windows.ApplicationModel.Core;
using Windows.UI.ApplicationSettings;
using Windows.System;

App.xaml.csのOnLaunchedメソッドのif(rootFrame==null){}内に
以下の文を追加します。

SettingsPane.GetForCurrentView().CommandsRequested += (s, args) =>
{
   UICommandInvokedHandler handler = new UICommandInvokedHandler((command) =>
  {
      //resultがtrueならブラウザ起動成功。falseなら起動失敗
      var result = Launcher.LaunchUriAsync(new Uri("http://garicchi.hatenablog.jp/entry/2014/02/08/151814"));
      

  });

   SettingsCommand pryCommand = new SettingsCommand("プライバシーポリシー", "プライバシーポリシー", handler);
   if (args.Request.ApplicationCommands.Where(x=>x.Id==pryCommand.Id).Count()==0)
   {
       args.Request.ApplicationCommands.Add(pryCommand);
   }
  
};

これでアプリの設定チャームからプライバシーポリシーをブラウザで表示できるはずです。

ユニバーサルアプリの場合

ユニバーサルアプリの場合、App.xaml.csにSettingsPaneをかけなくなったので何かしらの変数で一度でも実行されたか判定する必要がある。
そこでCoreApplication.Propertiesに値をいれて判定することにした。
以下の文をWindowsストアアプリで確実に実行されるであろう(Main.xaml.csのコンストラクタとか)に入れる

if (!CoreApplication.Properties.ContainsKey("SettingsPaneInitialize"))
{
    SettingsPane.GetForCurrentView().CommandsRequested += (s, args) =>
    {
        SettingsCommand pryCommand = new SettingsCommand("プライバシーポリシー", "プライバシーポリシー", async (command) =>
            await Launcher.LaunchUriAsync(new Uri("http://garicchi.hatenablog.jp/entry/2014/02/08/151814"))
        );

        if (!args.Request.ApplicationCommands.Any(x => x.Id == pryCommand.Id))
            args.Request.ApplicationCommands.Add(pryCommand);

    };
    CoreApplication.Properties.Add("SettingsPaneInitialize", true);
}