Я не думаю, что мне нужно подробно останавливаться на том, как важно получать оценки для вашего приложения в Магазине — и, желательно, хорошие оценки. Это ни в коем случае не ново и оригинально: Маттис Хоекстра что-то написал для этого , наш голландский DPE Райен Кишна даже сделал пакет NuGet для подобных вещей , у Telerik есть что-то в их великолепных Radcontrols для Windows Phone, и все же я, будучи упрямым, должен сделать что-то свое Причина этого проста: я хотел (конечно) сделать поведение, чтобы вы могли добавить его в свое приложение без какого-либо кода вообще — просто перетащите его поверх первой страницы, и оно будет работать из коробки. И Blend предоставит вам некоторые свойства, которые вы можете установить — или нет. Он отлично работает из коробки. Как и в моем последнем приложении для Windows Phone, 2 Phone Pong .
Если вы уроните поведение в верхней части стартовой страницы, оно будет работать без изменений. Но Blend предоставляет четыре свойства для настройки режима работы:
- Подпись — это текст в верхней части окна сообщения, который будет отображаться, когда приложение напоминает пользователю. По умолчанию установлено «Обзор приложения». Вы можете установить другое значение в XAML или (лучше) связать его со свойством модели представления, содержащим глобализированный текст.
- MaxReminders — это количество раз, которое поведение будет запрашивать у пользователя. Если пользователь отказывается просматривать больше времени, чем MaxReminders, он больше не будет беспокоиться.
- Сообщение показывает фактическое сообщение напоминания. Значения по умолчанию: «Вы уже использовали это приложение несколько раз, хотели бы вы просмотреть его в магазине?»
- RemindFrequency — количество запусков приложения, после которого отображается запрос на просмотр.
Таким образом, с настройками по умолчанию приложение спросит вас 7- й , 14- й и 21- й раз, хотите ли вы просмотреть приложение. После третьего увольнения вас больше не будут спрашивать. Это сделано для того, чтобы пользователи не раздражались от бесконечных запросов на рецензирование и не давали отрицательных отзывов из-за этого. И, конечно, он перестанет спрашивать пользователя, когда он решил оставить отзыв.
Само поведение построено поверх моей библиотеки wp7nl на codeplex (конечно) и реализовано как SafeBehavior . Сначала я создал простой класс данных для хранения данных в локальном хранилище:
namespace Wp7nl.Behaviors { /// <summary> /// Simple data class to store data in used by RemindReviewBehavior /// </summary> public class RemindData { public int Starts { get; set; } public bool Reviewed { get; set; } public bool Refused { get; set; } } }
Само поведение также довольно простое — оно содержит четыре свойства зависимости с теми же именами, что и в Blend, — не случайно — перед текстовыми полями на изображении в верхней части этого поста.
Само поведение начинается достаточно просто, будучи стандартным SafeBehavior:
namespace Wp7nl.Behaviors { /// <summary> /// A behavior to remind the user to review the app after a couple /// times using it /// </summary> public class RemindReviewBehavior: SafeBehavior<Page> { protected override void OnSetup() { CheckRemind(); } }
Вся функциональность в методе CheckRemind:
private void CheckRemind() { var helper = new IsolatedStorageHelper<RemindData>(); var remindData = helper.ExistsInStorage() ? helper.RetrieveFromStorage() : new RemindData(); if (!remindData.Reviewed && !remindData.Refused) { remindData.Starts++; if (remindData.Starts % RemindFrequency == 0) { var result = MessageBox.Show(Message, Caption, MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) { Review(); remindData.Reviewed = true; } else { if (remindData.Starts >= MaxReminders * RemindFrequency) { remindData.Refused = true; } } } helper.SaveToStorage(remindData); } }
Используя IsolatedStorageHelper из wp7nl, он проверяет, есть ли уже данные из предыдущего запуска в локальном хранилище — если нет, он создается. Если Отзыв или Отказ верны, никаких действий не требуется. После этого число или количество пусков увеличивается, и он проверяет, можно ли разделить количество пусков на RemindFrequency. Если это так, сообщение отображается,
Если пользователь затем решает просмотреть приложение, вызывается метод Review, а для свойства Reviewed устанавливается значение true, поэтому пользователь больше не будет беспокоиться. Если пользователь не хочет выполнять рецензирование, приложение проверяет, было ли уже выставлено максимальное количество запросов на рецензирование, и если да, то для свойства «Отклонено» установлено значение true. Пользователь (также) больше не беспокоится. И в конце, remindData сохраняется, поэтому все, что произошло в методе, сохраняется для потомков.
Метод обзора довольно прост:
private void Review() { var marketplaceReviewTask = new MarketplaceReviewTask(); try { marketplaceReviewTask.Show(); } catch (InvalidOperationException ex) { } }
Единственным недостатком является то, что пользователь может нажать кнопку «ОК», перейти в магазин и нажать «Отмена». Обмана нет, но если кто-то не хочет давать обзор, что угодно — по крайней мере, он / она тоже не даст плохой обзор.
Четыре свойства зависимости я опущу для краткости.
Я поместил код в следующую версию библиотеки wp7nl, но сейчас вы можете получить его из демонстрационного решения. Я изменил MaxReminders на 20 и RemindFrequency на 2, поэтому демо-приложение будет просить вас каждый раз оценивать его, 20 раз. Эту настройку я бы точно не рекомендовал в дикой природе, но она показывает суть.
Теперь Matthijs, Rajen, я и несколько других показали вам несколько способов сделать это. Мой даже не требует от вас кода — просто перетащите. Теперь убедитесь, что вы реализуете любое из этих решений. Если вы играете в Windows Phone ради веселья, славы, денег или всего вышеперечисленного — вы хотите, чтобы эти приложения были загружены. И рейтинги имеют решающее значение для этого.