Windows Phone アプリ登録初体験 - センサーチェッカーアプリ

作者分享了在MarketPlace上注册Windows Phone应用时遇到的问题及解决方案,主要涉及使用Location API时必须告知用户并获得其同意,以符合隐私政策要求。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Windows Phone アプリ登録初体験 - センサーチェッカーアプリ

実は、MSCやUX-TVでお見せしたセンサーアプリをMarket Placeに登録して、どうやら問題があるらしく、公開できない旨のメールを受け取っていました。
時間が無くて放っておいたwのですが、昨日のTFセミナーでテンションが上がった(というか高橋エバの話を聞いて)ので、セミナーの内容にしたがって(実は何回も過去に聞いた話だし、最後は達彦エバにも聞いたのですが(笑))トライしてみました。

先ず、App Hubを開いて滞っているアプリのページの下のほうのリンクをクリックして、何が悪いのか書いてあるPDFを見ました。
そうすると、

The following requirements apply to applications
that receive the location of a user's mobile device:
2.7.2 The privacy policy of your application must
inform users about how location data from the
Location Service API is used and disclosed and the
controls that users have over the use and sharing
of location data. This can be hosted within or
directly linked from the application.

と書いてあり、要するに、私がアップしたセンサーアプリは、Location APIを使っていて、位置情報はプライバシー情報に関わることなので、Location APIをアクセスする機能を有効にする前に、ちゃんとユーザーに「位置情報にアクセスするけどいいかな?」と聞いて「えぇいいわよ♪」という許可をとる仕組みを入れなさい・・・ていうことでした。
ちゃんと見て読んでみれば、「なんだそんなこと?」というレベルなので、早速、MainPageクラスに

        private bool isLocationAccessEnabled = false;

というフラグをメンバー変数として追加し、ページがロードされる時にコールされるLoadedメソッドで、

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (MessageBox.Show("Sensor Checker includes Location Access Feature. Do you permit accessing your current location?", "Location Access Permission", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                isLocationAccessEnabled = true;
            }

というコードを入れて(本当はYesNoのほうがよい気がするのだが)、ユーザーの承認を得て、isLocationAccessEnabledがtrueの時だけLocation機能を起動するボタンを有効にするコード、

            if (isLocationAccessEnabled)
            {
                buttonLocation.IsEnabled = true;
            }
            else
            {
                buttonLocation.IsEnabled = false;
            }

をこのメソッドの最後に入れたわけです。他にも、CompassのVisual表示のページでも、BingMapとLocation APIを使っているので、Compass機能を起動するボタンのハンドラーで、

        private void buttonCompass_Click(object sender, RoutedEventArgs e)
        {
            string newPageUrl = "/PageCompass.xaml?NavigatedFrom=Main Page";
            if (cbShowVisual.IsChecked.Value)   <== ここから
            {
                newPageUrl = "/PageCompassVisual.xaml?NavigatedFrom=Main Page";
            }
            if (isLocationAccessEnabled)
            {
                newPageUrl += "&isLocationOK=true";
            }
            else
            {
                newPageUrl += "&isLocationOK=false";
            }        <== ここまで
            this.NavigationService.Navigate(
                new Uri(newPageUrl, UriKind.Relative));
        }

というコードに変えて、PageCompassVisualページにユーザーの許可情報を渡し、PageCompassVisual.xaml.csのOnNavigatedToメソッドの中で、

            string isLocationOK;
            NavigationContext.QueryString.TryGetValue("isLocationOK", out isLocationOK);
            if (bool.Parse(isLocationOK))
            {
                cbShowMap.IsEnabled = true;
            }
            else
            {
                cbShowMap.IsEnabled = false;
            }

 と、パラメータを取り出して、BingMapによる地図表示を有効にするチェックボックスの有効・無効を制御を入れて出来上がり。ついでにCompassセンサーへのアクセスが頻繁すぎてBingMapのロードに時間がかかるので、

            mySensor = new Compass();
            mySensor.TimeBetweenUpdates = TimeSpan.FromSeconds(2);      <== 2秒間隔でデータを取得する
            mySensor.CurrentValueChanged += new EventHandler<SensorReadingEventArgs<CompassReading>>(mySensor_CurrentValueChanged);
            mySensor.Start();

と、測定間隔を微調整。これで地図表示があっという間に。

あ、これだと、各センサーのページからメインのページに戻る度に、ユーザーに許可を求めるメッセージボックスが表示されてしまい、「どんだけ慎重なの?」って感じになってしまうので、MainPageクラスにもう一つフラグを追加し、

        private bool isLocationAccessAsked = false;

Loadedメソッドを下のように変更。

        private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
        {
            if (!isLocationAccessAsked && MessageBox.Show("Sensor Checker includes Location Access Feature. Do you permit accessing your current location?", "Location Access Permission", MessageBoxButton.OKCancel) == MessageBoxResult.OK)
            {
                isLocationAccessEnabled = true;
            }
            isLocationAccessAsked = true;

これで、蚤の心臓を解消。これで、昨晩、再度Market Placeの審査に挑戦中です。審査が通れば万歳です。もし通らなかったら、また、ブログネタとして投稿します。
以上、センサーチェッカーは、http://mangosensorchecker.codeplex.com/ で公開しているので、参考にしてください。

转载于:https://www.cnblogs.com/iphone6/archive/2011/11/15/2249197.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值