Шаг 1
Родительская страница загружает iframe
На вашем сайте отображается iframe, указывающий на /embed/{gameSlug}/frame/ с tenantId и необязательными параметрами запроса mode или campaignId.
Embed API документы
Начните с демонстрации в реальном времени, понаблюдайте за событиями на родительской странице, затем скопируйте шаблоны iframe и обработчика событий на свой сайт. Этот же алгоритм работает для всех игр Games I Know и iframe.
Получите ключ embedСделайте ход в Tic Tac Toe iframe. В журнале событий отображаются GAME_STARTED, события игрового процесса и данные о завершении точно так, как их получает родительская страница.
Контракт на проведение мероприятия в масштабах всей платформы
Games I Know отправляет события embed для каждой игры на платформе: Tic Tac Toe, Four in a Row, Bingo и I Know сегодня, а также для каждой новой игры, доступной для embed, которую мы добавим в будущем. Вам не нужна отдельная интеграция для каждой игры. Создайте один обработчик событий для родительской страницы на основе стандартного контракта (готовность, GAME_STARTED, события игрового процесса, завершение с данными о победителе и подписанные результаты) и используйте его для всех текущих и будущих игр embed.
Используйте этот путь, если вы уже знаете, где игра должна отображаться на вашем сайте.
Добавьте домен веб-сайта, на котором будет размещен iframe.
Перейти к шагуИспользуйте /embed/{gameSlug}/frame/ с вашим tenantId. Не используйте iframe для SEO-целевой страницы.
Перейти к шагуОтфильтруйте данные по параметру data.source === "gamesiknow", затем обработайте события GAME_STARTED, GAME_COMPLETED и version 1.
Перейти к шагуПеред предоставлением кредитов, наград или разблокировок отправьте resultId и signedToken на свой бэкэнд.
Перейти к шагуИспользуйте свой реальный идентификатор арендатора (tenantId) из партнерской панели управления.
<iframe
src="https://gamesiknow.com/embed/tic-tac-toe/frame/?tenantId=YOUR_TENANT_ID"
title="Tic Tac Toe by Games I Know"
width="100%"
height="640"
style="border:0;border-radius:16px;max-width:420px;display:block;margin:0 auto;"
loading="lazy"
allow="fullscreen"
referrerpolicy="no-referrer-when-downgrade"
allowfullscreen
></iframe>Games I Know embed - это изолированный iframe на вашем домене. Он проверяет ваш арендатор и домен на соответствие API, а затем взаимодействует с вашей родительской страницей через window.postMessage.
Шаг 1
На вашем сайте отображается iframe, указывающий на /embed/{gameSlug}/frame/ с tenantId и необязательными параметрами запроса mode или campaignId.
Шаг 2
iframe вызывает GET /embed/config (или /api/embed/config). Games I Know проверяет вашу партнерскую учетную запись, разрешенный домен, доступ к игре и квоту AI. На стороне сервера регистрируется событие embed_loaded analytics.
Шаг 3
Объект iframe отправляет событие готовности на родительскую страницу, что позволяет отображать состояние загрузки или изменять размер фрейма с помощью payload.embedHeight.
Шаг 4
Когда начинается игровой процесс, каждая игра embeddable отправляет GAME_STARTED на родительскую страницу и автоматически записывает game_started на стороне сервера. Вы не вызываете никакие аналитические инструменты API со своего веб-сайта.
Шаг 5
Во время матча игровые события версии 1, такие как перемещение и смена режима, обновляют ваш пользовательский интерфейс или внутреннюю аналитику.
Шаг 6
По завершении каждая игра embeddable отправляет родительскому элементу сообщение GAME_COMPLETED с результатом, победителем и игроками, чтобы ваша страница могла немедленно отобразить результаты. iframe также подписывает результат с помощью POST /embed/results и включает resultId и signedToken в GAME_COMPLETED, если подписание прошло успешно. Ваш бэкэнд может проверить эти токены с помощью ключа партнерского сервера перед начислением наград.
Два формата postMessage
События жизненного цикла использовать плоский предмет с event: "GAME_STARTED" or event: "GAME_COMPLETED". Игровые события обертывание данных в version: 1 с вложенными payload. Всегда включать фильтр data.source === "gamesiknow".
В большинстве случаев интеграция состоит из четырех шагов: регистрация домена, генерация токена, установка iframe, а затем отслеживание событий начала и завершения.
Добавьте все домены, которые будут размещать Games I Know embed. Домены нормализованы, поэтому example.com и www.example.com обрабатываются согласованно.
Создайте отдельный токен embed для каждого веб-сайта. Это позволит поддерживать чистоту аналитики и подготовит учетную запись к будущему ценообразованию на основе домена.
Скопируйте iframe или адаптивную обертку в пользовательский HTML-блок вашей CMS, область embed в конструкторе сайтов или пользовательский шаблон внешнего интерфейса.
Обрабатывайте события postMessage GAME_STARTED и GAME_COMPLETED на родительской странице, чтобы отображать состояние матча и информацию о победителе. Перед начислением наград проверяйте подписанные результаты с помощью ключа партнерского сервера на вашем бэкэнде.
Ширина
Используйте значение 100%, чтобы embed заполнил столбец доступного содержимого.
Высота
640 пикселей для большинства игр. Tic Tac Toe также работает при 600 пикселях. Используйте payload.embedHeight из событий готовности для автоматического изменения размера.
Игры
Используйте /embed/tic-tac-toe/frame/, /embed/four-in-a-row/frame/, /embed/bingo/frame/ или /embed/i-know/frame/.
Режим
Опустите параметр mode для выбора игрока или передайте mode=ai, если хотите, чтобы embed сначала запросил AI.
Игрок выбирает тип матча внутри игры, когда квота AI доступна.
<iframe
src="https://gamesiknow.com/embed/tic-tac-toe/frame/?tenantId=TENANT_ID"
width="100%"
height="640"
style="border:0;border-radius:16px;max-width:420px;display:block;margin:0 auto;"
allow="fullscreen"
loading="lazy"
title="Tic Tac Toe by Games I Know"
></iframe>Сначала запрашивает AI. При исчерпании квоты молча переключается на PvP.
<iframe
src="https://gamesiknow.com/embed/tic-tac-toe/frame/?tenantId=TENANT_ID&mode=ai&campaignId=homepage-widget"
width="100%"
height="640"
style="border:0;border-radius:16px;max-width:420px;display:block;margin:0 auto;"
allow="fullscreen"
loading="lazy"
title="Tic Tac Toe vs AI by Games I Know"
></iframe>URL-адреса фреймов используют /embed/{gameSlug}/frame/. Целевые SEO-страницы без игрового процесса доступны по адресу /embed/{gameSlug}/.
| Параметр | Необходимый | Описание |
|---|---|---|
| tenantId | Да | Идентификатор вашего партнера из партнерской панели Games I Know. Также принимается в качестве partnerId для устаревших интеграций. |
| режим | Нет | Установите значение AI, чтобы запросить принудительный режим AI. Правила квот и доменов на стороне сервера по-прежнему применяются. При недоступности режима AI происходит переключение на режим «игрок против игрока». |
| campaignId | Нет | Дополнительная метка кампании отображается в событиях postMessage и сохраняется в партнерской аналитике для A/B-тестирования или сегментации на уровне страниц. |
Тот же договор применяется к Tic Tac Toe, Four in a Row, Bingo, I Know и предстоящим выпускам embed.
Правило 1
Источник фильтра
Сообщения следует игнорировать, если data.source не равен gamesiknow.
Правило 2
Управление жизненным циклом
Используйте GAME_STARTED и GAME_COMPLETED для отображения состояния матча, имени победителя и результата.
Правило 3
Подтвердите получение награды
Перед начислением вознаграждений перед отправкой resultId и signedToken на ваш бэкэнд.
| Событие | Когда он выстрелит | Формат | Ключевые области |
|---|---|---|---|
| готовый | Embed инициализирован и конфигурация загружена. | Игровой процесс (версия 1) доступен для всех игр, а для некоторых оболочек жизненного цикла - в плоском варианте. | matchId, режим, embedHeight |
| GAME_STARTED | Каждая игра embeddable (текущая и будущая). Срабатывает при начале матча (например, при первом ходу или начале раунда AI). | Плоский жизненный цикл | игра, PartnerId, CampaignId, Mode, MatchId (неявно через поток игрового процесса) |
| ИГРА ЗАВЕРШЕНА | Каждая игра, доступная по протоколу embeddable, завершается по окончании матча. Включает результат, победителя, winnerPlayerName и игроков, чтобы родительская страница могла немедленно отобразить результаты. Также включает resultId и signedToken, если подписание на стороне сервера прошло успешно. | Плоский жизненный цикл | результат, победитель, winnerPlayerName, winnerPlayerId, игроки, счет, durationSeconds, resultId, signedToken |
| EMBED_FULLSCREEN_CHANGE | Плеер переключает режим полноэкранного режима в embed. | Плоский жизненный цикл | payload.active логическое значение |
Форма: { source, game, version: 1, event, payload }
Каждый пост игры embeddable GAME_COMPLETED к родителю с outcome, winner, и players Когда матч заканчивается. Когда подписание контракта проходит успешно. GAME_COMPLETED также включает resultId и signedToken для проверки на стороне сервера.
{
"source": "gamesiknow",
"event": "GAME_STARTED",
"game": "tic-tac-toe",
"partnerId": "partner_your_tenant",
"campaignId": "homepage-widget",
"mode": "ai"
}{
"source": "gamesiknow",
"event": "GAME_COMPLETED",
"game": "tic-tac-toe",
"resultId": "res_abc123xyz",
"partnerId": "partner_your_tenant",
"campaignId": "homepage-widget",
"status": "completed",
"outcome": "player_1",
"score": 100,
"durationSeconds": 24,
"winnerPlayerId": "player_1",
"winnerPlayerName": "Player X",
"winner": {
"playerId": "player_1",
"participant": "player_1",
"type": "human",
"label": "Player 1",
"name": "Player X",
"score": 100
},
"players": [
{
"playerId": "player_1",
"participant": "player_1",
"type": "human",
"label": "Player 1",
"name": "Player X",
"score": 100,
"status": "winner"
},
{
"playerId": "player_2",
"participant": "ai_bot",
"type": "ai",
"label": "AI BOT",
"name": "AI Bot",
"score": 60,
"status": "lost"
}
],
"signedToken": "eyJ..."
}игрок_1
Победу одержал первый игрок-человек.
игрок_2
Победу одержал второй игрок-человек.
ai_bot
AI противник победил.
рисовать
Победителя нет.
Поддерживается только в Tic Tac Toe и Four in a Row. Укажите в качестве целевого объекта contentWindow в iframe идентификатор игры и действие.
// Parent page -> iframe (Tic Tac Toe or Four in a Row)
const iframe = document.querySelector("iframe");
iframe.contentWindow.postMessage(
{ game: "tic-tac-toe", action: "reset" },
"https://gamesiknow.com"
);
iframe.contentWindow.postMessage(
{ game: "tic-tac-toe", action: "get_state" },
"https://gamesiknow.com"
);Скопируйте этот обработчик событий на страницу, где размещен ваш iframe. Он обрабатывает состояние готовности, начало игры, события игрового процесса, подписанное завершение и переход в полноэкранный режим.
Фильтрация по источнику, обработка событий GAME_STARTED и GAME_COMPLETED для отображения событий пользовательского интерфейса победителя и игровых событий во время матча.
/**
* Games I Know embed listener (parent page)
* Handles lifecycle events (GAME_STARTED, GAME_COMPLETED) and
* version 1 gameplay events (move, mode_change, ...).
*/
const TRUSTED_ORIGIN = "https://gamesiknow.com"; // or your self-hosted origin
window.addEventListener("message", (event) => {
if (TRUSTED_ORIGIN !== "*" && event.origin !== TRUSTED_ORIGIN) return;
const data = event.data;
if (!data || data.source !== "gamesiknow") return;
// --- Lifecycle events (flat top-level event name) ---
if (data.event === "GAME_STARTED") {
console.log("Match started", {
game: data.game,
mode: data.mode,
partnerId: data.partnerId,
campaignId: data.campaignId,
});
return;
}
if (data.event === "GAME_COMPLETED") {
const winnerLabel = data.winner?.name ?? data.winnerPlayerName ?? null;
console.log("Match completed", {
game: data.game,
outcome: data.outcome, // player_1 | player_2 | ai_bot | draw
winner: data.winner,
winnerName: winnerLabel,
players: data.players,
});
if (winnerLabel) {
document.getElementById("game-winner")!.textContent = `${winnerLabel} won!`;
} else if (data.outcome === "draw") {
document.getElementById("game-winner")!.textContent = "Draw";
}
// For rewards: send resultId + signedToken to YOUR backend (never call verify from the browser)
if (data.resultId && data.signedToken) {
fetch("/api/reward-winner", {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
resultId: data.resultId,
signedToken: data.signedToken,
userId: currentUserId,
}),
});
}
return;
}
if (data.event === "EMBED_FULLSCREEN_CHANGE") {
document.body.classList.toggle("embed-fullscreen-active", Boolean(data.payload?.active));
return;
}
// --- Gameplay events (version 1 envelope) ---
if (data.version === 1 && typeof data.event === "string") {
switch (data.event) {
case "ready":
resizeEmbed(data.payload?.embedHeight);
break;
case "mode_change":
console.log("Mode changed", data.payload?.mode);
break;
case "move":
console.log("Move", data.payload);
break;
default:
console.log("Gameplay event", data.event, data.payload);
}
}
});
function resizeEmbed(height) {
const iframe = document.querySelector('iframe[src*="/embed/"]');
if (iframe && typeof height === "number") iframe.style.height = `${height}px`;
}Контрольный список интеграции
Используйте GAME_COMPLETED на родительской странице, чтобы показать, кто победил. Для получения наград проверяйте подписанные результаты из вашей серверной части с помощью ключа партнерского сервера - никогда не вызывайте проверку API из браузера JavaScript.
Только на стороне сервера. Используйте resultId и signedToken из GAME_COMPLETED с авторизацией: Bearer gik_psk_…
POST https://api.gamesiknow.com/embed/results/verify
Authorization: Bearer gik_psk_your_secret_key
Content-Type: application/json
{
"resultId": "res_abc123xyz",
"signedToken": "signed_token_from_game_completed"
}
Call from your backend server only. The partner server key must belong to the same tenant as the signed result. Browser requests are rejected.{
"ok": true,
"resultId": "res_abc123xyz",
"partnerId": "partner_your_tenant",
"gameSlug": "tic-tac-toe",
"outcome": "player_1",
"score": 100,
"durationSeconds": 24
}Ваш бэкэнд получает токены с родительской страницы, проверяет их с помощью Games I Know, а затем начисляет вознаграждение.
// Example: Node.js / Express handler on YOUR server
app.post("/api/reward-winner", async (req, res) => {
const { resultId, signedToken, userId } = req.body;
const verify = await fetch("https://api.gamesiknow.com/embed/results/verify", {
method: "POST",
headers: {
"content-type": "application/json",
authorization: `Bearer ${process.env.GAMESIKNOW_PARTNER_SERVER_KEY}`,
},
body: JSON.stringify({ resultId, signedToken }),
});
if (!verify.ok) return res.status(403).json({ error: "Invalid result" });
const result = await verify.json();
if (result.outcome !== "player_1") {
return res.status(400).json({ error: "Player did not win" });
}
await grantReward(userId, result);
return res.json({ ok: true });
});Games I Know автоматически записывает эти события при загрузке вашего iframe и взаимодействии игроков. Они отображаются на вашей партнерской панели. Чтобы получить те же данные в свою собственную базу данных, создайте ключ партнерского сервера на странице установки и вызовите GET /partners/analytics только с вашего бэкэнд-сервера.
Сгенерируйте ключ партнерского сервера в разделе «Партнерская панель» → «Установить». Сохраните его как секретный ключ сервера. Используйте приведенные ниже параметры запроса для фильтрации экспорта.
GET https://api.gamesiknow.com/partners/analytics
Авторизация: Bearer gik_psk_your_secret_key
Необязательные параметры запроса:
domain Зарегистрированное имя хоста веб-сайта (example.com)
campaignId Значение из вашего параметра campaignId iframe
gameSlug крестики-нолики | четыре в ряд | бинго | i-know
from Дата начала в UTC (ГГГГ-ММ-ДД)
to Дата окончания в UTC (ГГГГ-ММ-ДД)
Пример:
/partners/analytics?domain=www.example.com&gameSlug=tic-tac-toe&from=2026-05-01&to=2026-05-31
Вызов только с вашего бэкэнд-сервера. Никогда не раскрывайте ключ вашего партнерского сервера в браузере JavaScript.В каждой игре embeddable отправляются одни и те же основные события. Сравните время и дополнительные данные для каждой игры ниже.
| Игра | GAME_STARTED | Сигнал завершения | Подпись | Принудительно AI | Height | Родительские команды |
|---|---|---|---|---|---|---|
| Tic Tac Toe | Первый ход или AI начало | ИГРА ЗАВЕРШЕНА | Да | Да | 640px | сброс, получить_состояние |
| Four in a Row | Первый ход или AI начало | ИГРА ЗАВЕРШЕНА | Да | Да | 640px | сброс, получить_состояние |
| Bingo | Матч начинается (AI или PvP) | ИГРА ЗАВЕРШЕНА | Да | Да | 640px | Пока никого нет |
| I Know | Матч начинается (AI или PvP) | ИГРА ЗАВЕРШЕНА | Да | Да | 640px | Пока никого нет |
Эта страница является техническим справочником. Используйте эти руководства, если вам необходимы инструкции по установке, специфичные для вашей платформы, или рекомендации по вертикальному размещению. Во всех руководствах используется один и тот же iframe и модель событий, описанные выше.
Framework-specific iframe placement, event listeners, and production notes.
Copy-paste embed guides for no-code and low-code site builders.
Placement and UX recommendations for common website types.
Ищете общие обзорные страницы, такие как игры iframe, виджеты HTML5 или бесплатные игры embeddable? Просмотрите все embed руководства по хабу.
Ответы на вопросы о деталях интеграции, текущей поддержке игр, командах, подписанных результатах и совместимости с будущими играми.
Да. Games I Know и embed используют стандартный HTML iframe, поэтому они работают в пользовательских HTML-блоках WordPress, элементах Webflow embed, пользовательских областях кода Wix и Squarespace, статическом HTML, React, Next.js и других пользовательских сайтах. Сначала зарегистрируйте домен веб-сайта в панели управления партнера, затем вставьте сгенерированный фрагмент фрейма на страницу, где должна отображаться игра.
/embed/{gameSlug}/ - это публичная целевая страница игры embed. /embed/{gameSlug}/frame/ - это среда выполнения iframe, которую следует вставить на ваш веб-сайт. Всегда используйте URL /frame/ в коде iframe, поскольку он загружает играбельную игру, проверяет ваш арендатор и домен, а также отправляет события родительской страницы.
Да. Игры Games I Know и iframe разработаны для мобильных устройств, планшетов, ноутбуков и настольных компьютеров. Используйте width="100%" и рекомендуемую высоту около 640 пикселей для большинства игр embed. Вы также можете отслеживать событие ready и использовать payload.embedHeight, если хотите, чтобы родительская страница автоматически изменяла размер iframe.
Games I Know iframe embed доступны бесплатно во время бета-тестирования embed. Для начала работы не требуется кредитная карта, и текущие бета-версии embed не содержат рекламы. Создайте бесплатный партнерский аккаунт, зарегистрируйте свой домен и сгенерируйте фрагмент iframe из панели управления.
Да. Партнерский аккаунт предоставляет вам идентификатор арендатора и фрагмент кода iframe с ограничениями по домену. iframe отправляет tenantId вместе с URL-адресом фрейма, чтобы Games I Know мог проверить партнера, разрешенный домен, доступ к игре, квоту AI, аналитическую кампанию и процесс проверки результатов.
embed имеет ограничения по домену. Если кто-то скопирует ваш фрагмент iframe на неавторизованный веб-сайт, Games I Know проверит источник запроса на соответствие доменам, настроенным для вашей партнерской учетной записи, и заблокирует несанкционированное использование. Используйте отдельные идентификаторы кампаний, если хотите получить более точную аналитику для каждого веб-сайта или кампании.
Tic Tac Toe, Four in a Row, Bingo и I Know сегодня поддерживают iframe и embed. Каждая игра отправляет стандартный контракт события embed для состояния готовности, начала игры, игрового процесса, завершения, данных о победителе, аналитики и проверки результатов. Ожидается, что новые игры, поддерживающие embed, будут следовать той же схеме событий, чтобы партнерам не приходилось перестраивать свою интеграцию.
Каждая игра embeddable использует два формата postMessage. События жизненного цикла используют плоскую структуру с источником: gamesiknow и значениями событий, такими как ready, GAME_STARTED, GAME_COMPLETED и EMBED_FULLSCREEN_CHANGE. События игрового процесса используют версию: 1 с вложенными именами событий, такими как ready, mode_change, move, reset, undo и state. Всегда фильтруйте по data.source === "gamesiknow".
Да. Необходимо отслеживать событие GAME_STARTED при начале матча, использовать игровые события, такие как перемещение и смена режима, во время игры, а также событие GAME_COMPLETED при завершении матча. Событие GAME_COMPLETED включает в себя идентификаторы результата, победителя, игроков, счета, продолжительности и итога, если доступна функция подписи. Аналитика на стороне сервера также записывает загрузки, начала, завершения, заблокированные попытки и клики по призывам к действию.
Используйте событие GAME_COMPLETED, когда матч заканчивается. Каждая игра, использующая протокол embeddable, отправляет это событие жизненного цикла с результатом, победителем, именем победителяPlayerName и игроками. Если GAME_COMPLETED содержит resultId и signedToken, перешлите их на свой бэкэнд и вызовите POST /embed/results/verify с ключом вашего партнерского сервера, прежде чем начислять награды или кредиты.
Добавьте window.addEventListener("message", handler) на страницу, на которой размещен iframe. В обработчике игнорируйте сообщения, если event.data.source === "gamesiknow". Используйте ветвление по event.data.event для событий жизненного цикла или по event.data.event плюс event.data.version === 1 для событий игрового процесса. При желании проверьте event.origin на соответствие разрешенному источнику Games I Know.
Используйте GAME_COMPLETED на родительской странице, чтобы сразу отобразить победителей (результат, победитель, winnerPlayerName, игроки). Для начисления наград отправьте resultId и signedToken из GAME_COMPLETED на ваш бэкэнд, затем вызовите POST /embed/results/verify с Authorization: Bearer gik_psk_… используя ключ партнерского сервера из вашей панели управления. Конечная точка проверки работает только на стороне сервера - никогда не вызывайте ее из браузера JavaScript. Начисляйте награды только после успешной проверки.
Обязательный параметр: tenantId (идентификатор вашего партнера-арендатора). Необязательный параметр: mode=ai для запроса принудительного включения режима AI при наличии квоты, и campaignId для сегментации аналитики. URL-адреса фреймов: /embed/{gameSlug}/frame/?tenantId=YOUR_TENANT_ID.
Да. Добавьте параметр mode=ai к URL-адресу iframe, чтобы сначала запросить режим AI. Правила квотирования и домена на стороне сервера по-прежнему применяются, поэтому embed может вернуться к выбору игрока или игре «игрок против игрока», когда режим AI недоступен или квота исчерпана.
Tic Tac Toe и Four in a Row принимают сообщения от родительского процесса, в которых игра установлена на игровой идентификатор, а действие - на reset или get_state. iframe отвечает событием состояния игрового процесса. Другие игры embed пока не предоставляют доступ к командам родительского процесса.
Перед генерацией токена убедитесь, что домен веб-сайта активен.
Для каждого веб-сайта или группы кампаний используйте отдельный токен или идентификатор кампании.
Отслеживайте события GAME_STARTED и GAME_COMPLETED на родительской странице.
Сохраните видимым фирменный стиль Games I Know внутри embed.
Перед присуждением призов или начислением баллов обязательно проверяйте подписанные результаты в своей системе.
В ходе тестирования принудительно включается режим AI и происходит переключение на режим PvP при исчерпании квоты AI.
Предоставьте нам ссылку на ваш сайт, CMS и желаемое место размещения игры. Мы можем проверить с вами схему подключения событий embed.