IFrame lobby nədir və onu necə inteqrasiya etmək olar
iFrame lobby nədir
iFrame lobby - bu, məzmun provayderi/aqreqator tərəfindən yerləşdirilən və '
Əsas fikir: operator lobbini sıfırdan yazmır, lakin hazır, sürətli time-to-market, kross-brauzer dəstəyi və yeniləmələri öz tərəfində buraxmadan birləşdirir.
Uyğun olduqda
Yeni provayder/şaquli sürətli başlanğıc.
Bir neçə ölkə/marka üçün vahid vitrin lazımdır.
Operator üçün məhdud frontend komandası.
Müsbət və mənfi cəhətləri
Üstünlüklər: sürət, vahid kod bazası, yeni məhsulların avtomatik yüklənməsi, provayderin razılaşdırılmış analitikası.
Dezavantajları: piksel perfekt üzərində daha az nəzarət, satıcının aptaymından asılılıq, izləmə incəliyi, SEO məhdudiyyətləri (iframe məzmunu DOM-unuzun bir hissəsi kimi indeksləşdirilmir).
Əsas memarlıq
1. Front (operator):
2. Auth conta: qısa ömürlü 'sessionToken' (JWT/opaque) operator arxa planda yaradılır.
3. Provider lobby: tokeni validasiya edir, dili/valyutanı/limitləri əvəz edir, oyun və bannerləri render edir.
4. Messaging şin: 'window. postMessage 'səhifə arasında və hadisələr üçün iframe (balans, oyunun başlanğıcı, kassa açmaq və s.).
5. Cashier/KYC/RG: operator tərəfində çağırılır (iframe xaricində), lakin lobbidən komandalar tərəfindən mövcuddur.
Minimum tətbiq tələbləri
Avtorizasiya: qısa ömürlü tokenlər (1-15 dəq) + şəffaf rotasiya (silent refresh).
Təhlükəsizlik: CSP, 'sandbox' və iframe üçün dəqiq 'allow', ciddi filtrasiya 'postMessage'.
Sabitlik: hadisə müqaviləsi (versiyalar, backward-compat), səhvlər zamanı graceful-fallback.
UX: adaptiv mesh, sürətli naviqasiya, kartların əvvəlcədən yüklənməsi, skeleton ekranları.
Analitika: unified hadisələr (impression, click, launch, error), Amplitude/GA4 mapping.
Yerləşdirmə nümunəsi (HTML + təhlükəsizlik)
html
<iframe id="providerLobby"
src="https://lobby. example. com/embed? brand=ACME&lang=ru¤cy=EUR&token={{SESSION_TOKEN}}"
loading="lazy"
referrerpolicy="strict-origin-when-cross-origin"
sandbox="allow-scripts allow-same-origin allow-popups allow-popups-to-escape-sandbox"
allow="fullscreen; autoplay; encrypted-media; clipboard-read; clipboard-write"
style="width:100%;height:100vh; border:0; display:block; ">
</iframe>
İzahat:
- 'sandbox' - yalnız istədiyiniz bayraqları açın. ehtiyac olmadan 'allow-top-navigation' verməyin.
- 'allow' - şüurlu şəkildə fiçlər əlavə edin; 'payment' yalnız həqiqətən istifadə edildikdə.
- 'referrerpolicy' - parametrlərin sızmasını məhdudlaşdırmaq.
Content-Security-Policy:
default-src 'self';
frame-src https://lobby. example. com;
script-src 'self' https://lobby. example. com 'unsafe-inline';
img-src 'self' https://lobby. example. com data:;
connect-src 'self' https://api. example. com https://lobby. example. com;
Səhifələriniz üçün X-Frame-Options siz → provayder əksinə deyil, sizə inteqrasiya edir.
Arxa planda token istehsalı (Node/Express nümunəsi)
js import jwt from "jsonwebtoken";
import express from "express";
const app = express();
app. get("/lobby-token", (req, res) => {
const payload = {
sub: req. user. id, brand: "ACME", currency: "EUR", lang: "ru", ts: Date. now()
};
const token = jwt. sign(payload, process. env. LOBBY_JWT_SECRET, {
algorithm: "HS256", expiresIn: "10m", issuer: "acme-casino", audience: "lobby-provider"
});
res. json({ token });
});
Ən yaxşı təcrübələr: qısa TTL, sahə auditi, HSM/Secrets Manager açarları, 'kid' rotasiyası.
Mesajlaşma: hadisə müqaviləsi
Mənbə whitelisting və sxem təsdiqi ilə 'postMessage' istifadə edin.
js
//Host (operator)
const iframe = document. getElementById("providerLobby"). contentWindow;
const LOBBY_ORIGIN = "https://lobby. example. com";
window. addEventListener("message", (e) => {
if (e. origin!== LOBBY_ORIGIN) return;
const { type, payload } = e. data {};
switch (type) {
case "lobby:ready":
//iframe başlanğıc məlumatlarını göndərəcəyik. postMessage({ type: "host:context", payload: {
balance: 125. 40, kycStatus: "verified", limits: { betMax: 100 }
}}, LOBBY_ORIGIN);
break;
case "lobby:resize":
document. getElementById("providerLobby"). style. height = payload. height + "px";
break;
case "lobby:openCashier":
openCashier () ;//sizin break funksiyası;
case "lobby:launchGame":
launchGame(payload. gameId) ;//yeni pəncərə/rout break aça bilər;
case "lobby:requestTokenRefresh":
refreshLobbyToken(). then(t =>
iframe. postMessage({ type: "host:newToken", payload: { token: t } }, LOBBY_ORIGIN)
);
break;
}
});
Standart hadisələr (nümunə dəsti):
- От лобби → хосту: `lobby:ready`, `lobby:resize`, `lobby:openCashier`, `lobby:openRG`, `lobby:launchGame`, `lobby:track`, `lobby:requestTokenRefresh`, `lobby:error`.
- Host → lobbidən: 'host: context' (balans, lokal, limitlər), 'host: newToken', 'host: balanceUpdate', 'host: rgState', 'host: navigation'.
Lobbidən oyuna start
İki yanaşma:1. Eyni iframe daxilində - daha sürətli, lakin daha az nəzarət və daha çətin izləmə.
2. Ayrı bir rut/pəncərə metrikdən daha asandır, overlei (RG/limitlər) asa bilərsiniz, veb-view ilə daha yaxşı uyğunluq.
Minimum marşrut:- Lobbi göndərir 'lobby: launchGame {gameId}'.
- Host öz backında 'gameToken' yaradır və '/game/: id? token=…`.
- Oyun token qəbul, valid, bahis sessiyaları başlayır.
UX və performans
Α daptiv: masaüstündə 3-5 sütun, 2 - planşet, 1 - mobil; kartların hündürlüyünü qeyd edin.
Skeletlər və lazy-loading (qalereyalar üçün 'loading =' lazy ',' fetchpriority = 'low' şəkilləri).
Tez axtarış və filtrlər: Seçilmiş etiketləri yadda saxlayın '? query '/' localStorage'.
Kart klikləri: klik zonası ≥ 44px; klaviatura dəstəyi (A11y).
Bannerlərin pleysholderləri: layout «sıçramasın».
iOS media siyasəti: video/audio autoplay istifadəçi jest tələb edir; bunu demolarda nəzərə alın.
Komplayens və oyunçu məsuliyyəti (RG)
Limitlər və vaxtlar: Lobbidə cari oyunçu limitlərinin göstərilməsini dəstəkləyir (read-only), hostun tərəfində dəyişiklik formasını çağırır.
Özünü istisna: hadisə 'lobby: openRG' → iframe xaricində RG modulunuzu açın.
Jur. -bannerlər və 18 +: provayderin yaradıcılığından asılı olmamaq üçün lobbidə deyil, hostun tərəfində.
GDPR/cookies: lobbi üçüncü tərəfdir, cookie-consent və hüquqi bazanı (contractual necessity/legitimate interest) düşünün.
Lokalizasiya və brendinq
Dil/valyuta/bölgəni 'src' və/və ya 'host: context' -ə köçürün.
Ağ etiket dəyişənlərinə icazə verin: rənglər, loqotiplər, şriftlər.
Vendor dəyişdirilərkən məlumatları itirməmək üçün «seçilmiş/son» blokları operatorun tərəfində saxlayın.
Analitika və metrika
Tracking qat (nümunə):- `lobby_impression`, `tile_view`, `tile_click`, `search_use`, `category_change`, `launch_game`, `error_view`.
- TTFB-Bet (ilk bahis üçün lobbi giriş vaxt), CR_deposit→launch, CTR kateqoriyalar/axtarış, Orta baxış dərinliyi.
iframe hadisələri özünüzdə yığın; provayderin pikselləri ilə «ikiqat hesabdan» çəkinin.
Tətbiq Test Planı
1. Təhlükəsizlik: CSP-nin yoxlanılması, lazımsız 'allow' və 'sandbox' bayraqlarının olmaması, 'postMessage-in təsdiqi. origin`.
2. Seanslar: token sonu, silent-refresh, 401/403-də davranış.
3. Rezise: mobil/web view (Android/iOS) doğru hündürlük.
4. Kassa/KUS: lobbi hadisələri üzrə modalkaların açılması/bağlanması ssenariləri.
5. Provayder əlçatmazlığı: time-autlar, tıxaclar və retralar.
6. RG limitləri: Bloklama zamanı oyunun göstərilməsi və qadağan edilməsi.
7. Lokalların/valyutaların dəyişdirilməsi: uçuşda və yenidən başladıqda.
8. Analitika: ana sayğacların müqayisəsi vs satıcı.
Tipik səhvlər (anti-nümunələr)
'origin' yoxlamadan 'message' -listeneri asmaq.
iframe tam giriş ('allow-same-origin allow-top-navigation-by-user-activation' «hər ehtimala qarşı»).
Rotasiya olmadan uzun ömürlü tokenlər.
SEO üçün lobbi məzmununa güvənmək.
Oyunçu cache və provayder kataloq cache qarışdırın (kişiselleştirme pozur).
Tracking və RG-overlay nəzarət etmədən eyni iframe daxilində oyun başlayın.
Çek siyahısı inteqrasiya iFrame lobby
- Hadisələrin müqaviləsi (versiya, tiplər, sxemlər) barədə razılığa gəldik.
- TTL ≤ 15 dəqiqə və rotasiya ilə həyata/lobby-token.
- CSP, 'sandbox', 'allow', 'referrerpolicy'.
- Cashier/KYC/RG bağlandı və 'openCashier '/' openRG' hadisələri bağlandı.
- Provayderin deqradasiyası zamanı fallback düşünülmüş.
- Lokalizasiyanı, valyutaları, yaş bannerlərini müqayisə etdik.
- Xüsusi analitika (user/session ids vasitəsilə).
- Cross-browser və mobil veb-view testləri.
- Runbook hadisələri və satıcı ilə əlaqə nöqtələri təsvir.
iFrame lobbisi - oyun kataloqunu genişləndirmək və time-to-market-ı azaltmaq üçün sürətli və praqmatik bir yoldur. Sağlam inteqrasiyanın açarı - ciddi təhlükəsizlik, hadisələrin dəqiq müqaviləsi, etibarlı avtorizasiya və operator tərəfində düşünülmüş UX/analitikadır. Bunu bir dəfə etdikdə, yeni təchizatçılarla inteqrasiyanı demək olar ki, «klik ilə» genişləndirə bilərsiniz.