Құжаттама / SDK
SAQA Games SDK v1
Ойын iframe ішінде іске қосылады және платформамен postMessage арқылы байланысады. SDK-ні тек платформаның мекенжайынан жүктеу керек — origin сол жерден анықталады.
Unity-де жасайсыз ба? Дайын C# плагині мен қадамдық нұсқаулық бар — Unity нұсқаулығын ашыңыз.
Қосу
index.html-ге бір скрипт тегін қосып, init() шақырыңыз. Ол Promise қайтарады.
<script src="https://saqa.app/sdk/v1.js"></script>
<script>
SaqaSDK.init().then(function (sdk) {
window.sdk = sdk;
console.log("Ойыншы:", sdk.player.isAuthorized() ? sdk.player.name : "қонақ");
sdk.features.LoadingAPI.ready(); // жүктелу экранын жабады
});
</script>Платформадан тыс ашылса (мысалы, жергілікті серверде) SDK 5 секундтан кейін авторизациясыз режимде қайтарылады — ойын бәрібір іске қосылады.
Өмірлік цикл
// Ресурстарды жүктеп жатқанда — 0-ден 1-ге дейінгі үлес:
sdk.features.LoadingAPI.setProgress(loaded / total);
// Ойын ресурстары жүктеліп, ойнауға дайын болғанда:
sdk.features.LoadingAPI.ready();
// Нақты ойын процесі басталғанда / тоқтағанда:
sdk.features.GameplayAPI.start();
sdk.features.GameplayAPI.stop();setProgress ойнатқыштағы жүктелу жолағын толтырады да, ойыншы нақты пайызды көреді. Оны шақырмасаңыз да жолақ көрінеді: платформа билдке шағын индикатор қосады, ол жүктелген мегабайт санын өзі есептейді.
Ойнау уақыты автоматты түрде есептеледі: ойын жүктеліп болғаннан кейін, бет ойыншыға көрініп тұрған уақыт саналады. Ойыншы басқа қолданбаға ауысса, санақ өзі тоқтайды.
GameplayAPI сол санақты дәлдеу үшін керек: stop() шақырсаңыз, мәзірде не кідірісте тұрған уақыт статистикаға қосылмайды, ал start() оны қайта қосады. Шақырмасаңыз да уақыт жиналады.
Ойыншы және бұлттық сақтау
sdk.player.isAuthorized(); // boolean
sdk.player.id; // string | null
sdk.player.name; // string | null
// Прогресті сақтау (әдепкі: бар деректермен біріктіріледі)
await sdk.player.setData({ level: 7, coins: 250 });
// Ауыстырып жазу
await sdk.player.setData({ level: 1 }, { merge: false });
// Оқу
const data = await sdk.player.getData(); // барлығы
const some = await sdk.player.getData(["level"]); // тек көрсетілгендер
// Сандық көрсеткіштер
await sdk.player.setStats({ wins: 3 });
const stats = await sdk.player.incrementStats({ wins: 1, deaths: 2 });Авторизациясыз ойыншыда бұл әдістер AUTH_REQUIRED кодымен қате береді. Ойын оны ұстап, жергілікті localStorage-ке сақтауы керек.
Лидербордтар
Лидербордты алдымен кабинетте құрыңыз, содан кейін оның техникалық атауымен шақырыңыз.
await sdk.leaderboards.setScore("score", 12500, "уақыт: 1:24");
const board = await sdk.leaderboards.getEntries("score", {
quantityTop: 20,
includeUser: true,
});
// board.entries → [{ rank, score, extraData, player: { id, name, avatarUrl } }]
// board.userEntry → ағымдағы ойыншының жазбасы (немесе null)Нәтиже нашарласа сервер жазбайды: рекорд тек жақсарады. Сұрыптау бағыты (үлкен/кіші мән жақсы) лидерборд параметрінде беріледі.
Жарнама
sdk.adv.showFullscreenAdv({
callbacks: {
onOpen: () => pauseGame(),
onClose: (wasShown) => resumeGame(),
onError: (err) => resumeGame(),
},
});
sdk.adv.showRewardedVideo({
callbacks: {
onRewarded: () => giveBonus(),
onClose: () => resumeGame(),
},
});Ағымдағы нұсқада жарнама — демонстрациялық блок (санақ таймері). Нақты жарнама желісін ойнатқыш деңгейінде жалғауға болады, ойын коды өзгермейді.
Авторизация
if (!sdk.player.isAuthorized()) {
try {
await sdk.auth.openAuthDialog();
// Ойыншы кіру бетіне өтеді
} catch (e) {
// Бас тартты — қонақ режимінде жалғастырамыз
}
}Экран және құрылғы
await sdk.screen.fullscreen.request();
await sdk.screen.fullscreen.exit();
sdk.deviceInfo.type; // "mobile" | "tablet" | "desktop"
sdk.deviceInfo.isMobile(); // boolean
sdk.environment.lang; // "kk"Қателерді өңдеу
try {
await sdk.player.setData({ level: 7 });
} catch (err) {
if (err.code === "AUTH_REQUIRED") {
saveLocally(); // қонақ режимі
} else {
console.warn(err.message);
}
}Кодтар: AUTH_REQUIRED, REQUEST_FAILED, UNKNOWN_METHOD, INTERNAL. Сұраныс 20 секундта жауап бермесе де қате лақтырылады.
Шектеулер мен қауіпсіздік
- • Бір ойынға сақталатын деректер: 256 КБ дейін (JSON).
- • Лидерборд ұпайы: 0 – 2 000 000 000 аралығындағы бүтін сан.
- • Ұпайды клиент жібереді, сондықтан бәсекелі ойындарда серверлік тексеру қажет — бұл платформа деңгейінде шешілмейді.
- • Ойын бөлек origin-де жүктеледі: платформаның cookie-і мен localStorage-і оған қолжетімсіз.
- • Барлық сұраныстар ойнатқыш беті арқылы жүреді — ойын ешқашан платформаның API-іне тікелей жүгінбейді.
