Unity

Unity #

Подключение #

Скачайте актуальный .unitypackage cо страницы релизов на github.com и импортируйте в проект. Для корректной работы необходимо импортироавать все файлы, кроме папки Examples. Ее можно импортировать по желанию. В ней есть сцена с примерами использования.

Инициализация #

Когда игра загружена — плагин уже проинициализирован. Ничего дополнительно делать не нужно.

Сборка #

Для корректной работы плагина необходимо выбрать соответствующий WebGL Template.

Здесь есть ряд настроек внешнего вида:
Overlay Background Color — цвет фона.
Progress Bar Background Color — цвет фона загрузочной полосы.
Progress Bar Fill Color — цвет самой полосы.
Game Distribution Game ID — ID игры, если публикуете на GameDistribution.
VK Play Game ID — ID игры, если публикуете на VK Play.

Цвет задаётся в формате HEX. Например, чёрный — #000000. Для значения по умолчанию нужно поставить знак -.

Чтобы заменить иконку — просто замените файл WebGLTemplates/Bridge/icon.png.

⚠️ Предупреждение
Важно! При загрузке файлов на Crazy Games в пункте Game Type нужно выбрать HTML5, а не Unity.

Информация о платформе #

ID платформы #

Bridge.platform.id

Возвращает ID платформы, на которой запущена игра в данный момент. Возможные значения: playgama, vk, ok, yandex, crazy_games, absolute_games, game_distribution, vk_play, mock.

Язык #

Bridge.platform.language

Если платформа предоставляет данные об языке пользователя — то это будет язык, который установлен у пользователя на платформе. Если не предоставляет — это будет язык браузера пользователя. Формат: ISO 639-1. Пример: ru, en.

Параметр из адресной строки #

Bridge.platform.payload

С помощью данного параметра можно в ссылку на игру встраивать какую-либо вспомогательную информацию.

Платформа Формат ссылки
Playgama
VK vk.com/app8056947#your-info
OK
Yandex yandex.com/games/play/183100?payload=your-info
Crazy Games crazygames.com/game/example?payload=your-info
Absolute Games
Game Distribution
VK Play
Mock site.com/game?payload=your-info

Информация о домене #

Bridge.platform.tld
Платформа Возможные значения
Playgama null
VK null
OK null
Yandex com, ru, etc.
Crazy Games null
Absolute Games null
Game Distribution null
VK Play null
Mock null

Отправка сообщения платформе #

Bridge.platform.SendMessage(PlatformMessage.GameReady);
Сообщение Описание Где поддерживается
GameReady Игра загрузилась, все загрузочные экраны прошли, игрок может взаимодействовать с игрой. Yandex
InGameLoadingStarted Началась какая-либо загрузка внутри игры. Например, когда идёт загрузка уровня. CrazyGames
InGameLoadingStopped Загрузка внутри игры окончена. CrazyGames
GameplayStarted Начался геймплей. Например, игрок зашёл в уровень с главного меню. CrazyGames
GameplayStopped Геймплей закончился/приостановился. Например, при выходе с уровня в главное меню, открытии меню паузы и т.д. CrazyGames
PlayerGotAchievement Игрок достиг особенного момента. Например, победил босса, установил рекорд и т.д. CrazyGames

Информация о девайсе #

Тип девайса #

Bridge.device.type

Возвращает тип девайса, с которого пользователь запустил игру. Возможные значения: Mobile, Tablet, Desktop, TV.

Информация об игроке #

Поддержка авторизации #

Bridge.player.isAuthorizationSupported
Платформа Возможные значения
Playgama false
VK true
OK true
Yandex true
Crazy Games false
Absolute Games true
Game Distribution false
VK Play true
Mock false

Авторизован ли игрок в данный момент #

Bridge.player.isAuthorized
Платформа Возможные значения
Playgama false
VK true
OK true
Yandex true / false
Crazy Games false
Absolute Games true / false
Game Distribution false
VK Play true / false
Mock false

ID игрока #

Bridge.player.id

Если авторизация поддерживается на платформе и игрок авторизован в данный момент – возвращает его ID на платформе, иначе — null.

Имя игрока #

Bridge.player.name
Платформа Возможные значения
Playgama null
VK Имя игрока
OK Имя игрока
Yandex Если игрок авторизован и дал игре доступ к личной информации — имя игрока, иначе — null
Crazy Games null
Absolute Games Если игрок авторизован — имя игрока, иначе — null
Game Distribution null
VK Play Если игрок авторизован — имя игрока, иначе — null
Mock null

Аватар игрока #

Bridge.player.photos

Массив аватаров игрока, упорядоченный по возрастанию разрешения.

Платформа Возможные значения
Playgama Пустой массив
VK Массив ссылок на изображения
OK Массив ссылок на изображения
Yandex Если игрок авторизован и дал игре доступ к личной информации — массив ссылок на изображения, иначе — пустой массив
Crazy Games Пустой массив
Absolute Games Если игрок авторизован — массив ссылок на изображения, иначе — пустой массив
Game Distribution Пустой массив
VK Play Если игрок авторизован — массив ссылок на изображения, иначе — пустой массив
Mock Пустой массив

Авторизация игрока #

private void Start() 
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            options.Add("scopes", true);
            break;
    }
    
    Bridge.player.Authorize(options, OnAuthorizePlayerCompleted);
}

private void OnAuthorizePlayerCompleted(bool success) 
{
    if (success) 
    {
        // Игрок успешно авторизован
    }
    else
    {
        // Ошибка, что-то пошло не так
    }
}
Платформа Возможные значения
Playgama false
VK true
OK true
Yandex Если игрок уже авторизован — true. Если не авторизован — показывается диалоговое окно авторизации. Далее true / false зависит от того авторизуется игрок или нет.
Crazy Games false
Absolute Games Если игрок уже авторизован или открылось окно авторизации — true. После авторизации происходит перезагрузка страницы. false в случае ошибки.
Game Distribution false
VK Play Если игрок авторизован — true. Если игрок авторизуется — true (после этого произойдёт перезагрузка страницы). false в случае ошибки.
Mock false

Информация об игре #

Текущее состояние видимости #

Bridge.game.visibilityState

Возвращает текущее состояние видимости игры (вкладки с игрой). Возможные значения: visible, hidden.

// Изменение состояния видимости можно отслеживать, подписавшись на событие
private void Start()
{
    Bridge.game.visibilityStateChanged += OnGameVisibilityStateChanged;
}

private void OnGameVisibilityStateChanged(VisibilityState state)
{
    switch (state) 
    {
        case VisibilityState.Visible:
            // Вкладка с игрой видима
            break;
        case VisibilityState.Hidden:
            // Вкладка с игрой скрыта
            break;
    }
}
📝 Примечание
Нужно реагировать на изменение состояния рекламы. Например, выключать звук в игре при Hidden и включать при Visible.

Пользовательские данные #

Есть два типа хранилища: локальное LocalStorage и внутреннее PlatformInternal. При записи в локальное — данные сохраняются у игрока на конкретном девайсе, при записи во внутреннее — данные сохраняются на серверах платформы.

Тип хранилища по умолчанию #

Bridge.storage.defaultType

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

Платформа Возможные значения
Playgama LocalStorage
VK PlatformInternal
OK Если игрок дал доступ — PlatformInternal, если нет — LocalStorage
Yandex Если игрок авторизован — PlatformInternal, если нет — LocalStorage
Crazy Games LocalStorage
Absolute Games Если игрок авторизован — PlatformInternal, если нет — LocalStorage
Game Distribution LocalStorage
VK Play LocalStorage
Mock LocalStorage

Проверка на поддержку #

Bridge.storage.IsSupported(StorageType.LocalStorage)
Bridge.storage.IsSupported(StorageType.PlatformInternal)
Платформа LocalStorage PlatformInternal
Playgama true false
VK true true
OK true true
Yandex true true
Crazy Games true false
Absolute Games true true
Game Distribution true false
VK Play true false
Mock true false

Проверка на доступность #

Bridge.storage.IsAvailable(StorageType.LocalStorage)
Bridge.storage.IsAvailable(StorageType.PlatformInternal)
Платформа LocalStorage PlatformInternal
Playgama true false
VK true true
OK true Если игрок дал доступ — true, если нет — false
Yandex true Если игрок авторизован — true, если нет — false
Crazy Games true false
Absolute Games true Если игрок авторизован — true, если нет — false
Game Distribution true false
VK Play true false
Mock true false

Загрузка данных #

// Получить данные по ключу
private void Start()
{
    Bridge.storage.Get("level", OnStorageGetCompleted);
}

private void OnStorageGetCompleted(bool success, string data)
{
    // Загрузка произошла успешно
    if (success)
    {
        if (data != null) 
        {
            Debug.Log(data);
        }
        else
        {
            // Данных по ключу level нет
        }
    }
    else
    {
        // Ошибка, что-то пошло не так
    }
}

// Получить данные по нескольким ключам
private void Start()
{
    Bridge.storage.Get(new List<string>() { "level", "coins" }, OnStorageGetCompleted);
}

private void OnStorageGetCompleted(bool success, List<string> data)
{
    // Загрузка произошла успешно
    if (success)
    {
        if (data[0] != null)
        {
            Debug.Log($"Level: {data[0]}");
        }
        else
        {
            // Данных по ключу level нет
        }
        
        if (data[1] != null)
        {
            Debug.Log($"Coins: {data[1]}");
        }
        else
        {
            // Данных по ключу coins нет
        }
    }
    else
    {
        // Ошибка, что-то пошло не так
    }
}

// Получить данные из конкретного хранилища
private void Start()
{
    Bridge.storage.Get("level", OnStorageGetCompleted, StorageType.LocalStorage);
}

private void OnStorageGetCompleted(bool success, string data)
{
    // Загрузка произошла успешно
    if (success)
    {
        if (data != null) 
        {
            Debug.Log(data);
        }
        else
        {
            // Данных по ключу level нет
        }
    }
    else
    {
        // Ошибка, что-то пошло не так
    }
}

Сохранение данных #

// Сохранить данные по ключу
private void Start()
{
    Bridge.storage.Set("level", "dungeon_123", OnStorageSetCompleted);
}

private void OnStorageSetCompleted(bool success)
{
    Debug.Log($"OnStorageSetCompleted, success: {success}");
}

// Сохранить данные по нескольким ключам
private void Start()
{
    var keys = new List<string>() { "level", "is_tutorial_completed", "coins" };
    var data = new List<object>() { "dungeon_123", true, 12 };
    Bridge.storage.Set(keys, data, OnStorageSetCompleted);
}

// Сохранить данные в конкретное хранилище
private void Start()
{
    Bridge.storage.Set("level", "dungeon_123", OnStorageSetCompleted, StorageType.LocalStorage);
}

Удаление данных #

// Удалить данные по ключу
private void Start()
{
    Bridge.storage.Delete("level", OnStorageDeleteCompleted);
}

private void OnStorageDeleteCompleted(bool success)
{
    Debug.Log($"OnStorageDeleteCompleted, success: {success}");
}

// Удалить данные по нескольким ключам
private void Start()
{
    var keys = new List<string>() { "level", "is_tutorial_completed", "coins" };
    Bridge.storage.Delete(keys, OnStorageDeleteCompleted);
}

// Удалить данные из конкретного хранилища
private void Start()
{
    Bridge.storage.Delete("level", OnStorageDeleteCompleted, StorageType.LocalStorage);
}

Если при работе с данными не передавать третьим аргументом тип хранилища, то используется тип хранилища по умолчанию Bridge.storage.defaultType.

Bridge.advertisement.isBannerSupported
Платформа Возможные значения
Playgama false
VK true
OK true
Yandex true
Crazy Games true
Absolute Games false
Game Distribution true
VK Play false
Mock false
📝 Примечание
Чтобы баннеры работали в Yandex — необходимо их включить в настройках игры.
private void Start()
{
    var options = new Dictionary<string, object>();

    switch (Bridge.platform.id)
    {
        case "vk":
            options.Add("position", "bottom");
            options.Add("layoutType", "resize");
            options.Add("canClose", false);
            break;
    }
    
    Bridge.advertisement.ShowBanner(options);
}
Bridge.advertisement.HideBanner()
Bridge.advertisement.bannerState

Текущее состояние баннера. Возможные значения: Loading, Shown, Hidden, Failed.

// Отслеживать изменение состояния можно подписавшись на событие
private void Start()
{
    Bridge.advertisement.bannerStateChanged += OnBannerStateChanged;
}

private void OnBannerStateChanged(BannerState state)
{
    Debug.Log(state);
}

Межстраничная реклама. Обычно показывается в момент загрузки уровня/поражения и т.д.

// Значение по умолчанию = 60 секунд
Bridge.advertisement.minimumDelayBetweenInterstitial

Между показами Interstitial-рекламы нужно соблюдать временные интервалы. Например, Yandex просто не покажет рекламу если вызывать слишком часто, а VK будет показывать так часто, как вызывается метод.

Для удобства, в данном SDK есть встроенный механизм таймера между показами. Вам нужно лишь указать нужный интервал и можно дёргать метод показа рекламы сколько угодно.

private void Start() 
{
    // Установить минимальный интервал
    Bridge.advertisement.SetMinimumDelayBetweenInterstitial(30);
}
Bridge.advertisement.interstitialState

Текущее состояние рекламы. Возможные значения: Loading, Opened, Closed, Failed.

// Отслеживать изменение состояния можно подписавшись на событие
private void Start()
{
    Bridge.advertisement.interstitialStateChanged += OnInterstitialStateChanged;
}

private void OnInterstitialStateChanged(InterstitialState state)
{
    Debug.Log(state);
}
📝 Примечание
Нужно реагировать на изменение состояния рекламы. Например, выключать звук в игре при Opened и включать при Closed и Failed.
private void Start() 
{
    Bridge.advertisement.ShowInterstitial();
}

Реклама за вознаграждение.

Bridge.advertisement.rewardedState

Текущее состояние рекламы. Возможные значения: Loading, Opened, Closed, Rewarded, Failed.

// Отслеживать изменение состояния можно подписавшись на событие
private void Start()
{
    Bridge.advertisement.rewardedStateChanged += OnRewardedStateChanged;
}

private void OnRewardedStateChanged(RewardedState state)
{
    Debug.Log(state);
}
📝 Примечание
Нужно реагировать на изменение состояния рекламы. Например, выключать звук в игре при Opened и включать при Closed и Failed.
⚠️ Предупреждение
Награду игроку нужно выдавать только при наступлении состояния Rewarded.
Bridge.advertisement.ShowRewarded()

Социальные взаимодействия #

Поделиться #

Bridge.social.isShareSupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgama false
VK true
OK false
Yandex false
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "vk":
            options.Add("link", "https://vk.com/mewton.games");
            break;
    }

    Bridge.social.Share(options, OnShareCompleted);
}

private void OnShareCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Вступить в сообщество #

Bridge.social.isJoinCommunitySupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgame false
VK true
OK true
Yandex false
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
            
    switch (Bridge.platform.id)
    {
        case "vk":
            options.Add("groupId", 199747461);
            break;
        case "ok":
            options.Add("groupId", 62984239710374);
            break;
    }
    
    Bridge.social.JoinCommunity(options, OnJoinCommunityCompleted);
}

private void OnJoinCommunityCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Пригласить друзей #

Bridge.social.isInviteFriendsSupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgama false
VK true
OK true
Yandex false
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "ok":
            options.Add("text", "Hello World!");
            break;
    }

    Bridge.social.InviteFriends(options, OnInviteFriendsCompleted);
}

private void OnInviteFriendsCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Опубликовать пост #

Bridge.social.isCreatePostSupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgama false
VK true
OK true
Yandex false
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "vk":
            options.Add("message", "Hello World!");
            options.Add("attachments", "photo-199747461_457239629");
            break;
        
        case "ok":
            var media = new object[]
            {
                new Dictionary<string, object>
                {
                    { "type", "text" },
                    { "text", "Hello World!" },
                },
                new Dictionary<string, object>
                {
                    { "type", "link" },
                    { "url", "https://apiok.ru" },
                },
                new Dictionary<string, object>
                {
                    { "type", "poll" },
                    { "question", "Do you like our API?" },
                    { 
                        "answers", 
                        new object[]
                        {
                            new Dictionary<string, object>
                            {
                                { "text", "Yes" },
                            },
                            new Dictionary<string, object>
                            {
                                { "text", "No" },
                            }
                        }
                    },
                    { "options", "SingleChoice,AnonymousVoting" },
                },
            };
            
            options.Add("media", media);
            break;
    }

    Bridge.social.CreatePost(options, OnCreatePostCompleted);
}

private void OnCreatePostCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Добавить в избранное #

Bridge.social.isAddToFavoritesSupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgama false
VK true
OK false
Yandex false
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    Bridge.social.AddToFavorites(OnAddToFavoritesCompleted);
}

private void OnAddToFavoritesCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Добавить на рабочий стол #

Bridge.social.isAddToHomeScreenSupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgama false
VK Android: true.
Desktop, iOS: false.
OK false
Yandex true / false
Доступность опции зависит от девайса игрока, внутренних правил браузера и ограничений платформы.
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    Bridge.social.AddToHomeScreen(OnAddToFavoritesCompleted);
}

private void OnAddToHomeScreenCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Оценить игру #

Bridge.social.isRateSupported

Поддерживается ли функционал на платформе.

Платформа Возможные значения
Playgama false
VK false
OK true
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    Bridge.social.Rate(OnRateCompleted);
}

private void OnRateCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}
Bridge.social.isExternalLinksAllowed

Разрешены ли внешние ссылки на платформе.

Платформа Возможные значения
Playgama false
VK true
OK false
Yandex false
Crazy Games true
Absolute Games false
Game Distribution false
VK Play false
Mock false

Лидерборды #

Поддержка #

Bridge.leaderboard.isSupported
Платформа Возможные значения
Playgama false
VK true*
OK false
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
⚠️ Предупреждение
* В VK с клиента можно только показать нативный popup, для всего остального потребуется свой сервер.

Нативный popup #

Bridge.leaderboard.isNativePopupSupported

Поддерживается ли нативный popup.

Платформа Возможные значения
Playgama false
VK Android, iOS, Mobile Web: true
Desktop: false
OK false
Yandex false
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "vk":
            options.Add("userResult", 42);
            options.Add("global", true);
            break;
    }

    Bridge.leaderboard.ShowNativePopup(options, OnShowNativePopupCompleted);
}

private void OnShowNativePopupCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Очки игрока #

Запись #

Bridge.leaderboard.isSetScoreSupported

Поддерживается ли запись очков игрока с клиента.

Платформа Возможные значения
Playgama false
VK false
OK false
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            options.Add("score", 42);
            options.Add("leaderboardName", "YOUR_LEADERBOARD_NAME");
            break;
    }

    Bridge.leaderboard.SetScore(options, OnSetScoreCompleted);
}

private void OnSetScoreCompleted(bool success)
{
    if (success)
    {
        // Операция прошла успешно
    }
    else
    {
        // Произошла ошибка
    }
}

Чтение #

Bridge.leaderboard.isGetScoreSupported

Поддерживается ли чтение очков игрока.

Платформа Возможные значения
Playgama false
VK false
OK false
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            options.Add("leaderboardName", "YOUR_LEADERBOARD_NAME");
            break;
    }

    Bridge.leaderboard.GetScore(options, OnGetScoreCompleted);
}

private void OnGetScoreCompleted(bool success, int score)
{
    if (success)
    {
        // Данные успешно получены
        Debug.Log(score);
    }
    else
    {
        // Что-то пошло не так
    }
}

Записи таблицы #

Bridge.leaderboard.isGetEntriesSupported

Поддерживается ли чтение полной таблицы.

Платформа Возможные значения
Playgama false
VK false
OK false
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false
private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            options.Add("leaderboardName", "YOUR_LEADERBOARD_NAME");
            options.Add("includeUser", true);
            options.Add("quantityAround", 10);
            options.Add("quantityTop", 10);
            break;
    }

    Bridge.leaderboard.GetEntries(options, OnGetEntriesCompleted);
}

private void OnGetEntriesCompleted(bool success, List<LeaderboardEntry> entries)
{
    if (success)
    {
        foreach (var entry in entries)
        {
            Debug.Log($"Entry: id = {entry.id}, name = {entry.name}, rank = {entry.rank}, score = {entry.score}");
            
            foreach (var photo in entry.photos)
            {
                Debug.Log($"Entry {entry.id} photo {photo}");
            }
        }
    }
}

Внутриигровые покупки #

Существуют два типа покупок — постоянные (например, отключение рекламы) и расходуемые (например, внутриигровые монеты).

Поддержка #

Bridge.payments.isSupported
Платформа Возможные значения
Playgama false
VK false
OK false
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false

Покупка #

private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            options.Add("id", "PURCHASE_ID");
            break;
    }
    
    Bridge.payments.Purchase(options, OnPurchaseCompleted);
}

private void OnPurchaseCompleted(bool success)
{
    Debug.Log(success);
}

Расходование #

private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            options.Add("purchaseToken", "PURCHASE_TOKEN");
            break;
    }
    
    Bridge.payments.ConsumePurchase(options, OnConsumePurchaseCompleted);
}

private void OnConsumePurchaseCompleted(bool success)
{
    Debug.Log(success);
}

Каталог всех товаров #

private void Start()
{
    Bridge.payments.GetCatalog(OnGetCatalogCompleted);
}

private void OnGetCatalogCompleted(bool success, List<PaymentsCatalogItemData> catalog)
{
    if (success)
    {
        foreach (var catalogItemData in catalog)
        {
            Debug.Log($"ID: {catalogItemData.id}");
            Debug.Log($"title: {catalogItemData.title}");
            Debug.Log($"description: {catalogItemData.description}");
            Debug.Log($"icon: {catalogItemData.icon}");
            Debug.Log($"price: {catalogItemData.price}");
            Debug.Log($"priceValue: {catalogItemData.priceValue}");
            Debug.Log($"priceCurrencyCode: {catalogItemData.priceCurrencyCode}");
        }
    }
}

Список купленных товаров #

private void Start()
{
    Bridge.payments.GetPurchases(OnGetPurchasesCompleted);
}

private void OnGetPurchasesCompleted(bool success, List<PaymentsPurchaseData> purchases)
{
    if (success)
    {
        foreach (var purchaseData in purchases)
        {
            Debug.Log($"ID: {purchaseData.id}");
            Debug.Log($"token: {purchaseData.token}");
        }
    }
}

Удаленная конфигурация #

С помощью удаленной конфигурации вы можете управлять настройками вашей игры не выпуская обновлений.

Поддержка #

Bridge.remoteConfig.isSupported
Платформа Возможные значения
Playgama false
VK false
OK false
Yandex true
Crazy Games false
Absolute Games false
Game Distribution false
VK Play false
Mock false

Загрузка значений #

private void Start()
{
    var options = new Dictionary<string, object>();
    
    switch (Bridge.platform.id)
    {
        case "yandex":
            var clientFeatures = new object[]
            {
                new Dictionary<string, object>
                {
                    { "name", "levels" },
                    { "value", "5" },
                }
            };
            
            options.Add("clientFeatures", clientFeatures);
            break;
    }
    
    Bridge.remoteConfig.Get(options, OnRemoteConfigGetCompleted);
}

private void OnRemoteConfigGetCompleted(bool success, List<RemoteConfigValue> data)
{
    if (success)
    {
        foreach (var remoteConfigItem in data)
        {
            Debug.Log($"name: {remoteConfigItem.name}, value: {remoteConfigItem.value}");
        }
    }
}
← Godot Defold →