Implementing a Review Reminder in a Windows Store C# XAML App

October 23, 2013

If, like me, you aren’t getting very many reviews for your Windows Store Apps, you might want to give people a nudge. Be careful with this approach, as there’s nothing more irritating than a constantly nagging textbox whining about reviewing an app. Don’t be surprised (or blame me) if you get a review saying: Stop nagging about reviews. But done correctly (in-frequently) you might just persuade a few extra people to review your app.

The process is relatively straightforward; you first need to store two additional roaming setting; mine look like this:

var reviewed = roamingSettings.Values["ReviewedProduct" ];
var lastReminder = roamingSettings.Values["LastReminder" ];

I’m not sure these need any explanation (but I’ll provide one): one to determine whether the product has ever been reviewed and one to say when.

Next, and it’s entirely your choice when but, you need to prompt the user. Having said that, at the start or end of using the app seems a sensible choice; whereas suspending the app mid way and interrupting the user, does not. I do this on load at the same time as reading the other roaming settings:

         protected override void Initialize()
                // Get settings first

My CheckAppReview function looks like this:

            var reviewed = roamingSettings.Values[ "ReviewedProduct"];

            if (reviewed == null || !Boolean.Parse(reviewed.ToString()))
                var lastReminder = roamingSettings.Values[ "LastReminder"];

                if (lastReminder == null || DateTime.Now > DateTime.Parse(lastReminder.ToString()).AddDays(5))
                    MessageBoxHelper.MsgBox.ChangeButtonText("Cancel" , "Never ask again");
                    var result = await MessageBoxHelper.MsgBox.ShowAsync("Please would you consider reviewing this application?", "Review Reminder",
                                            MessageBoxButton.YesNo | MessageBoxButton.Cancel);
                    if (result == MessageBoxResult.Yes)
                        await Helpers. Product.Review();
                        roamingSettings.Values[ "ReviewedProduct"] = true ;
                    else if (result == MessageBoxResult.No)
                        roamingSettings.Values[ "LastReminder"] = DateTime.Now.ToString();
                    else if (result == MessageBoxResult.Cancel)
                        roamingSettings.Values[ "ReviewedProduct"] = true ;

The MessageBoxHelper class is the subject of another post, which can be found here.

Obviously this does have its own problems; not the least of which is that it’s pretty difficult to unit test because it uses roamingSettings directly. At some point in the future, I may supplement this with a post on the abstraction of this, but if I don’t, then you definitely should (abstract it that is, not write a blog post - although if you do the latter then send me a link and I’ll amend this post to include it!).

Other problems with it are that the 5 day interval is hard coded and it doesn’t account for the user migrating across a time zone (or even changes their culture) with their profile. So, if any of this matters then be sure not to copy and paste the code verbatim!


You might find this approach to be counter productive. People tend not to want to give reviews, because it means spending time doing something that has nothing to do with the functionality of your app or game. If you’re feeling brave (and I have no idea if this is compliant with the Windows Store Police) you could have certain features that are enabled only after the user agrees to review your app. You could implement that by simply checking the roaming setting:

roamingSettings.Values[ "ReviewedProduct"]

With something like a game, you could give extra credits, or if your app uses any paid features then you could offer to provide them for a limited time period or something.

I imagine this will force people to either review your app or just uninstall it!

Also, keep in mind that once the user agrees to review your app, there’s no way to tell if they’ve actually done so using this approach; nor is there any way to detect they’ve done so via another method.

Profile picture

A blog about one man's journey through code… and some pictures of the Peak District

© Paul Michaels 2024