@SadManSad

Использование собственного сервера для Android игры. Какой использовать?

Доброго времени суток.
На данный момент веду разработку простенькой игры. Игра полностью на клиенте, без онлайна.
Однако придумал парочку методов, дабы усложнить взлом игры(усложнить, потому что кому надо - тот сломает, думаю, что известно всем :) ). И один из методов - верификация на сервере каждого поставленного рекорда.
Изначально была задумка поднять обычный PHP+SQL сервер, хранить там рекорды и проверять в паре скриптов. Но наткнулся на Google Play Services, прочитал и понял, что они предоставляют неплохие фичи в этом плане. Нашёл ачивки, квесты, таблицу рекордов. Однако где можно написать собственную логику верификации не нашёл, везде идёт обычный сабмит сразу в таблицу с клиента, что мне не подходит.

Может я что-то пропустил? И там все же есть какой-то способ прописать собственную логику и добавить некоторую информацию.
Или мне всё же нужно поднимать свой сервер, проверять всё там и потом через API делать сабмит в гугловский топ привязанный к приложению?

Спасибо.
  • Вопрос задан
  • 735 просмотров
Пригласить эксперта
Ответы на вопрос 1
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
1. Не думаю, что при одиночной игре кто-то будет этим заморачиваться и пытаться накрутить себе рекорды. В гугл это должно проверяться на основе сертификата приложения и пользовательского аккаунта гугла.
2. Если нет доверия гуглу - проще поднять свой сервер.
3. Если хотите, можете сделать локальную верификацию через подписанный своим ключом файл на основе исторической информации всех игр.

При первом запуске приложения формируете ключ KEY на основе UUID и записываете его в хранилище приложения.

Открытая таблица достижений в хранилище приложения (дата, уровень, кол-во набранных очков):
11.11.2016 Level5 20123
11.12.2016 Level6 11200

Затем все достижения хешируете так (1,2 и т.д. - номера записей, для доп. контроля):
KEY=hash(KEY.'11.11.2016 Level5 20123'.KEY.1);
KEY=hash(KEY.'11.11.2016 Level6 11200'.KEY.2);

Т.е., в итоге мы имеем: открытую таблицу достижений, хранящуюся локально, формулу формирования НАЧАЛЬНОГО ключа и ключ KEY для проверки этой таблицы на целостность данных и для защиты от стороннего изменения через добавление/изменение строк в ней.
И проверяете ИТОГОВЫЙ ключ в хранилище приложения KEY при помещении нового результата в таблицу достижений GOOGLE по открытой таблице:
Ключ совпал - меняем ключ у себя, добавляем строку, помещаем в PlayServices рекорд.
Не совпал - удаляем все строки из открытой таблицы до последней верной (совпавшей с текущим/последним хранимым KEY), удаляемые строки можно также (вроде бы!) удалить из PlayService-ов (убрав нужные рекорды).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы