酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

またリジェクト!!面倒くさいプライバシーポリシー問題に1行で対応する方法

インターネット(クライアント)をオフにしているにも拘わらず、要件4.1のプライバシーポリシーが原因でリジェクト。同じソースコードを流用した別アプリに関しては審査に通過しているという事実があるので、この審査する担当者の質のバラツキにやられている感がある。

同じ要件4.1で2回もリジェクトされたのでもう降参!しぶしぶプライバシーポリシー表示に対応させることを決めました。全てのアプリケーションに対してプライバシーポリシーの掲載をストア審査の必須要件として追加して欲しいなと思う。

それはそうと、面倒くさいプライバシーポリシー問題に1行で対応するために、SettingsPaneHelperというクラスを作りました。

SettingsPaneHelper.cs

名前空間とクラス名は僕が使いやすいようにしていますので、もし利用される場合には適切な名前にしていただければと思います。

using Softbuild.Text.Helper;
using System;
using Windows.System;
using Windows.UI.ApplicationSettings;
using Windows.UI.Popups;

namespace Softbuild.Helpers
{
    static class SettingsPaneHelper
    {
        public static void Initialize()
        {
            // Windows.UI.ApplicationSettings名前空間の設定ペインのオブジェクトを取得
            var settings = SettingsPane.GetForCurrentView();
            // ユーザーが設定ペインを表示するときに呼び出される設定項目の初期化処理
            settings.CommandsRequested += settings_CommandsRequested;
        }

        private static void settings_CommandsRequested(SettingsPane sender, SettingsPaneCommandsRequestedEventArgs args)
        {
            var command = new SettingsCommand(1, "プライバシーポリシー"),
                new UICommandInvokedHandler(async (target) =>
                {
                    var url = "http://yahoo.co.jp/";
                    await Launcher.LaunchUriAsync(new Uri(url));
                }));
            args.Request.ApplicationCommands.Add(command);
        }
    }
}

使う側のPage.xaml.csでの対応

設定ペインに「プライバシーポリシー」を表示させる場合には、ページ側のソースコードの適当な場所でSettingsPaneHelperクラスのInitializeメソッドを1行呼ぶだけです。これで、プライバシーポリシー対応は完了です。

以下のサンプルコードではLoadStateメソッド内で呼んでいますが、OnNavigateToメソッドで呼ぶのもありかもしれません。

        protected override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
        {
            if (pageState == null)
            {
                Softbuild.Helpers.SettingsPaneHelper.Initialize();
            }
        }

でも、一番面倒くさいのはプライバシーポリシーの本文じゃね?

はい。でもここは助けることができない領域ですので、有志のプライバシーポリシーの本文を参考にしていただくのが一番だと思います……。