Перейти к основному содержимому

Добавление плагина в проект Defold

Установка​

Вы можете использовать его в своем собственном проекте, добавив github проект в качестве зависимости библиотеки Defold.

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

В файл game.project необходимо добавить раздел gamepush и указать id и token игры, остальные параметры можно опустить:

[gamepush]
id = идентификатор игры
token = токен
description = There are not enough words to describe the awesomeness of the game
image = /img/ogimage.png

Дополнительные параметры: (doc)

Для начала необходимо инициализировать GamePush SDK с помощью метода init:

local gamepush = require("gamepush.gamepush")

gamepush.init(function(success)
if success then
-- инициализация прошла успешно
else
-- ошибка инициализации
end
end)

Для подписки на событие необходимо определить соответствующий метод таблицы callbacks:

local gamepush = require("gamepush.gamepush")

local function ads_start()
-- выключаем звук
end

local function ads_close(success)
-- включаем звук
end

local function ads_reward()
-- подкидываем золотишка игроку
end

-- функции событий можно назначить до инициализации SDK
gamepush.ads.callbacks.start = ads_start
gamepush.ads.callbacks.close = ads_close
gamepush.ads.callbacks.rewarded_reward = ads_reward
-- инициализация SDK
gamepush.init(function(success)
if success then
-- показываем прелоадер
gamepush.ads.show_preloader(function(result)
-- реклама закрыта, можно что-то делать
end)
-- что то делаем еще

-- показываем рекламу за вознаграждение
gamepush.ads.show_rewarded_video()

-- показываем рекламу за вознаграждение с использованием колбека
gamepush.ads.show_rewarded_video(function(result)
if result then
-- подкидываем игроку кристаллов
end
end)
else
-- ошибка инициализации
end
end)

Список всех методов​

Подробнее со списком всех методов можно ознакомиться по ссылке.

Вызов нативных методов платформы​

Для вызова нативного метода, получения объекта или поля предназначена функция call_native_sdk(method, parameters, callback).

  • method: строка, путь до метода, объекта или поля разделенного точками. Если указан путь до объекта или поля объекта, то parameters и callback будет проигнорирован.
  • parameters: параметр вызываемого метода (string, number, boolean, table). Если необходимо передать несколько параметров, то параметры необходимо поместить в массив (таблицу). Порядок параметров определяется индексом массива. Не поддерживается передача функций в качестве параметров!
  • callback: функция обратного вызова, необходимо указывать, если нативный метод возвращает промис. Если callback == nil, то функция возвращает результат, иначе nil.

Результат возвращаемый функцией формируется по правилам:

  1. Параметр method ссылается на объект или поле объекта:
  • Если результат string, number, boolean или объект, то возвращаются полученные данные.
  • В случае если произошло исключение, то данные об ошибке возвращаются в виде таблицы { error = "error description" }.
  1. Параметр method ссылается на функцию:
  • Если результат string, number, boolean или объект, то возвращаются полученные данные.
  • В случае если произошло исключение, или промис завершился ошибкой, то данные об ошибке возвращаются в виде таблицы { error = "error description" }.

callback(result): result - результат выполнения промиса, если промис завершился ошибкой, то result = { error = "error description" }.

Расширенные действия с промисами​

Бывают ситуации, когда промис возвращает объект с функциями, которые может потребоваться выполнить позже. Для этих ситуаций предусмотрен механизм сохранения объекта на уровне JS и дальнейшего его использования при следующих вызовах API.

В этих случаях формат параметра method для функции call_native_sdk может принимать вид:

  • var=path1.path2.path3: объект path1.path2.path3 будет сохранен в переменную var
  • var:method: вызов метода из ранее сохраненного объекта
  • var2=var:method2: вызов метода (необходимо что-бы он был промисом) из ранее сохраненного объекта и сохранение результата в переменной var2

Примеры различных вариантов вызова​

Запрос к СДКТипВызов функции и результат
environmentobjectcall_native_sdk("environment")
table
environment.i18n.langstringcall_native_sdk("environment.i18n.lang")
string
envundefinedcall_native_sdk("env")
{ error = 'Field or function "env" not found!' }
player.getUniqueID()functioncall_native_sdk("player.getUniqueID")
string
feedback.canReview()functioncall_native_sdk("feedback.canReview", nil, callback)
nil
После завершения промиса будет вызван callback.
getLeaderboards().then(lb => )functioncall_native_sdk("lb=getLeaderboards", nil, callback)
nil
После завершения промиса будет вызван callback.
Результат будет сохранен в переменной JS.
lb.setLeaderboardScore()functioncall_native_sdk("lb:setLeaderboardScore")
После завершения промиса будет вызван callback.
При вызове функции будет обращение к ранее сохраненной переменной JS, если она не найдена функция вернет { error = "The 'lb' object has not been previously saved!" }

Пример нативной работы с платформой Yandex:​

local gamepush = require("gamepush.gamepush")

gamepush.init(function(result)
if result then
-- Получить переменные окружения Яндекса, эквивалент ysdk.environment
local environment = gamepush.platform.call_native_sdk("environment")

-- Получить язык интерфейса Яндекс.Игр в формате ISO 639-1, эквивалент ysdk.environment.i18n.lang
local language = gamepush.platform.call_native_sdk("environment.i18n.lang")

-- Получить таблицы лидеров, эквивалент ysdk.getLeaderboards()
-- промис возвращает объект, сохраним его в переменную lb
gamepush.platform.call_native_sdk("lb=getLeaderboards", nil, function(leaderboards)
pprint(leaderboards)
-- Запись нового рекорда, эквивалент lb.setLeaderboardScore('leaderboard2021', 120);
-- будем обращаться к переменной lb
gamepush.platform.call_native_sdk("lb:setLeaderboardScore", { "leaderboard2021", 120 })
-- Получить данные таблицы лидеров, эквивалент lb.getLeaderboardEntries('leaderboard2021')
gamepush.platform.call_native_sdk("lb:getLeaderboardEntries", "leaderboard2021", nil, function(result)
pprint(result)
end)

-- Получить данные таблицы лидеров с параметрами
-- эквивалент lb.getLeaderboardEntries('leaderboard2021', {quantityTop: 10, includeUser: true, quantityAround: 3})
local parameters = {
"leaderboard2021",
{ quantityTop = 10, includeUser = true, quantityAround = 3 }
}
gamepush.platform.call_native_sdk("lb:getLeaderboardEntries", parameters, function(result)
pprint(result)
end)
end)
end
end)

Представленный выше код эквивалентен коду JS:

YaGames.init().then((ysdk) => {
// Получить переменные окружения Яндекса
let environment = ysdk.environment;

// Получить язык интерфейса Яндекс.Игр в формате ISO 639-1
let language = ysdk.environment.i18n.lang;

// Получить таблицы лидеров
ysdk.getLeaderboards().then(function (lb) {
console.log(lb);
// Запись нового рекорда
lb.setLeaderboardScore('leaderboard2021', 120);
// Получить данные таблицы лидеров
lb.getLeaderboardEntries('leaderboard2021').then(function (result) {
console.log(result);
});

// Получить данные таблицы лидеров с параметрами
let parameters = { quantityTop: 10, includeUser: true, quantityAround: 3 };
lb.getLeaderboardEntries('leaderboard2021', parameters).then(function (result) {
console.log(result);
});
});
});

Заглушка для других платформ, отличных от html​

Для платформ отличных от html предусмотрены заглушки для удобства отладки.

При использовании функций:

  • player.get(key)
  • player.set(key, value)
  • player.add(key, value)
  • player.toggle(key)
  • player.has(key)
  • player.to_json()
  • player.from_json(player)

данные будут сохраняться/считываться с помощью sys.save()/sys.load() локально в/из файла "gamepush.dat" (можно поменять)

local mock_api = require("gamepush.mock_api")

-- установим имя для файла локального хранилища данных
mock_api.file_storage = "my_storage.dat"

-- установка параметров "заглушек"
mock_api["player.name"] = "my player name"
mock_api["player.id"] = 625
mock_api["player.score"] = 500

Каждая функция-заглушка GamePush API может быть представлена данными или функцией выполняющее действие и/или возвращающая данные. Любые функции/данные можно переопределять для удобства работы/отладки.

Заглушка для нативных вызовов​

Заглушки для нативных вызовов выделены в отдельный модуль, чтобы его подключить используйте функцию set_native_api

--native_api.lua
local M = {}

M["environment"] = {
app = {
id = "app_id"
},
browser = {
lang = "ru"
},
i18n = {
lang = "ru",
tld = "ru"
}
}

return M
local mock = require("gamepush.mock")
local native_api = require("native_api")
local gamepush = require("gamepush.gamepush")

-- Устанавливаем заглушку для нативных функций
mock.set_native_api(native_api)
-- Обращаемся к нативной функции
local result = gamepush.platform.call_native_sdk("environment")
pprint(result)

Автор: Megalanthus

Оставайтесь на связи​

С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.

Сообщество GamePush в Telegram: @gs_community.

Для ваших обращений e-mail: official@gamepush.com

Желаем вам успехов!