@agru/sdk
Мост между iframe игры и ag.ru
Установка
npm i @agru/sdk
yarn add @agru/sdk
pnpm add @agru/sdk
Установка используя CDN
Внимание
Скрипт необходимо вставить перед вашим основным скриптом игры!
<script src="https://unpkg.com/@agru/sdk/dist/umd/index.min.js"></script>
Начало работы
import { AgRuSdk } from '@agru/sdk';
const sdk = new AgRuSdk({
});
Используя CDN версию, класс AgRuSdk
доступен глобально.
const sdk = new AgRuSdk({
});
API
Параметры, которые ag.ru автоматически передает в настройки.
app_id
- Идентификатор игрыauth_key
- Зашифрованная строка в HMAC SHA256 16-бит: "{app_id}._.{player_id}._.{game_sid}"
game_sid
- Идентификатор игровой сессииinvite
- Идентификатор приглашения игрока, если передать в ссылке к игре: https://ag.ru/games/my-game?invite=xxx
player_id
- Идентификатор игрока
options
Объект с настройками SDK.
{
app_id: string;
auth_key: string;
invite: string;
game_sid: string;
player_id: string;
}
Методы SDK
enum AgRuSdkMethods {
Authorize = 'agru-authorize',
GetSaveData = 'agru-getSaveData',
GetUsers = 'agru-getUsers',
IsAppUser = 'agru-isAppUser',
SayHello = 'agru-sayHello',
ShowCampaign = 'agru-showCampaign',
ShowPayment = 'agru-showPayment',
SetSaveData = 'agru-setSaveData',
ToggleFullscreen = 'agru-toggleFullscreen',
}
authorize
Вызвать диалоговое окно авторизации.
Метод вернет ответ, как только окно авторизации откроется, не дожидаясь самой авторизации!
const [[data, error]] = await sdk.authorize();
или
sdk.authorize(([data, error]) => {
});
Пример ответа:
true
authorizeAndWait
Вызвать диалоговое окно авторизации и ждать ответа.
const [[data, error]] = await sdk.authorizeAndWait();
или
sdk.authorizeAndWait(([data, error]) => {
});
Пример ответа:
true
getSaveData
Получить игровые данные пользователя с сервера.
const [[data, error]] = await sdk.getSaveData();
или
sdk.getSaveData(([data, error]) => {
});
Пример ответа:
{
"ключ": "значение"
}
getUsers
Получить информацию о пользователях.
Необходимо передать массив ID
пользователей (максимум 10).
const [[data, error]] = await sdk.getUsers(['aa6b41ff51004c3890321606db6d4c69', '33c1c11404fcda000000000', '56bc75e2d63100000']);
или
sdk.getUsers(['aa6b41ff51004c3890321606db6d4c69', '33c1c11404fcda000000000', '56bc75e2d63100000'], ([data, error]) => {
});
Пример ответа:
{
avatar: string;
fullname: string;
id: number;
username: string;
}
isAppUser
Относится ли пользователь к данной игре.
Необходимо передать ID
пользователя.
const [[data, error]] = await sdk.isAppUser(1001);
или
sdk.isAppUser(1001, ([data, error]) => {
});
Пример ответа:
true;
off
Перестать слушать событие и обрабатывать.
Необходимо передать ключ метода или ключ события и обработчик.
import { AgRuSdkMethods } from '@agru/sdk';
function handleHello((data, error) => {
if (data == 42) {
sdk.off(AgRuSdkMethods.SayHello, handleHello); // перестаем слушать.
}
})
sdk.on(AgRuSdkMethods.SayHello, handleHello);
или используя CDN версию
function handleHello((data, error) => {
if (data == 42) {
sdk.off(AgRuSdkMethods.SayHello, handleHello); // перестаем слушать.
}
})
sdk.on(AgRuSdkMethods.SayHello, handleHello);
on
Слушать событие и обрабатывать.
Необходимо передать ключ метода или ключ события и обработчик.
import { AgRuSdkMethods } from '@agru/sdk';
sdk.on(AgRuSdkMethods.SayHello, (data, error) => {
});
или используя CDN версию
sdk.on(AgRuSdkMethods.SayHello, (data, error) => {
});
Возвращает метод отписки от прослушивания события.
const unlistenHello = sdk.on(AgRuSdkMethods.SayHello, (data, error) => {
});
sdk.on(AgRuSdkMethods.SayHello, (data, error) => {
});
unlistenHello()
once
Слушать событие и обработать один раз.
Необходимо передать ключ метода или ключ события и обработчик.
import { AgRuSdkMethods } from '@agru/sdk';
sdk.once(AgRuSdkMethods.SayHello, (data, error) => {
});
или используя CDN версию
sdk.once(AgRuSdkMethods.SayHello, (data, error) => {
});
sayHello
Вывести приветственную фразу. Показывает, что инициализация прошла успешно.
const [[data, error]] = await sdk.sayHello();
или
sdk.sayHello(([data, error]) => {
});
Пример ответа:
"And here's Johnny";
showCampaign
Показать рекламную кампанию.
const [[data, error]] = await sdk.showCampaign('default');
или
sdk.showCampaign('default', ([data, error]) => {
});
Пример ответа:
{
status: true,
type: 'default',
};
Показать мотивированную рекламу (rewarded video).
const [[data, error]] = await sdk.showCampaign('rewarded');
или
sdk.showCampaign('rewarded', ([data, error]) => {
});
Пример ответа:
{
reward: false,
status: true,
type: 'rewarded',
};
Пример отслеживания состояния:
let isCampaignVisible = false;
sdk.on(AgRuSdkMethods.ShowCampaign, ({ status, type }) => {
if (type === 'rewarded') {
}
isCampaignVisible = status;
});
sdk.showCampaign('default');
sdk.showCampaign('rewarded');
showPayment
Показать окно оплаты.
const [[data, error]] = await sdk.showPayment('token');
или
sdk.showPayment('token', ([data, error]) => {
});
Пример ответа:
{
info: {
status: 'delivering',
email: 'vasya.pupkin@mail.ru',
invoice: 9999999999,
virtualCurrencyAmount: null,
userId: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
discount: null
},
status: true,
};
Пример отслеживания состояния:
let isPaymentVisible = false;
sdk.on(AgRuSdkMethods.ShowPayment, ({ info, status }) => {
isPaymentVisible = status;
if (status) {
return;
}
if (info == null) {
return;
}
if (info.invoiceId) {
}
});
sdk.showPayment('token');
setSaveData
Сохранить игровые данные пользователя на сервер.
const [[data, error]] = await sdk.setSaveData({
ключ: 'значение',
});
или
sdk.setSaveData(
{
ключ: 'значение',
},
([data, error]) => {
}
);
Пример ответа:
true;
toggleFullscreen
Переключить режим полного экрана.
await sdk.toggleFullscreen();
или
sdk.toggleFullscreen();
Пример ответа:
true;
События SDK
enum AgRuSdkEvents {
OptionsUpdates = 'agru-optionsUpdates',
}
OptionsUpdates
Вызывается, когда AG обновляет параметры игры в реальном времени, к примеру после авторизации.
Пример использования:
const state = {
user: { ... },
};
sdk.on(AgRuSdkEvents.OptionsUpdates, async (newOptions) => {
sdk.options = { ...sdk.options, ...newOptions };
if (sdk.options.player_id == state.user.id) {
return;
}
const [[data]] = await sdk.getUsers([sdk.options.player_id]);
state.user = data[0];
});