Награды API
Интеграция наград через SDK. Методы работы.
Список методов
Действия:
gp.rewards.give()
- выдать награду. +0-1 Requestgp.rewards.accept()
- принять награду и начислить бонусы. FREE
Свойства:
gp.rewards.list
- список наград. FREEgp.rewards.givenList
- список выданных наград. FREEgp.rewards.getReward()
- получить информацию о награде по ID или тегу. FREE
Проверки:
gp.rewards.has()
- проверить выдана ли награда. FREEgp.rewards.hasAccepted()
- проверить получена ли награда. FREEgp.rewards.hasUnaccepted()
- проверить есть ли выданная, но не полученная награда. FREE
События:
gp.rewards.on('give')
- подписаться на выдачу награды.gp.rewards.on('error:give')
- подписаться на ошибку при выдаче награды.gp.rewards.on('accept')
- подписаться на принятие награды.gp.rewards.on('error:accept')
- подписаться на ошибку при принятии награды.
Типы:
Reward
- поля награды.PlayerReward
- поля награды игрока.
Правила работы с наградами
Порядок работы с наградами:
- Выдать награду игроку. Вручную или через триггеры.
- Принять награду. Автоматически или вручную, например при клике на кнопку "получить".
- Автоматически начисляются бонусы.
- Сохранить игрока.
Так как консистентность данных и изменение переменных игрока обеспечиваются нами, нет необходимости в соблюдении жестких правил как при консумировании покупки.
Вы можете обозначить разные типы наград для себя, например: одноразовые и постоянные.
Пример одноразовой награды:
- Награда за вход
- Стартовый набор
- Премиум сундук
- Награда за достижение
Такие награды можно принимать сразу или оставить на ручное действие игрока.
Награды при принятии начисляются автоматически. Однако, если вы хотите добавить нестандартные изменения переменных, то вы можете сделать их, завязавшись на событие accepted
.
Например, вам нужно:
- Добавить предмет в инвентарь
- Изменить данные в JSON структуре
- Совершить другие манипуляции, не относящиеся к игроку или не поддерживаемые панелью управления.
Пример постоянной награды:
- Уникальный меч / скин / автомобиль
- VIP статус / отключение рекламы
- DLC / уровни / острова и другой разблокируемый контент
Постоянные награды не обязательно принимать. Как только награда была выдана - она будет всегда видна пользователю.
Правила проведения одноразовой награды с автоматическим принятием
Базовое
- JavaScript
- Unity
// 1. Выдаем награду
await gp.rewards.give({ tag: 'STARTER_PACK' });
// 2. Сработает автопринятие награды
// 3. Начислится награда
// 4. Сохраняем игрока на сервере
await gp.player.sync();
// 1. Выдаем награду
GP_Rewards.Give('STARTER_PACK');
// 2. Сработает автопринятие награды
// 3. Начислится награда
// 4. Сохраните игрока после начисления награды
С изменением нестандартных данных
На примере добавления в инвентарь зелий здоровья и маны:
- JavaScript
- Unity
// 1. Подписываемся на принятие награды
gp.rewards.on('accept', ({ reward }) => {
switch (reward.tag) {
case 'STARTER_PACK': {
// 2. Если нужно начисляем дополнительные награды
inventory.push({ item: 'HP_POTION', amount: 100 });
inventory.push({ item: 'MP_POTION', amount: 100 });
gp.player.set('inventory', JSON.stringify(inventory));
break;
}
}
// 3. Если нужно обновляем интерфейс, чтобы отобразить изменения переменных
myGame.refreshUI();
});
// 4. Выдаем награду
await gp.rewards.give({ tag: 'STARTER_PACK' });
// 5. Сработает автопринятие награды
// 6. Начислится награда
// 7. Вызовется событие accept
// 8. Сохраняем игрока на сервере
await gp.player.sync();
// 1. Подписываемся на принятие награды
private void OnEnable() => GP_Rewards.OnRewardsAccept += OnAccept;
public void OnAccept(AllRewardData result)
{
switch (result.reward.tag) {
case "STARTER_PACK": {
// 2. Если нужно начисляем дополнительные награды
break;
}
}
}
// 3. Выдаем награду
GP_Rewards.Give("STARTER_PACK");
// 4. Сработает автопринятие награды
// 5. Начислится награда
// 6. Вызовется событие accept
Допринятие наград при запуске игры
Иногда может быть такое, что игрок не успел принять награды и сохранить прогресс, например:
- Закрыл / перезагрузил вкладку, браузер или приложение
- Выключил / сломалось устройство
- Игра крашнулась
При заходе их нужно допринять.
Все непринятые награды с автопринятием SDK автоматически принимает при старте.
Важно. Мы не знаем в какой момент игра полностью загружена и вы готовы обработать начисления. Поэтому вызовите метод начала игры gp.gameStart()
, когда вы будете готовы к принятию наград. После вызова начала игры мы начислим награды, а вы заблаговременно можете подписаться на событие принятия наград.
Если у награды нет автопринятия - вы можете вручную допринять нужные вам награды при старте игры:
- JavaScript
- Unity
// Если нужна ручная обработка награды,
// то нужно !! сначала !! подписаться на событие принятия
gp.rewards.on('accept', ({ reward }) => {
// Действия при получении награды
});
const rewardsToAcceptOnStartup = [
'STARTER_PACK',
'LEVEL_10',
'LEVEL_20',
//...
];
rewardsToAcceptOnStartup.forEach((rewardTag) => {
const { reward, playerReward } = gp.reward.getReward(rewardTag);
// Такой награды не существует
if (!reward) {
return;
}
// Получаем количество непринятых наград
const unacceptedRewardsLeft = playerReward.countTotal - playerReward.countAccepted;
// Принимаем награды
for (let i = 0; i < unacceptedRewardsLeft; i++) {
gp.reward.accept(reward.id);
}
});
// Если нужна ручная обработка награды,
// то нужно !! сначала !! подписаться на событие принятия
private void OnEnable() => GP_Rewards.OnRewardsAccept += OnAccept;
public void OnAccept(AllRewardData result)
{
// Действия при получении награды
}
string[] rewardsToAcceptOnStartup = {
"STARTER_PACK",
"LEVEL_10",
"LEVEL_20",
//...
};
foreach(string rewardTag in rewardsToAcceptOnStartup)
{
AllRewardData data = GP_Rewards.GetReward(rewardTag);
// Такой награды не существует
if (!data.reward) {
return;
}
// Получаем количество непринятых наград
const unacceptedRewardsLeft = data.playerReward.countTotal - data.playerReward.countAccepted;
// Принимаем награды
for (int i = 0; i < unacceptedRewardsLeft; i++) {
GP_Rewards.Accept(data.reward.id);
}
}
Правила проведения постоянной награды
- JavaScript
- Unity
// 1. Выдаем награду
await gp.rewards.give({ tag: 'NOOB_SKIN' });
// 2. В нужный момент проверяется наличие награды
if (gp.rewards.has('NOOB_SKIN')) {
// сделать что-нибудь при наличии скина нубика
}
// 1. Выдаем награду
GP_Rewards.Give('NOOB_SKIN');
// 2. В нужный момент проверяется наличие награды
if (GP_Rewards.Has('NOOB_SKIN')) {
// сделать что-нибудь при наличии скина нубика
}
Действия
Выдать награду
+1 RequestЧтобы выдать награду игроку, вам необходимо передать ID или тег награды.
- JavaScript
- Unity
// По ID
gp.rewards.give({ id: 123 });
// По Тегу
gp.rewards.give({ tag: 'STARTER_PACK' });
// По ID
GP_Rewards.Give(123);
// По Тегу
GP_Rewards.Give('STARTER_PACK');
Вы можете выдать награду с отложенным сохранением. Она сохранится вместе с сохранением игрока.
FREE- JavaScript
- Unity
gp.rewards.give({ id: 123, lazy: true });
GP_Rewards.Give(123, true);
Метод возвращает награду и награду игрока:
- JavaScript
- Unity
const { reward, playerReward } = await gp.rewards.give({ id: 123 });
Реализовано в Unity через подписку на события
Принять награду
FREEПосле выдачи награды, ее можно принять и начислить изменения переменных.
- JavaScript
- Unity
// Принятие по ID
gp.rewards.accept({ id: 123 });
// Принятие по тегу
gp.rewards.accept({ tag: 'STARTER_PACK' });
// Принятие по ID
GP_Rewards.Accept(123);
// Принятие по тегу
GP_Rewards.Accept('STARTER_PACK');
Метод возвращает награду и награду игрока:
- JavaScript
- Unity
const { reward, playerReward } = await gp.rewards.accept({ id: 123 });
Реализовано в Unity через подписку на события
Свойства
Список наград
FREEВам доступен весь список наград сразу при запуске игры. См. поля награды.
- JavaScript
- Unity
gp.rewards.list.forEach((reward) => {
// reward.id
// reward.tag
// reward.name
// reward.description
// reward.isAutoAccept
// reward.mutations
});
RewardData[] rewardsData = GP_Rewards.List();
foreach (RewardData data in rewardsData)
{
Debug.Log("ID: " + data.id);
Debug.Log("Tag: " + data.tag);
Debug.Log("Name: " + data.name);
Debug.Log(" ");
}
Список выданных наград
FREEВам доступен весь список наград сразу при готовности игрока. См. поля награды игрока.
- JavaScript
- Unity
gp.rewards.givenList.forEach((playerReward) => {
// playerReward.rewardId
// playerReward.countTotal
// playerReward.countAccepted
});
PlayerReward[] playerRewards = GP_Rewards.GivenList();
foreach (PlayerReward data in playerRewards)
{
Debug.Log("Reward ID: " + data.rewardId);
Debug.Log("Count Total: " + data.countTotal);
Debug.Log("Count Accepted: " + data.countAccepted);
}
Получение информации о награде
FREEМетод возвращает награду и награду игрока:
- JavaScript
- Unity
// По ID
const { reward, playerReward } = gp.rewards.getReward(123);
// По Тегу
const { reward, playerReward } = gp.rewards.getReward('STARTER_PACK');
// Награды может не существовать, убедитесь, что она есть
if (reward) {
console.info(reward.id, playerReward.countTotal);
}
// По ID или по тегу
AllRewardData allData = GP_Rewards.GetReward('STARTER_PACK');
RewardData data = allData.reward;
Debug.Log("ID: " + data.id);
Debug.Log("Tag: " + data.tag);
Debug.Log("Name: " + data.name);
Debug.Log("Description: " + data.description);
Debug.Log("Icon: " + data.icon);
Debug.Log("Icon small: " + data.iconSmall);
Debug.Log("is Auto Accept: " + data.isAutoAccept);
Debug.Log("Mutations: ");
foreach (DataMutation mutation in data.mutations)
{
Debug.Log(" Type: " + mutation.type);
Debug.Log(" Key: " + mutation.key);
Debug.Log(" Action: " + mutation.action);
Debug.Log(" Value: " + mutation.value);
}
Проверки
Награда выдана
gp.rewards.has(idOrTag)
FREE
- JavaScript
- Unity
// По ID
const hasReward = gp.rewards.has(123);
// По Тегу
const hasReward = gp.rewards.has('STARTER_PACK');
// Проверка
if (hasReward) {
// есть награда STARTER_PACK
}
// По ID
bool hasReward = GP_Rewards.Has(123);
// По Тегу
bool hasReward = GP_Rewards.Has('STARTER_PACK');
// Проверка
if (hasReward) {
// есть награда STARTER_PACK
}
Награда принята
gp.rewards.hasAccepted(idOrTag)
FREE
- JavaScript
- Unity
// По ID
const hasAcceptedReward = gp.rewards.hasAccepted(123);
// По Тегу
const hasAcceptedReward = gp.rewards.hasAccepted('STARTER_PACK');
// Проверка
if (hasAcceptedReward) {
// награда STARTER_PACK принята
}
// По ID
bool hasAcceptedReward = GP_Rewards.HasAccepted(123);
// По Тегу
bool hasAcceptedReward = GP_Rewards.HasAccepted('STARTER_PACK');
// Проверка
if (hasAcceptedReward) {
// награда STARTER_PACK принята
}
Награда выдана, но не получена
gp.rewards.hasUnaccepted(idOrTag)
FREE
- JavaScript
- Unity
// По ID
const hasUnacceptedReward = gp.rewards.hasUnaccepted(123);
// По Тегу
const hasUnacceptedReward = gp.rewards.hasUnaccepted('STARTER_PACK');
// Проверка
if (hasUnacceptedReward) {
// награда STARTER_PACK получена, но не принята
}
// По ID
bool hasUnacceptedReward = GP_Rewards.HasUnaccepted(123);
// По Тегу
bool hasUnacceptedReward = GP_Rewards.HasUnaccepted('STARTER_PACK');
// Проверка
if (hasUnacceptedReward) {
// награда STARTER_PACK получена, но не принята
}
События
Награда выдана
Коллбек возвращает награду и награду игрока:
- JavaScript
- Unity
gp.rewards.on('give', ({ reward, playerReward }) => {
// доступны награда и награда игрока
});
//Подписаться на событие
private void OnEnable()
{
GP_Rewards.OnRewardsGive += OnGive;
}
//Отписаться от события
private void OnDisable()
{
GP_Rewards.OnRewardsGive -= OnGive;
}
//Обработать событие
public void OnGive(AllRewardData result)
{
Debug.Log("Give reward: " + result.reward);
Debug.Log("Player reward: " + result.playerReward);
}
Не удалось выдать награду
Коллбек возвращает ошибку. См. коды ошибок:
- JavaScript
- Unity
gp.rewards.on('error:give', (err) => {
// обработать ошибки
});
//Подписаться на событие
private void OnEnable()
{
GP_Rewards.OnRewardsGiveError += OnGiveError;
}
//Отписаться от события
private void OnDisable()
{
GP_Rewards.OnRewardsGiveError -= OnGiveError;
}
//Обработать событие
public void OnGiveError(string error)
{
Debug.Log("Give error: " + error);
}
Награда принята
Коллбек возвращает награду и награду игрока:
- JavaScript
- Unity
gp.rewards.on('accept', ({ reward, playerReward }) => {
// доступны награда и награда игрока
});
//Подписаться на событие
private void OnEnable()
{
GP_Rewards.OnRewardsAccept += OnAccept;
}
//Отписаться от события
private void OnDisable()
{
GP_Rewards.OnRewardsAccept -= OnAccept;
}
//Обработать событие
public void OnAccept(AllRewardData result)
{
Debug.Log("Accept reward: " + result.reward);
Debug.Log("Player reward: " + result.playerReward);
}
Не удалось принять награду
Коллбек возвращает ошибку. См. коды ошибок:
- JavaScript
- Unity
gp.rewards.on('error:accept', (err) => {
// обработать ошибки
});
//Подписаться на событие
private void OnEnable()
{
GP_Rewards.OnRewardsAcceptError += OnAcceptError;
}
//Отписаться от события
private void OnDisable()
{
GP_Rewards.OnRewardsAcceptError -= OnAcceptError;
}
//Обработать событие
public void OnAcceptError(string error)
{
Debug.Log("Accept error: " + error);
}
Типы
Поля награды
Поле | Тип | Описание | Пример |
---|---|---|---|
id | number | ID награды | 115 |
tag | string | Тег для помощи при выборе. Вы можете использовать его вместо ID | VIP |
name | string | Название, переведенное на язык пользователя | VIP Статус |
description | string | Описание, переведенное на язык пользователя | Без рекламы, награда x2 |
icon | string | Ссылка на иконку размером 256x256 | Пример ссылки |
iconSmall | string | Ссылка на иконку размером 64x64 | Пример ссылки |
mutations | DataMutation[] | Список изменений переменных | [] |
isAutoAccept | boolean | Автопринятие награды | true |
Поля награды игрока
Поле | Тип | Описание | Пример |
---|---|---|---|
rewardId | number | ID Награды | 115 |
countTotal | number | Количество выданных наград | 23 |
countAccepted | number | Количество принятых наград | 12 |
Поля мутации данных
DataMutation
Поле | Тип | Описание | Пример |
---|---|---|---|
type | MutationType | Тип мутации | PLAYER_FIELD |
key | string | Ключ переменной для мутации | score |
action | MutationAction | Тип действия в мутации | ADD |
value | number / string / boolean | Изменяемое значение | 100 |
Пример структуры:
const mutation: DataMutation = {
type: MutationType.PLAYER_FIELD,
key: 'score',
action: MutationAction.ADD,
value: 100,
};
// Будет эквивалентно записи:
gp.player.add('score', 100);
Типы мутации данных
MutationType
Тип | Описание |
---|---|
PLAYER_FIELD | Мутация полей игрока |
Типы действий при мутации данных
MutationAction
Тип | Описание |
---|---|
ADD | Добавление значения к полю |
REMOVE | Вычитание из поля / удаление поля |
SET | Установка значения поля |
Коды ошибок
Ошибка | Описание ошибки |
---|---|
player_not_found | Игрок не найден |
empty_id_or_tag | Передан пустой ID или тег награды |
reward_not_found | Награда с таким ID или тегом не найдена |
undefined | Непредвиденная ошибка (смотрите консоль) |
Оставайтесь на связи
С другими разделами документации вы можете ознакомиться здесь. Для начала работы вы можете ознакомиться с нашими туториалами.
Сообщество GamePush в Telegram
: @gs_community.
Для ваших обращений e-mail
: [email protected]
Желаем вам успехов!