Современные облачные сервисы предлагают хакерам потенциально неограниченные ресурсы. Так, Амазон активно используется для взлома WРА-брутфорсом — немецкий эксперт Томас Рот еще в 2011-м перебирал полмиллиона паролей в секунду, оплачивая каждую минуту всего 28 центами. Сегодня скорость перебора за ту же цену наверняка достигла не одного миллиона вариантов. И даже Wikileaks перенесла свои документы в амазоновские службы, научившиеся достаточно успешно справляться с DDоS-атаками.
МОБИЛЬНЫЙ БЕКЕНД — ПРОСТО И БЕСПЛАТНО
На базе «низкоуровневых» облачных систем (голые виртуальные серверы или виртуальные файловые хранилища) сегодня активно надстраиваются бэкенды, ориентированные на конкретные нужды прикладных разработчиков. Так называемые backend as а service (BaaS) пользуются особенно активным спросом у мобильных программистов, в связи с чем сегодня фактически стираются различия между BaaS и Mobile BaaS (MBaaS). МВааS-услуги очень популярны у разработчиков онлайновых игр и в стартаповских проектах, так как экономят огромное количество ресурсов и времени на развертывание и сопровождение серверной инфраструктуры. Подключить к клиентской части облачное хранилище, учетные службы ведения пользователей, социальные сервисы и множество других фич и запустить действующий прототип в эксплуатацию сегодня можно буквально за несколько часов, причем бесплатно.
Чтобы познакомить тебя с базовыми принципами стыковки с MBaaS, я задумал одну небольшую фантазию. На которую меня, кстати, вдохновило Агентство национальной безопасности США , которое скрытно собирало данные через игру Angry Birds, встроив в нее троянец.
Суть фантазии следующая. Допустим, имеется кросс-платформенная про грамма на UnityЗD/C#, способная работать в Windows, на Android и iOS. Например, это может быть п ростенькая мобильная игра-завлекалочка. Хакер хочет незаметно для пользователя перегнать его данные в облако и потом получить к ним удобный доступ. Какими ресурсами он для этого будет пользоваться?
МЕТОДИКА ИСПОЛЬЗОВАНИЯ MBAAS
Взаимодействие с любой МВааS-службой отличается в технических деталях, но обычно развивается по типовой схеме:
1. Регистрируемся в МВааS-сервисе.
2. Создаем проект или приложение, получаем для него ключи доступа, которые задаем в клиентской п рограмме.
3. На клиентской стороне программируем соединение с сервером.
4. Нередко дополнительно требуется завести условного пользователя, который будет идентифицировать конкретный сеанс связи смартфона с сервисом.
5. Посредством достаточно простого API (обычно объектно ориентированного) передаем данные в облако.
6. Периодически просматриваем консоль MBaaS и анализируем, какие данные за последнее время были слиты.
Я рассмотрю шесть МВааS-служб, в которых декларируется поддержка UnityЗD. ВааS — сервисов схожего назначения на самом деле десятки, и чаще всего обеспечивается взаимодействие с SDK для Android и iOS, но мы специально не будем привязываться к конкретной платформе, чтобы за деталями реализации не потерять суть.
ЧТО И КАК БУДЕТ СЛИТО?
Полезными в простейшем случае о кажутся телефонные номера в списке контактов и тексты эсэмэсок; в более продвинутых случаях можно, получив рут, качать данные поинтересней, в том числе и GPS. В рамках даже кросс-платформенного UnityЗD соответствующие функции можно реализовать вполне комфортно, достаточно добавить несколько десятков строк оригинального кода под каждую из трех основных платформ (Android, iOS, Windows Phone).
Например, так:
#if UNITY_ANDROID AndroidJavaObject TM = new AndroidJavaObject("android.telephony.TelephonyManager"); string IMEI = ТМ.Call<string>("getDeviceId") ;
или даже проще:
string IMEI = Systeminfo.deviceUniqueidentifier;
Надо только не забыть включить в настройках проекта разрешение READ_ PHONE_STATE, все равно пользователи практически все гда принимают эти запросы по умолчанию.
ВЫБИРАЕМ ЛУЧШИЕ ИЗ ХУДШИХ
Моя оценка МВааS-систем , конечно, довольно субъективна , я учитывал прежде всего порог вхождения в соответствующий сервис: как быстро можно запустить работающий тестовый пример, сколь удобна документация , каковы возможны в целом.
GameSparks.com
Гордо называющий себя The #1 Backend-as-a-Service platform for games, этот сервис заслужил твердый неуд и получил первое место с конца. Регистрация занимает минуту, пустая игра тоже мгновенно создается, а сам SDK в формате unitypackage устанавливается без проблем.
Первый звоночек прозвучал при копировании игровых ключей: в консоли под API Кеу и API Secret отведено столь мало места (а автоматически они не выделяются), что в результате очень легко ошибочно скопировать часть ключа без его невидимого хвоста. Сами ключи задаем в сцене UnityЗD в настройках меню GameSparks.
Сервис поддерживает множество платформ : iOS, Android, JavaScript, Marmalade, Cocos2d, Flash и другие. Для Un ityЗD предлагается две версии SDK, однако последнюю, третью, вообще не рекомендую : пока очень сырая, много багов, не выполняется аутентификация по стандартной инструкции, хотя на разбирательство я потратил не один час. А вот предыдущая версия Unity SDK 2 подключилась к серверу GameSparks без проблем , однако поразило практически полное отсутствие внятной документации и общая корявость.
Странный пример с акцентом на подключении к фейсбуку с использованием платной библиотеки NGUI добил окончательно. Увы, но даже такие соблазнительные вещи , как NoSOL, прямая интеграция с соцсетями , да и вообще в целом весьма обширная функциональность, не пересилили потенциально необходимого расхода времени на погружение в доки.
[ad name=»Responbl»]
Форумы GameSparks тоже не радуют : на вопросы пользователей обещания саппорта «МЫ рассмотрим ваши пожелания» висят месяцами. Вообще рекомендую обращать внимание на этот момент, потому что рынок МВааS-сервисов весьма нестабильный.
Вместе с тем на бесплатном тарифе GameSparks можно получить 20 Гб облачного пространства, 20 Гб суммарного трафика и 20 миллионов вызовов API — эти цифры весьма серьезные и превосходят конкурентов подчас на порядок. Связано ли это с агрессивной маркетинговой политикой развития или же с судорожным стремлением удержаться на плаву в условиях растущей конкуренции, покажет время.
Kumakore.com
Версии SDK предлагаются для Unity, Android, iOS, а также, что важно, доступен универсальный REST API . Приятно, что все SDK выложены на GitHub в исходниках. Процесс настройки проекта UnityЗD схож с процессом из предыдущего
примера: также импортируем SDK с unitypackage, в консоли создаем приложение и запоминаем ключи . Но на этом все позитивные моменты заканчиваются.
Обещанный в документации пример Hello world в пакете отсутствует. Функция подключения к серверу содержит дополнительный параметр (версия приложения), формат которого с ходу отыскать не удается. Для первичного соединения с облаком Kumakore подставляем в конструктор, формирующий связь с сервером, соответствующие значения ключей из консоли и версию приложения:
Виртуального пользователя лучше создать в консоли заранее:
Главный минус сервиса Kumakore для наших целей в том, что данные необходимо грузить в объекты хранения, привязанные к конкретному пользователю.
Вроде бы в сервисе присутствует и некий Global Object, однако примеров работы с ним найти не удалось. В рамках текущего коннекта арр надо получить текущего пользователя getUser(), из него вытащить внутреннее хранилище getDatastore() и потом уже внутри создать нужный объект в формате коллекции ключ — значение :
К минусам также н адо отнести местами устаревшую документацию (форматы вызовов многих функций изменены) и отсутствие хороших примеров, а также слабую поддержку серверной логики, но в целом этот сервис минимально удовлетворителен. Правда, и бесплатный тариф очень минималистичен: 500 Мб хранилища и в сумме миллион запросов API и рush-уведомлений в месяц.
Kii.com
Еще один довольно неуклюжий сервис, на этот раз из Японии . Поеимvшество его передпредыдущим — наличие какого-никакого автономного объектного хранилища. Быстро регистрируемся, создаем в консоли приложение, выбираем местонахождение сервера (от этого выбора будет зависеть время отклика облачной службы), получаем два ключа.
[ad name=»Responbl»]
Сама настройка SDK и первичного подключения не слишком тривиальна, а все взаимодействие с облаком подразумевает регистрацию игрока, что, как отмечалось, не очень удобно . В SDK входят три DLLKИ, включая неплохой JSON-пapcep. Они копируются в каталог Assets нового проекта , после чего надо прикрепить на пустой игровой объект базовый скрипт. В его настройках вводим Application ID, Application Кеу и Site (последний зависит от географии сервера).
Соединение с сервером стартуем через регистрацию нового пользователя.
Теперь можно обращаться к облачному JSОN -хранилищу. В нем формируются именованные «бакеты» — условные наборы произвольных объектов.
Серверная логика реализуется с помощью так называемых серверных расширений, которые пишутся на JavaScript. Важно, что вызывать эти скрипты можно как по условиям (по расписанию или даже вручную, отслеживая процесс
из консоли), так и напрямую из клиен тского кода:
Пользователю для экспериментов предлагается 1 Гб хранилища и по миллиону вызовов API и рush-уведомлений в месяц .
ПРИЗЕРЫ И ПОБЕДИТЕЛЬ
3-е место. Gamesnet.Yahoo.net
Бывшая PlayerlO.com, приобретенная Yahoo в прошлом году, развивалась весьма успешно, набрав за четыре года 150 миллионов пользователей . Теперь она официально называется Yahoo Games Network, хотя в самой платформе особых изменений не произошло — например , ключевые классы именуются по-прежнему PlayerlO. Поддерживаемые платформы — Android Java, iOS/Objective-C, UnityЗD/NET, ActionScript. Флеш, кстати, до сих пор позиционируется как основная клиентская платформа, большинство примеров и туториалов сделаны на ActionScript, и это моральное устаревание, конечно, главный минус данной платформы. А в документации примеры все еще для Visual Studio 2010.
[ad name=»Responbl»]
После простой регистрации создаем новую игру. В списке сервисов Yahoo имеется облачное NоSОL-хра н илище BigDB. Сильная сторона Yahoo в возможности прямой с ним работы в обходдополнительного регистрирования игроков.
Из консоли сервиса на вкладке BigDB создадим новую таблицу для хранения наших объектов (например, хtаЫе) . Хранилище нереляционное и бессхемное, поэтому задавать жесткую структуру таблицы не требуется, достаточно просто указать ее имя.
SDK для UnityЗD представляет собой пустую заготовку проекта, за всю облачную функциональность отвечает DLLкa PlayerlOUnityЗDClient.dll. Соединение с сервером выполняется простым кодом
Фактически достаточно указать единственный идентификатор Game ID и любой произвольный идентификатор текущего пользователя (в нашем случае — «user-id»).
После настройки соединения можно сразу слить нужную информацию о телефоне пользователя в облако. Для этого создадим объект базы данных и заполним его произвольно названные поля:
Добавление объекта в базу столь же прозрачно:
Нужные нам данные появя тся в ко н соли сервиса Yahoo.
К минусам данного сервиса отнесу минималистичные примеры только для флеша, кривоватую и довольно скудную документацию. Впрочем , это все компенсируется простой и устойчивой работой сервиса и общей надежностью под эгидой YAHOO.
[ad name=»Responbl»]
Особо хочу отметить отличный акцент на разработке мультиплеерного серверного кода — разработка может вестись в Visual Studio, на сервер грузится обычная DLLкa, а программисту доступны наглядные услуги сопровождения девелоперских кластеров. По этой причине, несмотря на общую аскетичность, данныи сервис уверенно выходит на третье место.
2-е место. Api.Shephertz.com (Арр42)
Данный сервис попал на второе место в какой-то степени по блату: я с ним хорошо знаком, пользуюсь им активно и очень доволен . Особо хочу отметить саппорт: уже после первых экспериментов мне назначили менеджера из Индии,
с которым мы успешно переписываемся .
Арр42 Cloud API развивается весьма стабильно, и список услуг постоянно расширяется. Сейчас доступны два десятка клиентских технологий: от типовых (хранилище, уведомления, почта, соцсети, ачивки, топы, серверный код, аналитика) до довольно оригинальных (поддержка геоданных, альбомы фотографий , логи вызовов , э-коммерция, асинхронные очереди сообщений, офлайновые режимы и прочее).
При регистрации получаем игровые ключи и начинаем настраивать соединение. К небольшим минусам Арр42 надо отнест и отсутствие готового JSON-пapcepa в стандартном SDK, поэтому я взял опенсорсный SimpleJSON.
Еще одна странность данной платфо р мы — обработка н егативных ответов сервера через прерывания, хотя по-взрослому это принято реализовывать с помощью делегатов.
Записываем данные в облако:
Серверный код пишется на Java.
Сервис предлагает бесплатно миллион вызовов API в месяц , миллион рush-уведомлений, 1 Гб облачного хранилища и 1 Гб суммарного трафика.
1-е место. Parse.com
Этот сервис — однозначный победитель нашего рейтинга , и совсем не потому, что его создатель — москвич Илья Сухарь. Он основал этот стартап в 2011 году, и уже спустя два года ему позвонил Цукерберг, предложив за сервис Parse 85
миллионов долларов , на что Илья согласился . И это при том, что предложения ему делали также Dropbox, Google и Yahoo!
В Parse.com все реализовано очень просто и элегантно. Регистрируемся, создаем пустое приложение в консоли Parse, в разделе Keys копируем нужные ключи. Скачиваем пустую заготовку проекта UnityЗD, в котором за все функции
платформы отвечает Parse.Unity.dll. Открываем сцену, в настройках объекта Parse lnitializer задаем ключи Application 10 и .NET Кеу.
В коде достаточно ввести единичные операторы, чтобы выполнить нужную функцию по сохранению данных в облаке Parse:
ParseObject testObject = new ParseObject("TestObject"); testObject["phone"] = "123-45-56"; testObject["money"] = 500; testObject.SaveAsync();
TestObject — это название облачной таблички, которая создается в разделе Data консоли Parse парой щелчков мыши.
Не удержусь и приведу элегантный код считывания данных из облака Parse:
В качестве параметра GetAsync() выступает внутренний идентификатор нужно го объекта (objectld), доступный в консоли.
Серверная логика прозрачно кодируется на JavaScript, а соответствующий код можно привязывать к различным событиям или запускать в фоне. Приятно, что даже бесплатный тариф Parse.com весьма щедр: по 20 Гб облачного
пространства на свои объекты и на файлы, 2 Тб трафика, 30 обращений к API в секунду (2,67 милииона вызовов в месяц) и одна фоновая серверная задача.
ВНЕ КОНКУРСА
Отмечу несколько других неплохих сервисов. Это, например, отечественная разработка OuickBlox, предлагающая пак для UnityЗD, где акцент сделан на загрузке — выгрузке файлов и взаимодействии с хранилищем Amazon SЗ . Минус
в том, что для доступа к хранилищу Asset bundles потребуется Рrо-версия Unity.
Есть платформы, в которых отсутствует прямая поддержка облачного хранилища через Un i tyЗD, но нередко имеется возможность обращения к нему через универсальный REST API . Это, конечно, и Google Cloud, и Amazon со свежим Cognito для iOS, Android и собственной ОС Fire.
[ad name=»Responbl»]
Отдельно надо выделить очень популярную в gamedev-тycoвкe службу Photon (exitgames.com), которая предоставляет мощный и отлично масштабирующийся облачный бэкенд Photon Cloud для мобильных, веб- и РС-платформ. Фотон ориентирован на создание многопользовательских 30-игр и облачное хранилище данных не предлагает, но всегда есть возможность заказат ь дедик и настраивать его под свои продвинутые нужды.
Пользователям предоставляется высокоуровневая мультиплеерная среда, где не нужно самостоятельно заботиться о синхронизации игрово го мира в реальном времени или в пошаговом режиме между всеми пользователями . Минус Фотона для хакера в том, что эта абстрактность подразумевает использование скрытых методов передачи данных, близких к стеганографии . Ну или можно быстро прикрутить обычный чат — это столь востребованная услуга в списке возможностей Photon, что даже позиционируется особняком.