Лучшие статьи и кейсы стартапов
Включить уведомления
Дадим сигнал, когда появится
что-то суперстоящее.
Спасибо, не надо
Вопросы Проекты Вакансии
Онлайн-сервис для создания системы достижений
Рекомендуем
Продвинуть свой проект
Лучшие проекты за неделю
45
Битрикс24

Битрикс24

www.bitrix24.ru

15
GIFTD

GIFTD

giftd.tech

13
Aword

Aword

Приложение для изучения английских слов

12
Логомашина

Логомашина

logomachine.ru

12
Convead

Convead

convead.ru

11
Devicerra

Devicerra

devicerra.com

11
Eczo.bike

Eczo.bike

www.eczo.bike

11
Flowlu

Flowlu

flowlu.ru

10
Отследить-посылку

Отследить-посылку

отследить-посылку.рф

10
KEPLER LEADS

KEPLER LEADS

keplerleads.com

Показать следующие
Рейтинг проектов
Подписывайтесь на Спарк во ВКонтакте

Конструктор системы достижений - сервис для разработчиков

539 7 В избранное Сохранено
Авторизуйтесь
Вход с паролем
Всем привет, в этом посте я хочу рассказать, как мы разработали серсис достижений. Что такое "достижения" или "achievements", для чего они используются в приложениях, думаю, рассказывать не надо, перейду прямо к рассказу о сервисе.

Откуда взялась идея

Началось все с того, что нам потребовалось добавить в своё приложение механику получения достижений. Приложение разрабатывалось только одним человеком в свободное время, задач по разработке, как это обычно бывает, было много. Отвлекаться на добавление достижений не хотелось по двум причинам: нехватка времени из-за более приоритетных задач и непонимание насколько достижения будут востребованы пользователями. Последнее сомнение было по той причине, что приложение не было игрой, где обычно все привыкли видеть достижения, а "серьёзным" приложением для ведения семейного бюджета. Также не хотелось уделять поддержке механики слишком много времени после ее внедрения и заставлять пользователей обновлять приложение каждый раз, когда в условиях получения достижения что-то изменится или добавится новое достижение.

Поиски готовых решений

Мысли потекли в сторону вынесения логики достижений из приложения в какой-то отдельный модуль или сервис. После недолгого раздумья захотелось посмотреть какие существуют готовые решения в качестве сервиса. В результате поисков получился такой список (возможно поиск был не идеальным и буду рад получить инфу о других похожих сервисах):

  1. Google Achievements Может быть использовано для приложения, даже если оно не опубликовано в Google Play.Что смутило:а) Заточка достижений под игры, даже при заведении приложения просят указать "название игры" и "категорию игры". Если финансовое приложение называть игрой, то категория подойдет разве что "приключения"б) По принципу использования достижений не понравился тот момент, что необходим везде оперировать ID достижения, что не всегда удобно.в) При первой регистрации в Google Play и оплате developer account, возникла непонятная проблема с проведением платежа, которую служба поддержки решала в течение нескольких дней, что также сыграло свою роль для продолжения поисков
  2. Apple Achievements Невозможность использовать на других платформах отличных от iOS SDK. Этот момент был важен, т.к. я планировал выпустить веб-интерфейс к своему приложению, и тогда потребовалось бы дублировать логику достижений вручную.
  3. Steam achievements Доступно для игр, которые публикуются в сервисе Steam.
  4. Sony trophies Доступно для игр, которые публикуются в Sony Playstation Store
  5. Hydra Сервис заинтересовал описанием имеющейся функциональности, но на текущий момент находится в закрытой бете и посмотреть его не удалось.
  6. App 24 Сервис подошел по описанию, но достижения не были его основной функциональностью. Также предоставлялись другие ненужные нам сервисы, интерфейс довольно перегружен.

Также хотелось получить какую-нибудь статистику по использованию приложения именно в тех точках, на который предполагалось поставить выдачу достижений. Это важный момент при внедрении системы достижений.

Не хотим делать сами, хотим сервис

Как вы уже, наверное, догадались, желание внедрить механику достижений в свой проект объединилось с желанием любого нормального разработчика - сделать свой сервис. Были сформулированы основные требования:

  1. Не зависящий от платформы. Не важно на чем вы разрабатываете - достижения подключаются одинаково. вам нужно лишь использовать готовый SDK или же работать напрямую через REST API;
  2. Не зависит от типа приложения. Не важно что вы создаете, игру или какое-то другое приложение, в котором достижения помогут организовать геймификацию процесса;
  3. Приложение должно подключаться быстро, без необходимости перечитывать длинные страницы документации;
  4. Простой в использовании. Добавление новых достижений должно происходить как можно проще и код приложения должен быть как можно менее зависим от сервиса.

Прототип за 2 месяца

За два месяца свободного времени нам удалось собрать рабочий сервис и демонстрационный сайт с несколькими фичами.

  1. Создание проектов и доступных в нём достижений;
  2. Отслеживание событий, происходящих в приложении и определении момента, когда надо выдать достижение. Вся логика находится в сервисе и определяется простым условием. Приложению достаточно лишь передать обновленное значение переменной в сервис. Пример с картинками находится ниже;
  3. Выдача бонусных баллов при получении достижения. Приложение самостоятельно решает что делать с полученными бонусами. Сервис только знает сколько и каких бонусов выдать если случилось конкретное достижение;
  4. Режим песочницы. Данная функциональность напрашивается сама собой, очень удобно сначала протестировать насколько сложным окажется достижение, изменяя условия его получения и уже потом опубликовать проект. После публикации изменении условий достижения невозможно.

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

Как устроен сервис

Теперь несколько слов о том, как мы построили сервис. Чтобы не раздувать обзорную статью, я не буду подробно рассматривать почему и как мы выбрали платформу для сервиса. Если коротко, то в качестве платформы мы взяли облачный сервис Microsoft Azure, запросы получаем по REST протоколу, данные о достижениях всех клиентов хранятся в Table Storage.

Для каждого достижения необходимо задать условие его получения. Мы построили сервис так, что условие можно задать в виде формулы, например, scores >= 150. Scores это то, что присылает приложение POST запросом. В запросе также приходит уникальный ключ клиента (пользователя приложения). При получении запроса от приложения мы проверяем значение у переменной scores для данного клиента, и если оно больше значения указанного в условии какого-либо достижения (одном или нескольких), то сервис вернёт ответ о полученном достижении. Можно задавать и более сложные условия, такие как:

level5_kills = 25 and level = 5 and (health >= 90 and health <= 100)

В этом случае достижение откроется, как только будут выполнены все условия в формуле. Сами значения можно присылать пачкой в одном запросе, а можно присылать по одному. В любом случае проверяются и присланные ранее значения переменных.

Для обеспечения безопасности передачи данных и предотвращения возможной фальсификации данных мы работаем над внедрением HMAC аутентификации.

Как это выглядит

При входе в систему будет список "проектов". Для каждого приложения подключаемого к сервису необходимо создать свой проект.

b_55b0c1dbb4113.jpg

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

b_55b0c1e3bed86.jpg

А вот как выглядит одно достижение в режиме редактирования.

b_55b0c1e9436e2.jpg

На демонстрационной странице можно посмотреть, как это работает на демонстрационном проекте. Для этого мы взяли игру "Змейка" на JavaScript и подключили её к сервису.

Заключение

Несмотря на наличие готовых решений, особенно от таких гигантов как Apple и Google, мы считаем, что данный сервис имеет право на жизнь за счет более простого использования, меньшей связки бизнес-логики достижений с вашим приложением, а также расширенных возможностей самих достижений.

После этого короткого этапа разработки набрался список "хотелок", которые мы хотели бы видеть в сервисе. Уверены, что нам найдется что предложить другим командам, которые, так же, как и мы, не хотят тратить своё бесценное время на вспомогательную механику и сосредоточиться на разработке основной функциональности своего приложения.

Прежде чем продолжать разработку хочется получить обратную связь и понять, что может быть востребовано еще, возможно мы что-то не учли в своей работе. Мы открыты для запросов на добавление фич, если это не идет вразрез с основной идеологией сервиса. Если сервис вас заинтересовал, но вы не нашли в описании необходимой функциональности, то будем рады услышать об этом в комментариях к статье или в сообщении на форме обратной связи.

Спасибо за внимание! Будем благодарны любой обратной связи, вопросам и комментариям.

0
Первые Новые Популярные
Perecel
автоматический отбор целевой аудитории (реклама в соц сетях)
Дмитрий Кубитский
тема прикольная конечно с достижениями, но не понятно как замотивировать пользователей, чтоб они пользовались системами мотиваций)
Ответить
Показать предыдущие комментарии
Perecel
автоматический отбор целевой аудитории (реклама в соц сетях)
Дмитрий Кубитский
заработать 10 тысяч очков чтоб обменять их на 5 кристалов, чтоб обменять их на игровые элементы...

вы правда думаете что у людей есть мотивация получить ваши очки, чтоб потом их обменять на кристалы, чтоб потом их обменять...
люди в целом очень линивые, нужно что-то серьёзнее чем кристалы, чтоб их замативировать...
Ответить
Badge Keeper
Онлайн-сервис для создания системы достижений
Alexander
Дмитрий - это уже геймификация.
Каждый разработчик сам должен продумать каким образом он будет мотивировать своих клиентов оставаться в своем приложении. А мы предоставляем удобное для этого средство.
Ответить
Виктор Рассоха
В играх это сплошь и рядом – собирание очков, ключей, кристаллов, набивание ачивок, получение бейджей... Это работает. :)
Ответить
Perecel
автоматический отбор целевой аудитории (реклама в соц сетях)
Дмитрий Кубитский
к сожалению ачивки не за мотивируют никого, сами по себе.
Я понимаю инногда так легко перепутать причину и следствие, указав обратную связь.
На я вас уверяю люди играют не из-за ачивок, они играют в то во что им интересно, а ачивки, кристалы и бейджики -> как приятное дополнение.
не стоит делать ложных выводов по этому поводу.
Ответить
Виктор Рассоха
Не буду сильно спорить, скажу лишь что сейчас во многих играх валюта (кристаллы) так тесно вплетена в дерево развития, что без них игра существенно теряет.
Ответить
Выбрать файл
Читайте далее
Загружаем…
Блог проекта
Расскажите историю о создании или развитии проекта, поиске команды, проблемах и решениях
Написать
Личный блог
Продвигайте свои услуги или личный бренд через интересные кейсы и статьи
Написать