IFrame și containere native: când să alegeți ce
Articol complet
1) Termeni și context
iFrame este un container HTML care încorporează conținut terță parte (joc, casa de marcat, widget). Gazda și conținutul sunt izolate logic de aceeași politică de origine.
Container nativ - o aplicație/modul în care conținutul web este lansat în WebView (WKWebView, Android WebView) sau înlocuit de un SDK nativ (randare, rețea, plăți, telemetrie).
În cazul în care se produce: start și jocuri demo, lobby, box office/onboarding, video live, widget-uri jackpot, aterizări partenere.
2) Răspuns scurt: ce să alegeți
Aveți nevoie de o lansare rapidă, o mulțime de conținut terță parte, un minim de dezvoltare → iFrame.
Aveți nevoie de o latență offline/scăzută/grafică grea/integrare profundă cu dispozitivul → un container nativ (WebView + bridge sau SDK).
Marketplaces/street analytics/strict guidelines (Apple/Google), plăți de sistem, cârlige hard RG → container nativ.
Site-uri media, SEO-landing, recenzii cu inserții redate → iFrame.
3) Matrice de selecție (simplificată)
4) iFrame: Când este perfect
Scenarii: afișarea rapidă a jocurilor demo, inserții afiliate, widget-uri jackpot/evaluări, aterizări redate, agregatoare B2B.
Plusuri
Viteza de integrare: single 'src' + chei/parametri.
Izolarea rigidă a oaspeților-gazdă (POS) - mai puțin risc de scurgeri.
Comunicate independente ale furnizorului (nu vă atingeți de implementare).
Este ieftin pentru a scala sute de furnizori.
Minusuri
Integrare limitată cu dispozitiv și plăți native.
Mai dificilă este telemetria profundă (mai mult "pod').
Probleme cu cookie-urile terță parte/Stocare (Safari/Firefox/ITP).
Ecran complet complex/gesturi/tastatură pe mobil.
Cele mai bune practici
„sandbox” atribute (pentru a limita „allow-forms',” allow-scripts', pointwise pentru a deschide „allow-pop-up-to-escape-sandbox” din nevoie).
"Content-Security-Policy" cu lista albă a furnizorilor; " X-Frame-Options "pentru pagini sensibile.
Comunicare - „Mesaj post” cu verificarea „evenimentului”. originea "și schema de mesaje.
Redimensionare: 'ResizeObserver' în interiorul evenimentului + 'postMessage (' înălțime ')' → modificările gazdei 'iframe. stil. înălţime ".
Stocare - Acces de stocare API/folback; stare - prin intermediul parametrilor URL sau părinte-stat.
RG/AML: semnale de oprire (auto-excludere, limite) - prin evenimente, iframe este obligat să se încheie sesiunea.
5) Containere native: atunci când câștigă
Scenarii: aplicații mobile cu jocuri live și case de marcat, onboarding/CUS complex, fluxuri în timp real cu latență scăzută, moduri offline, plăți magazin, caracteristici AR/VR.
Plusuri
Performanță/latență scăzută, acces la fier (cameră foto, biometrie).
O singură integrare UX și profundă RG/AML (alerte de sistem, pooches native).
Plăți și abonamente fiabile în aplicație (StoreKit/Facturare).
Telemetrie precisă și controlul eșecului (crashlytics, urme).
Minusuri
Prețul proprietății: dezvoltarea multi-platformă, eliberează prin magazin.
Aprobarea Apple/Google; restricții privind entuziasmul/plățile.
Mai multă securitate și responsabilități de confidențialitate.
Modele
WebView + JS bridge (bidirecțional): evenimentele de joc/plată/limită merg nativ.
Hibrid: ecrane native critice (case de marcat, KYC, RG), ecrane de conținut - WebView/iFrame.
Furnizorul SDK: jocurile/fluxurile sunt încorporate de bibliotecă; gazda oferă jetoane, limite, portofel.
6) Comunicare: iFrame ⇄ gazdă și WebView ⇄ nativ
Web (iFrame):- "window. postMessage ({tip, sarcină utilă}, targetOrigin) '
- Schema evenimentului: 'joc. sesiune. start/stop ', "pariu. place/settle ',' rg. limită. hit ', "jackpot. contribuție "," eroare ".
- Validare: verificați „origine”, introduceți versioning („v1”, „v2”).
- iOS: 'WKScriptMessageHandler'; Android: 'addJavascriptInterface' (cu @ JavascriptInterface, fără a expune inutile).
- Formatul este același ("tip", "sarcină utilă", "trace _ id'), semnături HMAC pentru comenzi critice.
7) Siguranță și conformitate
CSP, sandbox, SRI pentru active; pentru a deconecta „allow-top-navigation-by-user-activation” fără a fi nevoie.
Zero-încredere între gazdă și conținut: permisive minime, API-uri periculoase mutante.
PII/rezidență: bolți și bușteni pe regiuni; inhibarea interogării încrucişate.
RG/AML: lumini de oprire sincrone pe pariu; jurnal de acțiuni WORM creta.
Cookie-uri/ITP: utilizați 'SameSite = None; Secure "; для 3rd-party - Storage Access API или sesiune server-side.
8) Performanță și UX
iFrame: conexiune leneşă ('loading = leneş'), prioritizarea resurselor reţelei, 'preconnect' la domeniile furnizorului.
WebView: dezactivați JS inutile, activele cache, activați accelerarea hardware, monitorizați curățarea GC/memorie.
Ecran complet și orientare: se stipulează strict prin schema evenimentului (când și cine inițiază tranziția).
Manipularea erorilor: coduri unificate ('NETWORK _ TIMEOUT', 'PAYMENT _ BLOCKED', 'RG _ BLOCK') și UX proppants.
9) Analytics și A/B
Eveniment autobuz: "sesiune. început/încheiat „,” pariu. plasat/decontat „,” depozit. a reuşit ',' rg. limită. hit ',' eroare '.
Identificatori: 'tenant _ id/brand _ id/region/player _ pseudo', 'trace _ id'.
În iFrame - o piesă prin parent-proxy (tag-manager în gazdă), în WebView - un SDK nativ de analiză.
A/B: steaguri caracteristice în gazdă; iFrame recunoaște opțiunea prin „postMessage (init)”.
10) Integrarea plăților
Web/iFrame: preferabil numerar pe gazdă, și nu în interiorul iFrame (mai puțin 3rd-parte blochează, mai bine UX, mai ușor RG/AML).
Nativ: StoreKit/Facturare pentru scenarii valide; în caz contrar, orchestrația PSP este nativă cu telemetrie puternică și idempotență.
11) Card de selecție caz
Sunteți un agregator/media cu mii de jocuri și un minim de resurse dev:- → iFrame, strict „sandbox”, protocol „postMessage”, casierie/limite în gazdă.
- → container nativ: WebView pentru lobby, casierie nativă/KYC/RG, furnizor live SDK.
- → Un SDK sau un motor complet nativ într-o aplicație.
12) Liste de verificare
Integrare iFrame
- 'sandbox' + minim 'allow' drepturi.
- CSP cu lista albă; SRI pentru scenarii.
- Clear 'postMessage' scheme (+ versioning + 'origin' validation).
- Luminile de frână RG/AML sunt acceptate, sesiunile sunt terminate corect.
- Stocare: plan pentru cookie-uri ITP/3rd-party.
- Telemetrie: pariuri/min, settle-lag, error-rate, FPS (dacă este necesar).
Container nativ
- JS-bridge cu lista albă a metodei și tastarea sarcinii utile.
- Casierie nativ/KYC/RG, idempotenta pe moduri de bani.
- Păsărică, legături adânci, cârlige de ciclu de viață (întrerupeți jocul atunci când apelați/lucrați în fundal).
- Crash/trace, confidențialitate, audit de acces PII.
- Politicile de entuziasm și de plată ale Apple/Google sunt urmate.
13) Anti-modele (steaguri roșii)
Încorporarea casei de marcat în interiorul iFrame al furnizorului (pierderea controlului asupra RG/AML/telemetrie).
Fără validare. origine "в" Mesaj post ".
3rd-party cookie-uri ca singura modalitate de a stat.
Aceleași chei/secrete pentru mai multe mărci/regiuni.
Ajustări manuale ale soldurilor/limitelor de la inspectorul web (fără verificări de server).
Degradare zero: picătură iFrame rupe întreaga pagină fără grațios-rezervă.
14) Retragere
iFrame este „poarta rapidă” pentru ecosistemul de conținut: costuri reduse, izolare strânsă, eliberări rapide. Containere native - despre adâncime: performanță, dispozitiv, plăți magazin, stricte RG/AML și top-end UX. Nu o abordare câștigă, ci o combinație: iFrame/web pentru cataloage și demo-uri, nativi pentru bani, experiență live și rigoare de reglementare. Separarea corespunzătoare a responsabilităților, contractele clare de evenimente și securitatea puternică vor da amploare fără compromisuri în ceea ce privește viteza, riscul și calitatea.
