locked
Certification Failed with Privacy Statement missing RRS feed

  • Question

  • Hello,

    I've just submitted my app and the result is failed.

    They said "Our reviewer could not find a privacy statement in the Windows Charm settings of this app."

    Where should I put the privacy statement into?

    I found that I can include the privacy statement URL in the app submission in StorePortals, is this one enough? or should I add the URL somewhere else in my code?

    Thank you

    Karnpot

    Friday, September 28, 2012 4:28 AM

Answers

All replies

  • same here, just received failed report. What needs to be done ??

    C. Our reviewer could not find a privacy statement in the Windows Charm settings of this app.

    Friday, September 28, 2012 8:17 AM
  • I would suggest you add a 'Privacy Statement' link in your settings

    Jeff Sanders (MSFT)

    Friday, September 28, 2012 12:09 PM
  • Is it necessary to put the 'Privacy Statement'  link into Settings Flyout?

    Can I put it in anywhere I want in my App?

    Friday, September 28, 2012 12:17 PM
  • Please understand, Mister Sanders, no documentation anywhere even suggests that as a possibility.  It's a real problem that your reviewers are enforcing rules we've never heard of.

    I've now been bounced on privacy policy four times with no explanation, and I'm wondering if this "in windows charm" bit is what it's been about.

    The word "charm" does not occur in your requirements.  Your reviewers make no effort to explain their rejections, and it costs weeks to get back through, only to have the same mystery applied again.

    For a company that says it wants a lot of apps, you really don't seem to want to make it easy for us to follow your rules.

    It is a very difficult problem that the review team's management cannot be notified that the review team is making serious errors.  There is no way to fix problems when you have erected a wall around the source of the problems and left no avenue for your developers to say "this is where your system is failing."

    Saturday, September 29, 2012 12:37 AM
  • I have this problem also,

    "B:: A privacy statement was not found in the Description page of the app. C:: Our reviewer could not find a privacy statement in the Windows Charm settings of this app."

    It says you need a privacy statement "If your app collects or transmits any user’s personal information" which mine doesn't. So why do I need a Privacy statement?

    Saturday, September 29, 2012 1:11 PM
  • In the "Excellence lab" I was clearly told there needs to be a privacy policy if you have the 'Internet client' capability enabled in your app, whether or not you're actually collection customer info. Not only should you provide a link to that privacy policy in the Description page of the submission site, but the policy (or a link to it) should show up in your settings. I've created a "Privacy Policy" setting that displays a couple of paragraphs in the settings panel, explaining the app does not use any personal information. And yes you can do that using SettingsFlyout.

    I agree that not justifying failures is unacceptable from a customer standpoint, and really feels like an abuse of power. It's also hard to believe there is no customer support to follow up on certification questions, at least for apps that have passed the initial tests. Reminiscent of some government agencies... Whatever happened to the Store's transparency and predictability goals ? I just hope this changes after the official launch.


    Saturday, September 29, 2012 4:41 PM
  • Good feedback ykhammal around the 'InternetClient' and 'InternetClientServer' capabilities.  We appreciate the feedback and have recently updated our certification policies, and have specifically made some updates to the privacy related requirement policy 4.1.1.  Also, regarding support there is an avenue to contact us for technical help as well as general questions that can be found on the support tab of the Dev Center

    Saturday, September 29, 2012 6:49 PM
  • i've found there's no much resources to follow, so i spent some time to work on this, hope this can help you all from scratch, please comment this to make it complete.

    1. download samples from http://code.msdn.microsoft.com/windowsapps/App-settings-sample-1f762f49 (i use C#)

    2. copy the SettingsFlyout.* from the samples to your project.

    3. modify these files to suit your namespace (remove using SDKTemplate and replace ApplicationSettings with your application namespace).

    4. add the following code in your App.xaml.cs

    using Windows.UI.ApplicationSettings;
    using Windows.UI.Popups;
            void onSettingsCommand(IUICommand command)
            {
                SettingsCommand settingsCommand = (SettingsCommand) command;
                // Create the message dialog and set its content
                var messageDialog = new MessageDialog("This application does not collect any of your personal information.");
    
                messageDialog.Commands.Add(new UICommand(
                    "Close",
                    new UICommandInvokedHandler(this.CommandInvokedHandler)));
    
                // Set the command that will be invoked by default
                messageDialog.DefaultCommandIndex = 0;
    
                // Set the command to be invoked when escape is pressed
                messageDialog.CancelCommandIndex = 0;
    
                // Show the message dialog
                messageDialog.ShowAsync();
            }
    
            private void CommandInvokedHandler(IUICommand command)
            {
    
            }
    
            void onCommandsRequested(SettingsPane settingsPane, SettingsPaneCommandsRequestedEventArgs eventArgs)
            {
                UICommandInvokedHandler handler = new UICommandInvokedHandler(onSettingsCommand);
    
                SettingsCommand generalCommand = new SettingsCommand("privacyPolicy", "Privacy Policy", handler);
                eventArgs.Request.ApplicationCommands.Add(generalCommand);
            }

    5. add the following in OnLaunched() function

     protected override async void OnLaunched(LaunchActivatedEventArgs args)
            {
    //...
                SettingsPane.GetForCurrentView().CommandsRequested += onCommandsRequested;
    
    // ...
    }

    hope this works for you...

    • Proposed as answer by BelfastDerek Sunday, September 30, 2012 10:49 AM
    • Unproposed as answer by BelfastDerek Sunday, September 30, 2012 10:49 AM
    Saturday, September 29, 2012 7:23 PM
  • Hi Guys,

    I found this helped in basic adding a link or a flyout - but the comments at bottom describe issues with orientation etc

    regards

    Derek


    Derek Belfast

    Sunday, September 30, 2012 10:51 AM
  • I don't think you should use the MessageDialog class to show a settings pane, the sample actually uses the Popup class and adds an entrance animation to it so it slides in from the window edge. The sample creates an instance of a page with a predefined layout that contains the contents of the settings you need to show, then it sets that page (it could be a user control instead) as the child of the popup and shows the popup when the settingcommand is invoked.

    An alternative I've found to be simpler is to use Callisto's SettingsFlyout class which encapsulates the popup's behavior. You can just create a usercontrol with the content you want for the setting and set the SettingsFlyout's Content property to that usercontrol.

    protected override async void OnLaunched(LaunchActivatedEventArgs args) { RegisterSettingsCommands();

    }

            private static void RegisterSettingsCommands()
            {
                SettingsPane.GetForCurrentView().CommandsRequested +=
                    (s, a) =>
                    {
                        SettingsCommand privacyCmd = new SettingsCommand("privacy", "Privacy policy",
                            x =>
                            {
                                var flyout = new Callisto.Controls.SettingsFlyout();
                                flyout.HeaderBrush = new SolidColorBrush(Colors.Purple);
                                flyout.Background = new SolidColorBrush(Colors.Purple);
                                flyout.HeaderText = "Privacy policy";
                                flyout.FlyoutWidth = Callisto.Controls.SettingsFlyout.SettingsFlyoutWidth.Narrow;
                                flyout.Content = new PrivacyPaneUsercontrol();
                                flyout.IsOpen = true;
                            });
    
                        a.Request.ApplicationCommands.Add(privacyCmd);
                    };
    
            }

    where PrivacyPaneUserControl is a simple usercontrol displaying the privacy policy text.
    You can add a reference to Callisto by doing References -> 'Manage NuGet packages' in your project and installing the Callisto package (thanks Tim Heuer).

    • Edited by ykhammal Sunday, September 30, 2012 4:59 PM
    Sunday, September 30, 2012 12:28 PM
  • Good feedback ykhammal around the 'InternetClient' and 'InternetClientServer' capabilities.  We appreciate the feedback and have recently updated our certification policies, and have specifically made some updates to the privacy related requirement policy 4.1.1.  Also, regarding support there is an avenue to contact us for technical help as well as general questions that can be found on the support tab of the Dev Center


    Please actually reply to everyone attempting to provide information to Microsoft, sir.
    Sunday, September 30, 2012 1:00 PM
  • I got this (and cleaned it up) from a Microsoft staffmember in another thread.

    function onSettingsCommand(settingsCommand) {
    
        Windows.System.Launcher.launchUriAsync(new Windows.Foundation.Uri('http://yoursite.com/privacypolicy.html')).then(
    
           function (succeeded) {
               if (succeeded) {} // URI now in pane
               else           {} // URI launch failed
           }
    
        );
    
    }
    
    
    
    
    
    function onCommandsRequested(eventArgs) {
    
        eventArgs.request.applicationCommands.append(
            new Windows.UI.ApplicationSettings.SettingsCommand("privacyPolicyInBrowser", "Privacy Policy", onSettingsCommand)
        );
    
    }
    
    
    
    
    
    var settingsPane = Windows.UI.ApplicationSettings.SettingsPane.getForCurrentView();
        settingsPane.addEventListener("commandsrequested", onCommandsRequested);

    Be sure to do this before Application.start(); , because start() needs to know about this when it fires.

    • Proposed as answer by SamFet Tuesday, February 26, 2013 10:41 PM
    • Unproposed as answer by Roberts_EModerator Wednesday, May 29, 2013 12:39 AM
    Sunday, September 30, 2012 4:42 PM
  • Hi Mark,

    An IP Address is considered personal information so that is why if you have the capability selected to make a client request, you need the Privacy Statement.

    -Jeff


    Jeff Sanders (MSFT)

    Monday, October 1, 2012 1:24 PM
  • I have recently answered on a similar topic on this matter and they have since successfully managed to get their app certified.
    http://social.msdn.microsoft.com/Forums/en-US/windowsstore/thread/e3f3ca4f-82ba-43cf-a60b-228c43bb4b19/#f82597d2-0cbf-44b5-bfec-d64b1ed840f4

    As for the Settings Pane: http://msdn.microsoft.com/en-us/library/windows/apps/windows.ui.applicationsettings.settingspane.aspx

    ~Daniel~







    • Proposed as answer by D Monteiro Wednesday, December 19, 2012 10:29 PM
    • Edited by D Monteiro Wednesday, December 19, 2012 10:35 PM
    • Marked as answer by Roberts_EModerator Wednesday, May 29, 2013 12:39 AM
    Wednesday, December 19, 2012 10:29 PM
  • SIMPLE, EASY DIRECTIONS FOR VISUAL BASIC -- PRIVACY STATEMENT AND CHARMS

    Hello Everybody, I am an activist for simple, clear, easy, step-by-step directions. Although the answer can be found within this forum by looking for clues like in The Da Vinci Code, I will summarize them so that you do not have to go through the time and stress that I went through. Here it is in simple steps:

    (1) You will put your code in the first page of your app. This will be titled, MainPage, by Visual Studio even though you probably gave it a different name. Go to your first page, open the .xaml.vb file, and look at the top. This page should begin with "Public NotInheritable Class MainPage."

    (2) At the very, very top of this page, copy and paste this code:

    Imports Windows.UI.ApplicationSettings

    Imports Windows.UI.Popups

    (3) TonyGulino (2013) submitted this wonderful VB code to this forum:

    Private Sub AddPrivacyPolicyLinkToSettingsCharm()

    AddHandler SettingsPane.GetForCurrentView.CommandsRequested, Sub(sender, e) e.Request.ApplicationCommands.Add(New SettingsCommand("privacypolicy", "Privacy Policy", Sub() LaunchWebPage(New System.Uri("http://YourOwnWebsite.com/Privacy.html"))))

    End Sub

    Public Async Sub LaunchWebPage(ByVal Uri As System.Uri)

    Await Windows.System.Launcher.LaunchUriAsync(Uri)

    End Sub

    Cut and paste this code as your first and second subroutine within the Public NotInheritable Class MainPage class.

    (4) Your third subroutine should automatically exist and be called, "OnNavigateTo()" Place this subroutine call within the OnNavigateTo() subroutine:

    AddPrivacyPolicyLinkToSettingsCharm()

    (5) Okay, now run your app. Like DerekM92 clearly states, you press the Windows-Key and C at the same time and the charms appear on the right. (The charms are the five icons that appear.) Click the bottom charm labeled, "Settings." If you inserted the code correctly, there is now a Privacy Statement. Click it to see that it works.

    (6) If you are happy with the result, please give me a vote and post a nice message. Don't forget to share the love with TonyGulino and DerekM92. And, hey, check out my new app, CrinkleSpot, in the Windows Store under games. - David

    Wednesday, August 7, 2013 3:09 AM