10 January 2012

Мой опыт разработки и продвижения. Игра «Балда»

Game developmentDevelopment for Android
From Sandbox
Несколько дней назад состоялся очередной релиз моей реализации игры «Балда» под Android. Для меня это небольшая success story, потому что это мой первый проект, разработку которого я смог довести до конца и предоставить пользователям в Android Market. В этом посте мне хотелось бы рассказать о разработке приложения, его продвижении к вершине. Конкретные цифры и графики — под катом.

О приложении


Сама идея написать именно эту игру под Android появилась у меня чуть ли не 2 года назад, с моего знакомства с Android SDK и началом разработки под него. Эта игра в слова мне нравилась, но вот существующие реализации — нет.
Из-за лени и прочих форс-мажоров я откладывал это дело до осени этого года. Первая версия игры вышла в середине октября, и, как ни странно, была довольно-таки тепло встречена немногочисленными пользователями. Спустя три месяца проект все еще жив, на теперешний момент находится на 31-ом месте в топе своей категории в русском маркете и имеет более 10 тысяч активных установок.

Создание приложения


Анализ

Само собой такие игры под Android уже были в маркете, и поэтому начал я с анализа приложений-конкурентов.
В маркете на тот момент их нашлось аж три:
  • «Балда» от Дмитрия Чистякова — пожалуй, лучшая из всех на тот момент;
  • «Балда» от Wind Apps;
  • «Смешарики. Балда» от Marmelad Media.

Первая была самой популярной, судя по количеству установок, но, похоже, заброшенной — последнее обновление было в июле 2010 года.
Существовала и существует еще одна версия, распространяемая только под смартфоны LG — Word Game Balda, поэтому в маркете конкуренции не представляет.
Так как такие игры уже были, и не одна, то решение было очевидным — нужно сделать лучше, чем у других.

Разработка


Мозг

Разработку игры я начал с реализации «мозга» — алгоритма поиска слов. Для поиска слов использовался метод ветвей и границ — прибавляя букву за буквой алгоритм проверял, есть ли в словаре слова, которые начинаются с такой подстроки.
Написав полный перебор и оттестировав его на десктопной машине я перенес этот код в Android приложение. И сразу же был неприятно удивлен тем, что поиск слова, который занимал 100 миллисекунд на Core 2 Duo с частотой в 2.3 ГГц стал занимать десятки секунд на ARM5 с частотой в 600 МГц(на тестовом HTC Wildfire).
Очевидно, что бутылочным горлышком была проверка наличия слова в словаре, которое начинается с определенной подстроки, что и подтвердил профайлер.
Чтобы не искать такие вхождения я стал хранить слова в виде хитрой мапы, где ключом было начало слова, а значением — список из всевозможных его окончаний. Поиск стал работать гораздо быстрее, но инициализация такой структуры стала занимать существенное время — загрузка приложения занимала около 40 секунд. Поэтому было решено переписать все это дело с использованием NDK. К сожалению, точных цифр привести не могу, т.к. первоначальной версии не сохранилось и алгоритм претерпел множество других изменений и оптимизаций, но реализация на C на том же HTC Wildfire инициализирует словарь меньше, чем за 5 секунд и находит слово в течение ~50 мс.
Эти цифры были лучше, чем у других реализаций в маркете и такие же, как у Word Game Balda, т.к. они так так же использовали нативную реализацию алгоритма поиска.
Ну и конечно же у игры была киллер-фича — это настраиваемый размер игрового поля, от 4 от 7 клеток, чего не было у конкурентов.

Интерфейс

Изначально интерфейс разрабатывался мной же, поэтому выглядел очень просто. Почему-то я решил сделать игру как бы нарисованную на тетрадном листке в клетку, поэтому совершенно необходимым мне показалось добавить анимацию перехода между экранами в виде перелистывания страницы.
В результате поисков я нашел две рабочих open source реализации — одна была честным перелистыванием на OpenGL от человека с ником harism, а вторая скорее симулировала перелистывание, рисуя на канвасе движущийся белый многоугольник с тенью. С OpenGL я не дружу, поэтому решил выбрать второй вариант(особенно если учесть, что пользователь вряд ли заметит разницу между ними за 0.5 секунды).
С этого момента началась одна неприятная вещь — т.к. для такой анимации нужно фактически знать как будет выглядеть следующая страница, то пришлось отказаться от разных Activity для разных экранов.
Все экраны лежат в одном FrameLayout вместе с компонентом, который рисует анимацию перелистывания.
При перелистывании происходит следующее:
// pageCurlView - компонент, рисующий анимацию перелистывания
pageCurlView.bringToFront();
pageCurlView.setVisibility(View.VISIBLE);

// получаем битмапку текущей странички		
current.buildDrawingCache();
Bitmap page1 = current.getDrawingCache();

// получаем битмапку странички, на которую хотим перейти
next.buildDrawingCache();
Bitmap page2 = next.getDrawingCache();

// отдаем их компоненту для отрисовки		
pageCurlView.animate(page2, page1, direction);

Другого выхода я не нашел — для Activity такие хитрые анимации прикрутить нельзя.
Первоначально получившийся вариант выглядел так:



В таком виде приложение просуществовало около 2-ух месяцев. Особых нареканий дизайн у пользователей не вызывал, но мне хотелось чего-то поярче. Я решил, что в общем-то сам смогу нарисовать пару экранов и взялся за дело. Вышло как-то так:



Это буйство красок очень не понравилось пользователям, поэтому я решил наконец найти человека, который сделал бы что-то поприличнее. Разместив объявления на нескольких фрилансерских сайтах я в течение нескольких недель подбирал дизайнера. Как оказалось большинство дизайнеров разрабатывают дизайн для сайтов — с мобильными платформами работали единицы, и, как правило, только с iOS. Хотят они за несколько экранов солидные суммы, от 500$ и выше. Про nine-patch никто не слышал в помине, а то что я хочу в результате увидеть нарезку из png файлов, а не просто psd-файл удивляло практически всех. Поэтому я решил выбрать просто того, кто просил наименьшую сумму — 200$. Это были первые и единственные деньги, потраченные на разработку(если не считать регистрацию в маркете — 15$). После работы дизайнера изменилось немногое, но игра стала выглядеть лучше(и главное — появился клевый сплеш-скрин):



Реклама, статистика, ошибки

Монетизировать приложение я решил через рекламу. В качестве поставщика рекламы я выбрал AdMob. Встроить AdMob SDK очень просто, никаких сложностей я не заметил.
Для сбора ошибок я использовал BugSence. Подключается он очень быстро и просто, и я считаю что это просто незаменимая штука — из более чем сотни ошибок только о 7 штуках сознательные пользователи отправили отчет в Android Market.
Для сбора статистики об использовании я использовал Flurry — не могу сказать, что мне это принесло хоть какую-то пользу, но зато смотреть на их красивые цветные графики очень интересно.
Так же полезным при проведении рекламных компаний может оказаться отслеживание реферальных ссылок. Для этого нужно зарегистрировать простой BroadcastReceiver и сохранять в нем полученную ссылку:

AndroidManifest.xml
        <receiver
            android:name=".ReferrerReceiver"
            android:exported="true" >
            <intent-filter>
                <action android:name="com.android.vending.INSTALL_REFERRER" />
            </intent-filter>
        </receiver>


ReferrerReceiver.java
public class ReferrerReceiver extends BroadcastReceiver {
	private final static String TAG = ReferrerReceiver.class.getSimpleName();
	private final static String REFERRER = "referrer";
	
	@Override
	public void onReceive(Context context, Intent intent) {
		Bundle extras = intent.getExtras();
		String referrerString = extras.getString(REFERRER);
		Settings.getInstance(context).setInstallReferrer(referrerString);
		Log.d(TAG, "Referrer is: " + referrerString);
	}

}


После этого при старте приложения я просто логировал соответствующее событие в Flurry. Это впоследствии помогло узнать сколько установок я получил после рекламной кампании.

Продвижение


Так как игра у меня получилась бесплатная, то помимо маркета я разместил apk-файл на нескольких форумах. Какие-то признаки жизни ветка игры подает только на 4pda. Благодаря отзывам и советам пользователей с 4pda игра приобрела несколько фич и в ней было исправлено несколько серьезных багов. В целом отзывы на форуме были куда содержательнее и полезнее, чем отзывы на маркете. После публикации игры стали появляться ее обзоры на разных блогах и сайтах, что дало определенный приток пользователей.
В самом начале со мной связались представители Ubi Nuri с просьбой адаптировать игру для их суровых корейских реалий, но я решил с ними не связываться, потому что 97% пользователей у приложения — русскоязычные, и вряд ли такая игра будет популярна в Корее.

Самым важным моментом в продвижении приложения мне кажется было добавление диалога при выходе с просьбой проголосовать за игру в маркете. После публикации версии с этим диалогом посыпались пятерки, рейтинг пошел вверх и приложение начало подниматься в топе категории. Сейчас у приложения 207 оценок и средний рейтинг 4.8, что очень даже неплохо.

Заработанные деньги в AdMob можно тратить там же — за 100$ можно купить рекламы на 120$. Я проводил две небольшие рекламные кампании по 120$ 28.12.2011 и 04.01.2012. Вот график рейтинга приложения в топе категории, две красные точки — это рекламные кампании:

После рекламы приложение начинает подниматься в общем рейтинге.

Несмотря на обещание AdMob'а тратить деньги, выделенные на рекламу, равномерно в течение дня они расходуются в течение 2-3 часов.

За 240$ я получил 4800 кликов и 469 установок. Таким образом получилось, что одна установка стоит около 50 центов. За эти же 50 центов можно купить гарантированные установки у Flurry, но минимальная сумма, с которой работает Flurry — 400$.

Сразу после обновления и последней кампании резко увеличилось количество пользователей. На этом графике общее количество сессий(красные точки — рекламные кампании):


Лучше всего эффект от рекламы заметен на графике новых пользователей:


После последнего обновления и рекламы увеличился доход в AdMob — с 15-20$ в сутки до 40-50$(график за последние 30 дней):


Всего с 12 октября 2011 года на реклама AdMob приложение заработало 1095$(из них 700$ — за последние 30 дней), из которых 200$ было потрачено на рекламу.

Что дальше?


На сегодняшний день количество пользователей растет, реклама приносит кое-какой доход и я надеюсь, что у игры светлое будущее. Прочитав на хабре давнюю историю о продаже прав на издательство инди-игры Ubi Nuri я тоже решил двигаться в этом направлении. Поскольку игра популярна только в русском маркете я выбрал несколько ведущих российских разработчиков и издателей мобильных игр(Alawar, Game Insight, Herocraft и Joybits) и отправил им письма счастья. К сожалению, никакого ответа ни от кого из них я не получил, видимо письма пропустили или просто проигнорировали.

Несмотря на интересный разносторонний опыт и довольных пользователей больше заниматься разработкой игр я не хочу. Мне показалось, что заработать возможно только на массовых приложениях — топ маркета завален говорящими зверушками от Outfit7 и клонами «Веселых фермеров», а такие игры мне совсем не интересны.

Видео:


UPDATE

Приведу небольшую наглядную иллюстрацию хабраэффекта.

Статистика по новым пользователям из Flurry(красная точка — публикация статьи):


Статистика из Admob(красная точка — публикация статьи):


За 4 дня с момента публикации количество оценок в маркете выросло с 209 до 371 и приложение поднялось до 28-го места в топе категории.
И еще одна цифра, которая показалась мне интересной — на текущий момент пользователи провели в приложении суммарно 7 лет и 2 месяца.
Tags:androidразработкаиграбалда
Hubs: Game development Development for Android
+75
17.5k 264
Comments 49
Ads