środa, 31 października 2012

Skuteczne zdobywanie ocen w Windows Phone

Z moich obserwacji wynika, że liczba ocen odgrywa pewną rolę w algorytmie, z którego korzysta Windows Store podczas wyświetlania listy aplikacji z danej kategorii. Oczywiście im więcej pozytywnych tym lepiej. Osobiście sceptycznie patrzę na aplikacje, które nie mają ani jednej oceny, nawet takiej średniej. Wydaje się wówczas, że z aplikacji nikt nie korzysta, że jest "martwa". Co więcej, z komentarzy od użytkowników możemy dowiedzieć się czego im brakuje w aplikacji, co by zmienili itp. - to bardzo cenne źródło informacji, jeśli chcesz ulepszać swoje oprogramowanie.

Jak to osiągnąć?

Moje doświadczenie pokazuje, że jeśli użytkownikom przypomina się o czymś, odsetek że to zrobią jest znacznie wyższy. Sposobem na zachęcenie do wystawiania ocen może być zwyczajne okienko dialogowe "Oceń aplikację", które pojawi się po starcie aplikacji:

Częstotliwość

Kiedy i jak często powinno się pojawiać? To należy samemu ocenić na podstawie rodzaju aplikacji i szacowanej częstotliwości użycia. W przypadku aplikacji, z której ludzie powinni korzystać codziennie, pokazanie komunikatu za siódmym uruchomieniem dało u mnie rewelacyjne wyniki (o tym poniżej). Ten sam wskaźnik w mojej nowej liście zakupów nie dał praktycznie żadnych rezultatów w ciągu 2 tygodni od publikacji, pomimo że aplikacja bije na głowę pod względem ilości pobrań moje pozostałe appki na Windows Phone. Przede wszystkim dajmy możliwość oceny ludziom, którzy powracają do programu i aktywnie z niego korzystają. Wyświetlanie komunikatu przy pierwszym albo drugim uruchomieniu zdecydowanie mija się z celem i możemy dostać mało feedbacku, albo oceny będą "na odwal się"...

Jeśli jako licznik wybierzemy ilość dni, to ważne jest, aby nie wyświetlać komunikatu zbyt często (preferowane raz na kilka/kilkanaście dni) i nie zirytować tym użytkownika. Nie chcemy przecież, aby publicznie wylewał swoje żale w Windows Store. Nie wyświetlajmy go również wtedy, gdy wyświetliliśmy użytkownikowi stronę oceny aplikacji (a konkretnie wywołaliśmy MarketplaceReviewTask) i jest prawdopodobne, że ocenił on już aplikację. 100-procentowej pewności nie będziemy mieli, ale nie ma nic bardziej irytującego jak kolejna prośba o kolejną ocenę. Niestety widziałem takie gry, które nawet co drugie przejście poziomu prosiły o ocenę.

Case Study

Ewangelia Na Dziś to aplikacja, która pobiera i wyświetla fragment Ewangelii na każdy dzień roku - generalnie powinno się z niej korzystać codziennie. Pierwsze dwie wersje programu nie miały żadnego mechanizmu oceniającego i liczba ocen rosła bardzo powoli, rzędu 2-4 na miesiąc. Po aktualizacji i dodaniu "niewinnego" komunikatu pod koniec września 2012 r. liczba nowych ocen wzrosła do 1-3 dziennie, a w rekordowe dni było ich nawet pięć! W zaledwie 40 dni aplikacja zdobyła 77 ocen i ma ich więcej niż Ceneo czy Listonic! Na wykresie wygląda to tak:

Trochę kodu...

Nie będę tu się rozpisywał jak wyświetlić MessageBox, bo to już na pewno wiecie :), ale zwrócę uwagę na kilka istotnych rzeczy:
  • musimy zapisywać informację o ilości uruchomień w naszym modelu, np. we właściwości "StartCount"
  • zdefiniujmy stałą, zawierającą informację po ilu uruchomieniach wyświetlić komunikat
  • po wyświetleniu komunikatu, zwiększmy "StartCount" o 1, żeby MessageBox-a przypadkiem nie wyświetlić ponownie następnym razem -> irytacja użytkownika
  • jeśli użytkownik odpowie "nie", to możemy zresetować licznik "StartCount" do zera lub mniej i zacząć zliczać liczbę uruchomień od nowa
  • kod wyświetlający komunikat możemy umieścić w OnNavigatedTo lub w handlerze zdarzenia Loaded strony startowej aplikacji, czyli w większości przypadków będzie to MainPage.xaml
  • jeśli pokazujemy komunikat w OnNavigatedTo, to koniecznie wywołajmy te funkcję w osobnym wątku. W przeciwnym razie aplikacja sama zamknie się po 20 sekundach, jeśli MessageBox nie zostanie szybko zamknięty (zgodnie z wytycznymi Performance Considerations in Applications), ponieważ będzie blokował inicjalizację programu.
Kod mógłby wyglądać następująco (pamiętajmy o wywołaniu go w osobnym wątku):
if (App.ViewModel.StartCount == Constants.START_RATE_LIMIT)
{
   this.Dispatcher.InvokeIfRequired(() =>
        {
        if (MessageBox.Show(AppResources.RateAppMessage, AppResources.RateAppTitle, System.Windows.MessageBoxButton.OKCancel) == MessageBoxResult.OK)
        {
                App.ViewModel.StartCount = Constants.START_RATE_LIMIT + 1;
                MarketplaceReviewTask reviewTask = new MarketplaceReviewTask();
                reviewTask.Show();
        }
        else
        {
                App.ViewModel.StartCount = -25;
        }
   });
}

Alternatywa

Podobną funkcjonalność można również osiągnąć przy pomocy kontrolki RateAppReminder firmy Telerik. Należy jednak pamiętać, że ich kontrolki nierzadko zawierają błędy i może więcej czasu zejdzie nam na zaprzęgnięcie jej do poprawnego działania, niż napisanie czegoś własnego wg powyższego przykładu.

Brak komentarzy: