Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Если вы разрабатываете игру на движке GDevelop, и решили опубликовать свою игру в Яндекс Играх, то это статья для вас!

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

Итак, когда моя игра, как я думал, была готова и только оставалось добавить рекламу от Яндекс, то я начал искать готовое расширение для GDevelop, которое без знания мною кода, позволило бы легко добавить рекламу. Я нашел такое расширение:

Но заранее говорю, не устанавливаете его, так как вы не пройдете модерацию Яндекса. Скоро узнаете почему.

Я установил расширение, добавил рекламу, зарегестрировался на сайте Яндекс Игр и отправил игру на модерацию. Как вы могли догадаться, модерацию я не прошёл. Модератор прислал мне кучу замечаний:

1. При сворачивании страницы с игрой, звук/музыка в игре продолжает воспроизводиться - это не соответствует пункту 1.3 требований платформы. Звук не прекращается при сворачивании окна браузера;

2. После перехода на другую вкладку, звук/музыка в игре продолжает воспроизводиться - это не соответствует пункту 1.3 требований платформы. Звук не прекращается при переходе на другую вкладку;

3. На Android устройствах плеер игры отображается в панели уведомлений. Это не соответствует пункту 1.6.1.6 требований платформы. Рекомендуем использовать Web Audio API: https://developers.google.com/web/updates/2015/07/media-notifications. Отображается плеер на десктопе, Android, IOS;

4. На устройствах iOS лонгтап по игровому полю приводит к выделению поля или открытию контекстного меню. Это нарушает пункт 1.6.1.8 требований платформы. Решение можно посмотреть по ссылке: https://stackoverflow.com/questions/826782/how-to-disable-text-selection-highlighting. Лонгтап внутри игры приводит к выделению игровой области;

5. Игра зависает/тормозит. Это нарушает п. 1.14 Требований платформы. Игра зависает на Android;

6. Мы заметили, что сейчас в вашей игре не используются методы Game Ready API. Пожалуйста, заранее добавьте поддержку этих методов, подробнее о них пишем в Документации: https://yandex.ru/dev/games/doc/ru/sdk/sdk-game-events#gameready. Скоро игры без этих методов будут отклоняться на модерации: новые игры начнем отклонять со 2 сентября 2024 года, а обновления уже опубликованных игр – с 16 октября 2024 года;

7. Мы заметили, что сейчас в вашей игре загрузка SDK производится не так, как описано в документации. Пожалуйста, заранее измените механику загрузки SDK так, чтобы загрузка соответствовала документации: https://yandex.ru/dev/games/doc/ru/sdk/sdk-about#install. Скоро игры с загрузкой SDK методами, отличными от описанных в документации, будут отклоняться на модерации: новые игры начнем отклонять со 2 сентября 2024 года, а обновления уже опубликованных игр – с 16 октября 2024 года.

Прочитав это сообщения, моя первая мысль: "Боже, и как я буду это всё исправлять???". Но чуть успокоевшись, я решил по порядку, без паники починить каждый из пунктов в игре. Итак, начнем по порядку:

1&2. Здесь решение фиксит сразу две проблемы. Значит первая и вторая проблема заключались в том, что при сворачивании игры или переключение вкладки в браузере звук продолжает играть. Поискав в интернете, я нашёл расширение PauseFocusLost. Вы можете его поставить, но код придётся чуть переписать, так как появилась проблема, что при переключении вкладок в Яндекс Браузере и возвращении снова к игре, игра не продолжит снова работать, пока вы не раскроете её на весь экран. Чтобы это исправить, надо зайти в расширение, и исправить код на такой:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

И проблема будет решена.

3. Данная проблема была связана в тем, что музыка в игре попадает в панель уведомлений смартфона, а также браузера. На самом деле данную проблему очень легко устранить. Надо просто в событиях игры вместо "Play the music file" выбрать "Play the sound file". Переходим к следующей проблеме.

4. Следующая проблема заключается в том, что если задержать палец на экране iOS, то активируется выделение, чего быть не должно. Фиксится это следующим образом: когда скомпилируете игру, откройте папку с этой игрой и найдите файл index.html. В разделе CSS пропишите следующее:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Двигаемся дальше.

5. Игра виснет и тормозит. Там был отрезок видео от модератора, что не нажималась кнопка меню. Я раз 10 перезапускал такой момент, но всё было в порядке. Видимо, просто случайность, подумал я, и на всякий чуть оптимизировал события. Игра на следующей модерации не тормозила.

6. В моей игре не используются методы Game Ready API. Данные методы сообщают Яндексу, когда игрок непосредственно играет в игру, а когда ждет пока игра загрузит следующий уровень, показывает рекламу, ставит игру на паузу и т.д., короче, когда он не играет.

Для решения этой проблемы я полез в документацию, и в итоге создал внутри игры три расширения (сейчас я понимаю, что можно было обойтись одним, но создавал я расширения в первый раз).

Первое расширение называется Game Ready For Yandex и оно просто должно сообщить, когда игра загрузила все ресурсы и готова для работы:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

И активировал его в начальной сцене:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Следующее расширение говорит Яндексу когда начался геймплей в игре:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Добавлял я его в начале каждого уровня:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

И последнее расширение говорит Яндексу, что в данный момент пользователь не играет в игру:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Разместил я это событие при активации паузы, загрузки следующего уровня или показа рекламы:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

И так мы пофиксили данную проблему, переходим к последней.

7. Загрузка SDK происходит не так как в документации. Чтобы решить эту проблему пришлось удалить расширение связанное рекламой Яндекса и написать все самому вручную. Итак, в начале сцены, которая предназначена, чтобы показываться, пока не загрузится следующая, я добавил показ полноэкранной рекламы (там еще я добавил дополнительные условия, на них можете не обращать внимания):

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop
Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Как видите внутри для каждой callback-функции я написал, чтобы программа брала одну глобальную переменную AddYandexFull и задавала ей определенное значение. А дальше в зависимости от значения переменной, предпринял следующие действия:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Также я решил добавить рекламу за вознаграждение, когда персонаж игрока погибает и появляется кнопка посмотреть рекламу за возвращение жизней. Если игрок кликнул на кнопку, то в глобальной переменной rewardedVideo значение меняется на Play, и срабатывает этот код:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop
Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

И в зависимости от того какая callback-функция сработает, предпринимаются следующие действия:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

Теперь надо скомпилировать игру, найти файл index.html, и вставить такой код:

Как опубликовать игру в Яндекс Игры, если вы используете GDevelop
Как опубликовать игру в Яндекс Игры, если вы используете GDevelop

На этом всё! Надеюсь, данная статья стала для вас полезной!:)

Кстати, вот моя игра, буду рад если поиграете:

11
Начать дискуссию