什麼是iFrame lobby,以及如何集成它
什麼是iFrame lobby
iFrame lobby是一個嵌入式大廳模塊(遊戲目錄,橫幅,類別,搜索,快速啟動),由內容提供商/聚合器托管,並通過'
關鍵思想:操作員不會從頭開始寫大廳,而是連接完成的,獲得即將到來的時間市場,跨瀏覽器支持和更新,而無需發布。
適當時
快速啟動新的提供商/垂直。
需要為多個國家/品牌提供統一的展示。
操作員中有限的前端命令。
利弊
優點:速度,單一代碼庫,新產品的自動裝載,提供商的一致分析。
缺點:較少控制像素完美,依賴供應商的藥房,跟蹤的復雜性,SEO限制(iframe中的內容不作為您的DOM的一部分進行索引)。
基本體系結構
1.Front(語句):"/casino"頁面,其中包含'
2.Auth墊:在操作員的後端生成短壽命的「sessionToken」 (JWT/opaque)。
3.Provider lobby:驗證令牌,替代語言/貨幣/限制,渲染遊戲和橫幅。
4.消息總線:'窗口。頁面和事件的iframe之間的postMessage'(平衡、遊戲開始、打開結帳等)。
5.Cashier/KYC/RG:在操作員側(iframe之外)調用,但可以由團隊從大廳訪問。
最低實施要求
授權:短壽命令牌(1-15分鐘)+透明輪換(無聲回收)。
安全性:CSP,「sandbox」和iframe的準確「allow」,嚴格的「postMessage」過濾。
穩定性:事件合同(版本,backward-copat), graceful-fallback on bug。
UX:自適應網格,快速導航,卡片預裝,skeleton屏幕。
分析:統一事件(impression, click, launch, error),映射到Amplitude/GA4。
嵌入示例(HTML+安全性)
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>
說明:
- 「sandbox」-僅包含所需的標誌。不要不必要地「allow-top-navigation」。
- 「allow」-有意識地添加fichi; 「payment」僅在實際使用時。
- 「referrerpolicy」-限制參數泄漏。
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;
X-Frame-Options不會阻止您嵌入頁面→提供商嵌入到您身上,反之亦然。
在後端生成令牌(示例Node/Express)
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 });
});
最佳實踐:簡短的TTL、字段審核、HSM/Secrets Manager中的密鑰、「kid」輪換。
消息傳遞: 事件合同
使用「postMessage」與源的白名單和電路驗證。
js
//主機(運營商)
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。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();//您的break功能;
case "lobby:launchGame":
launchGame(payload.gameId);//可以打開新的窗口/斷路器;
case "lobby:requestTokenRefresh":
refreshLobbyToken().then(t =>
iframe.postMessage({ type: "host:newToken", payload: { token: t } }, LOBBY_ORIGIN)
);
break;
}
});
標準事件(示例集):
- От лобби → хосту: `lobby:ready`, `lobby:resize`, `lobby:openCashier`, `lobby:openRG`, `lobby:launchGame`, `lobby:track`, `lobby:requestTokenRefresh`, `lobby:error`.
- 從主機→大廳:「host:context」(平衡、本地、限制)、「host:newToken」、「host:balanceUpdate」、「host:rgState」、「host:navigation」。
從大廳開始遊戲
兩種方法是:1.在相同的iframe中-速度更快,但控制更少,跟蹤更加困難。
2.單獨的rut/窗口-更簡單的度量標準,可以懸掛其覆蓋範圍(RG/限制),更好地與Web View兼容。
最小路線:- 大廳發送「lobby: launchGame {gameId}」.
- 主機在其後臺生成「gameToken」並打開'/game/:id?token=…`.
- 遊戲采用令牌,驗證並開始下註會話。
UX和性能
Α刪除:臺式機上的3-5列,平板電腦2列,移動1列;記錄卡片的高度。
骨架和懶惰裝載(畫廊的圖像「loading=」lazy「,」fetchpriority=「low」)。
快速搜索和過濾器:記住「?query」/「localStorage」中的選定標簽。
點擊卡:點擊區域≥ 44px;鍵盤支持(A11y)。
橫幅播放器:讓停電不是「跳躍」。
iOS媒體策略:視頻/音頻自動播放需要用戶手勢;在演示視頻中考慮這一點。
合規性和玩家責任(RG)
限制和計時:支持在大廳中顯示當前玩家的限制(僅讀取),在主機側調用更改形式。
自我體驗:「lobby: openRG」事件→在iframe外打開您的RG模塊。
於爾。-橫幅和18+:在主機側而不是大廳內,以免依賴提供商的創意。
GDPR/Cookie:遊說是第三方,思考Cookie和法律框架(contractual necessity/legitimate interest)。
本地化和品牌
在「src」和/或「host: context」中傳輸語言/貨幣/區域。
允許白色標簽變量:顏色、徽標、字體。
將「最愛/最近」單元存儲在操作員側,以便在交換供應商時不會丟失數據。
分析和指標
跟蹤層(示例):- `lobby_impression`, `tile_view`, `tile_click`, `search_use`, `category_change`, `launch_game`, `error_view`.
- TTFB-Bet(從進入大廳到首次投註的時間),CR_deposit→launch,CTR類別/搜索,平均觀看深度。
從iframe匯總事件;避免使用提供商的像素進行「雙重計算」。
實施測試計劃
1.安全性: CSP檢查,沒有額外的"allow"和"sandbox"標誌,驗證"postMessage。origin`.
2.會議:令牌到期,silent-refresh,401/403的行為。
3.拆卸:移動/網絡視圖(Android/iOS)上的正確高度。
4.售票處/KUS:大堂活動的開場/閉幕情景。
5.提供商無法使用:超時,顯示存根和轉發。
6.RG限制:顯示和禁止在鎖定時啟動遊戲。
7.切換區域/貨幣:即時和重新啟動時。
8.分析:比較主機vs供應商計數器。
典型錯誤(反模式)
掛起「消息」-listener而不檢查「起源」。
發出iframe完全訪問(「allow-same-origin allow-top-navigation-by-user-activation」「以防萬一」)。
長壽代幣不旋轉。
依靠SEO的大廳內容。
混合播放器緩存和提供程序目錄緩存(打破個性化)。
在相同的iframe中運行遊戲,而無需跟蹤和RG覆蓋控制。
iFrame lobby集成支票清單
- 同意事件合同(版本、類型、模式)。
- 實施/lobby-token與TTL ≤ 15分鐘和旋轉。
- 調整了CSP,「sandbox」,「allow」,「referrerpolicy」。
- 連接了cashier/KYC/RG並鏈接了「openCashier」/「openRG」事件。
- 在供應商降級時考慮倒退。
- 對本地化、貨幣、年齡橫幅進行了核對。
- 配置了分析(端到端用戶/會話ids)。
- 進行了跨瀏覽器和移動Web View測試。
- 描述了事件的運行手冊以及與供應商的聯系點。
iFrame遊說是擴展遊戲目錄並減少時間到市場的一種快速而務實的方式。健康集成的關鍵是嚴格的安全性,明確的事件合同,可靠的授權以及操作員側精心設計的UX/分析。一旦完成此操作,您可以通過點擊幾乎擴展與新供應商的集成。