targetGlobalSettings()
Puoi modificare le impostazioni nella libreria at.js utilizzando targetGlobalSettings()
, anziché configurarli in Target Interfaccia utente o utilizzando le API REST.
Impostazioni
È possibile modificare le seguenti impostazioni:
aepSandboxId
- Tipo: String
- Valore predefinito: null
- Descrizione: parametro facoltativo utilizzato per inviare Adobe Experience Platform ID sandbox da condividere Adobe Experience Platform destinazioni create nella sandbox non predefinita con Target. Se
aepSandboxId
non è nullo,aepSandboxName
devono essere fornite.
aepSandboxName
- Tipo: String
- Valore predefinito: null
- Descrizione: parametro facoltativo utilizzato per inviare Adobe Experience Platform nome sandbox da condividere Adobe Experience Platform destinazioni create nella sandbox non predefinita con Target. Se
aepSandboxName
non è nullo,aepSandboxId
devono essere fornite.
artifactLocation
- Tipo: String
- Valore predefinito: nessuna
- Descrizione: URL completo del artefatto della regola di decisioning sul dispositivo
bodyHiddenStyle
-
Tipo: String
-
Valore predefinito: body
-
Descrizione: utilizzato solo quando
globalMboxAutocreate === true
per minimizzare il rischio di sfarfallio.Per ulteriori informazioni, consulta Gestione at.js della visualizzazione momentanea di altri contenuti.
bodyHidingEnabled
- Tipo: booleano
- Valore predefinito: true
- Descrizione: utilizzato per controllare lo sfarfallio quando
target-global-mbox
viene utilizzato per fornire le offerte create nel Compositore esperienza visivo (offerte visive).
clientCode
- Tipo: String
- Valore predefinito: valore impostato tramite l’interfaccia utente.
- Descrizione: rappresenta il codice client.
cookieDomain
- Tipo: String
- Valore predefinito: se possibile, imposta il dominio di primo livello.
- Descrizione: rappresenta il dominio utilizzato quando si salvano i cookie.
crossDomain
- Tipo: String
- Valore predefinito: valore impostato tramite l’interfaccia utente.
- Descrizione: indica se il tracciamento tra domini diversi è abilitato o meno. I valori consentiti dipendono dalla versione at.js in uso. Per at.js v1.x, specifica se le funzionalità tra domini sono
disabled
I browser impostano i cookie solo nel tuo dominio (cookie di prime parti),x only
(i browser impostano i cookie in Targetsolo dominio di ), o entrambi, selezionandoenabled
(i browser impostano sia cookie di prima parte che di terze parti). Per at.js v2.10 e versioni successive, specifica se le funzionalità tra domini diversi sonoenabled
(i browser impostano sia cookie di prima parte che di terze parti) oppuredisabled
(i browser non impostano cookie di terze parti).
cspScriptNonce
- Tipo: consulta Criteri di sicurezza dei contenuti di seguito.
- Valore predefinito: consulta Criteri di sicurezza dei contenuti di seguito.
- Descrizione: consulta Criteri di sicurezza dei contenuti di seguito.
cspStyleNonce
- Tipo: consulta Criteri di sicurezza dei contenuti di seguito.
- Valore predefinito: consulta Criteri di sicurezza dei contenuti di seguito.
- Descrizione: consulta Criteri di sicurezza dei contenuti di seguito.
dataProviders
- Tipo: consulta Fornitori di dati di seguito.
- Valore predefinito: consulta Fornitori di dati di seguito.
- Descrizione: consulta Fornitori di dati di seguito.
decisioningMethod
-
Tipo: String
-
Valore predefinito: lato server
-
Altri valori: su dispositivo, ibrido
-
Descrizione: consulta Metodi di decisione di seguito.
Metodi di decisione
Con decisioning sul dispositivo, Target introduce una nuova impostazione denominata Metodo di decisione che determina il modo in cui at.js distribuisce le esperienze.
decisioningMethod
ha tre valori: solo lato server, solo su dispositivo e ibrido. QuandodecisioningMethod
viene impostato intargetGlobalSettings()
, agisce come metodo di decisione predefinito per tutte le decisioni di Target.Solo lato server:
Solo lato server è il metodo decisionale predefinito impostato automaticamente quando at.js 2.5+ viene implementato e distribuito sulle proprietà web.
Se si utilizza solo lato server come configurazione predefinita, tutte le decisioni vengono prese sul Target rete edge, che comporta una chiamata del server di blocco. Questo approccio può introdurre una latenza incrementale, ma offre anche vantaggi significativi, come la possibilità di applicare TargetLe funzionalità di apprendimento automatico di includono Recommendations, Automated Personalization (AP), e Targeting automatico attività.
Inoltre, migliorare le esperienze personalizzate utilizzando TargetIl profilo utente di, che viene mantenuto tra sessioni e canali, può fornire risultati potenti per la tua azienda.
Infine, solo lato server consente di utilizzare Adobe Experience Cloud e di perfezionare i tipi di pubblico a cui rivolgersi tramite i segmenti Audienci Manager e Adobe Analytics.
Solo su dispositivo:
Solo su dispositivo è il metodo decisionale che deve essere impostato in at.js 2.5+ quando le decisioni su dispositivo devono essere utilizzate solo in tutte le pagine web.
Le decisioni sul dispositivo possono fornire esperienze e attività di personalizzazione a una velocità sorprendente, perché derivano da un artefatto di regole memorizzate nella cache che contiene tutte le attività che si qualificano per le decisioni sul dispositivo.
Per ulteriori informazioni sulle attività che si qualificano per le decisioni su dispositivo, consulta la sezione sulle funzionalità supportate.
Questo metodo decisionale deve essere utilizzato solo se le prestazioni sono altamente critiche in tutte le pagine che richiedono decisioni da Target. Inoltre, ricorda che quando viene selezionato questo metodo decisionale, le attività Target che non possono avvalersi delle decisioni su dispositivo non verranno consegnate o eseguite. La libreria at.js 2.5+ è configurata per cercare solo l’artefatto delle regole memorizzate nella cache per prendere decisioni.
Ibrido:
Ibrido è il metodo decisionale che deve essere impostato in at.js 2.5+ quando sia le decisioni su dispositivo che le attività che richiedono una chiamata alla rete Adobe Target È necessario eseguire la rete Edge.
Quando gestisci sia le attività di decisione su dispositivo che quelle lato server, può essere un po’ complicato e noioso pensare a come distribuire ed eseguire il provisioning di Target sulle pagine. Con il metodo decisionale ibrido, Target sa quando deve effettuare una chiamata al server al Adobe Target Rete Edge per le attività che richiedono l’esecuzione lato server e quando eseguire solo le decisioni su dispositivo.
L’artefatto delle regole JSON include i metadati che informano at.js se una mbox ha un’attività lato server in esecuzione o un’attività decisionale su dispositivo. Questo metodo decisionale assicura che le attività che intendi consegnare rapidamente vengano eseguite tramite le decisioni su dispositivo, e che quelle che richiedono una personalizzazione basata su ML più potente vengano eseguite tramite Adobe Target Rete Edge.
defaultContentHiddenStyle
- Tipo: String
- Valore predefinito: visibilità: nascosto
- Descrizione: utilizzato solo per il wrapping di mbox che utilizzano DIV con il nome di classe “mboxDefault” e vengono eseguiti tramite
mboxCreate()
,mboxUpdate()
, omboxDefine()
per nascondere il contenuto predefinito.
defaultContentVisibleStyle
- Tipo: String
- Valore predefinito: visibilità: visibile
- Descrizione: utilizzato solo per il wrapping di mbox che utilizzano DIV con il nome di classe “mboxDefault” e vengono eseguiti tramite
mboxCreate()
,mboxUpdate()
omboxDefine()
per rivelare l’offerta applicata, se presente, o il contenuto predefinito.
deviceIdLifetime
- Tipo: numero
- Valore predefinito: 63244800000 ms = 2 anni
- Descrizione: quantità di tempo in cui
deviceId
viene mantenuto nei cookie.
abilitato
-
Tipo: booleano
-
Valore predefinito: true
-
Descrizione: quando questa opzione è abilitata, viene eseguita automaticamente una richiesta Target di recupero esperienze e di manipolazione DOM per il rendering delle esperienze. Inoltre, le chiamate di Target possono essere eseguite manualmente tramite
getOffer(s)
/applyOffer(s)
.Se è disabilitata, le richieste di Target non vengono eseguite automaticamente o manualmente.
globalMboxAutoCreate
- Tipo: numero
- Valore predefinito: valore impostato tramite l’interfaccia utente.
- Descrizione: indica se la richiesta mbox globale deve essere attivata o meno.
imsOrgId
- Tipo: String
- Valore predefinito: true
- Descrizione: rappresenta l'ID ORG di IMS.
optinEnabled
- Tipo: booleano
- Valore predefinito: false
- Descrizione: Target fornisce supporto per la funzionalità opt-in tramite Adobe Experience Platform per supportare la strategia di gestione dei consensi. La funzionalità opt-in consente ai clienti di controllare come e quando viene attivato il tag di Target. È inoltre disponibile un'opzione tramite Adobe Experience Platform per pre-approvare Target tag. Per abilitare la capacità di utilizzare la funzione di opt-in nella libreria at.js di Target, aggiungi l’impostazione
optinEnabled=true
. In Adobe Experience Platform, è necessario selezionare "abilita" dall’elenco a discesa Opt-in RGPD nella visualizzazione di installazione dell’estensione. Per ulteriori informazioni, consulta la documentazione di Adobe Experience Platform. Per ulteriori informazioni su questa impostazione in relazione alle normative sulla privacy e la protezione dei dati, tra cui il Regolamento generale sulla protezione dei dati (RGPD) dell’Unione Europea e il California Consumer Privacy Act (CCPA), consulta Normative sulla privacy e la protezione dei dati.
optoutEnabled
- Tipo: booleano
- Valore predefinito: false
- Descrizione: indica se Target deve chiamare l’API Visitor;
isOptedOut()
funzione. Ciò fa parte dell'abilitazione di Device Graph.
overrideMboxEdgeServer
-
Tipo: booleano
-
Valore predefinito: true (true a partire dalla versione 1.6.2 di at.js)
-
Descrizione: indica se è necessario utilizzare il dominio
<clientCode>.tt.omtrdc.net
omboxedge<clusterNumber>.tt.omtrdc.net
.Se questo valore è true, il dominio
mboxedge<clusterNumber>.tt.omtrdc.net
verrà salvato in un cookie. Attualmente non funziona con CNAME quando utilizzi versioni di at.js precedenti ad at.js 1.8.2 e at.js 2.3.1. Se questo è un problema, valuta l’aggiornamento di at.js a una versione più recente e supportata.
overrideMboxEdgeServerTimeout
- Tipo: numero
- Valore predefinito: 1860000 => 31 minuti
- Descrizione: indica il periodo di vita del cookie contenente il valore
mboxedge<clusterNumber>.tt.omtrdc.net
.
pageLoadEnabled
- Tipo: booleano
- Valore predefinito: true
- Descrizione: quando questa opzione è abilitata, recupera automaticamente le esperienze che devono essere restituite al caricamento della pagina.
pollingInterval
- Tipo: numero
- Valore predefinito: 300000 (cinque minuti in millisecondi)
- Descrizione: intervallo che at.js recupera una nuova versione di un artefatto decisioning sul dispositivo e aggiorna la cache. 300000 valore minimo consentito per
pollingInterval
.
secureOnly
- Tipo: booleano
- Valore predefinito: false
- Descrizione: indica se at.js deve utilizzare solo HTTPS o può passare da HTTP a HTTPS in base al protocollo della pagina. Se è impostato su true, secureOnly imposta anche gli attributi Secure e SameSite sul cookie mbox.
selectorsPollingTimeout
-
Tipo: numero
-
Valore predefinito: 5000 ms = 5 s
-
Descrizione: in at.js 0.9.6, Target ha introdotto questa nuova impostazione che può essere sovrascritta tramite
targetGlobalSettings
.L’impostazione
selectorsPollingTimeout
rappresenta il tempo in cui il client è disposto ad attendere che tutti gli elementi identificati dai selettori vengano visualizzati nella pagina.Le attività create tramite il Compositore esperienza visivo hanno offerte che contengono selettori.
serverDomain
- Tipo: String
- Valore predefinito: valore impostato tramite l’interfaccia utente.
- Descrizione: rappresenta Target server Edge.
serverState
- Tipo: consulta Personalizzazione ibrida di seguito.
- Valore predefinito: consulta Personalizzazione ibrida di seguito.
- Descrizione: consulta Personalizzazione ibrida di seguito.
telemetryEnabled
- Tipo: booleano
- Valore predefinito: true
- Descrizione: quando abilitato, Adobe raccoglie dati di telemetria relativi all’utilizzo delle funzioni SDK e alle prestazioni. I dati personali non vengono raccolti.
timeout
- Tipo: numero
- Valore predefinito: valore impostato tramite l’interfaccia utente.
- Descrizione: rappresenta il timeout della richiesta Edge di Target.
viewsEnabled viewsenabled
- Tipo: booleano
- Valore predefinito: true
- Descrizione: quando questa opzione è abilitata, le visualizzazioni vengono recuperate automaticamente al caricamento della pagina. Quando
triggerView
è chiamato, le viste applicabili vengono visualizzate nel browser. Se questa opzione è disattivata, le visualizzazioni non vengono recuperate al momento del caricamento della pagina etriggerView
non fa nulla. Le visualizzazioni sono supportate in at.js 2.x.
visitorApiTimeout
- Type: numero
- Valore predefinito: 2000 ms = 2 s
- Descrizione: rappresenta il timeout della richiesta dell’API visitatore.
Utilizzo
Questa funzione può essere definita prima che at.js sia caricato oppure in Amministrazione > Implementazione > Modifica impostazioni at.js > Impostazioni codice > Intestazione libreria.
Il campo di intestazione della libreria consente di entrare in JavaScript in formato libero. Il codice di personalizzazione deve avere un aspetto simile all'esempio seguente:
window.targetGlobalSettings = {
timeout: 200, // using custom timeout
visitorApiTimeout: 500, // using custom API timeout
enabled: document.location.href.indexOf('https://www.adobe.com') >= 0 // enabled ONLY on adobe.com
};
Fornitori dati data-providers
Questa impostazione consente ai clienti di raccogliere dati da provider di dati di terze parti, come Demandbase, BlueKai e servizi personalizzati, e di passare i dati a Target come parametri mbox nella richiesta mbox globale. Supporta la raccolta di dati da più provider tramite richieste sincrone e asincrone. L'utilizzo di questo approccio semplifica la gestione della visualizzazione momentanea del contenuto della pagina predefinito, inclusi i timeout indipendenti per ogni provider per limitare l'impatto sulle prestazioni della pagina.
I video che seguono contengono ulteriori informazioni:
L’impostazione window.targetGlobalSettings.dataProviders
è un array dei fornitori di dati.
Ogni provider di dati dispone della struttura seguente:
La funzione che contiene la logica di recupero dei dati del fornitore.
La funzione dispone di un singolo parametro obbligatorio: callback
. Il parametro di callback è una funzione che deve essere richiamata solo quando i dati sono stati recuperati correttamente o si visualizza un errore.
La chiamata di ritorno prevede due parametri:
- error: indica se si è verificato un errore. Se tutto è OK, questo parametro deve essere impostato su null.
- parametri: un oggetto JSON, che rappresenta i parametri che verranno inviati in un Target richiesta.
Nell'esempio seguente viene illustrato il punto in cui il fornitore di dati utilizza l'esecuzione di sincronizzazione:
var syncDataProvider = {
name: "simpleDataProvider",
version: "1.0.0",
provider: function(callback) {
callback(null, {t1: 1});
}
};
window.targetGlobalSettings = {
dataProviders: [
syncDataProvider
]
};
Dopo i processi di at.js window.targetGlobalSettings.dataProviders
, il Target La richiesta conterrà un nuovo parametro: t1=1
.
Di seguito è riportato un esempio se i parametri che si desidera aggiungere al Target Le richieste di vengono recuperate da un servizio di terze parti, ad esempio Bluekai, Demandbase e così via:
var blueKaiDataProvider = {
name: "blueKai",
version: "1.0.0",
provider: function(callback) {
// simulating network request
setTimeout(function() {
callback(null, {t1: 1, t2: 2, t3: 3});
}, 1000);
}
}
window.targetGlobalSettings = {
dataProviders: [
blueKaiDataProvider
]
};
Dopo i processi di at.js window.targetGlobalSettings.dataProviders
, il Target La richiesta conterrà parametri aggiuntivi: t1=1
, t2=2
e t3=3
.
L’esempio seguente utilizza fornitori di dati per raccogliere dati API meteo e inviarli come parametri in una Target richiesta. Il Target La richiesta avrà parametri aggiuntivi, ad esempio country
e weatherCondition
.
var weatherProvider = {
name: "weather-api",
version: "1.0.0",
timeout: 2000,
provider: function(callback) {
var API_KEY = "caa84fc6f5dc77b6372d2570458b8699";
var lat = 44.426767399999996;
var lon = 26.1025384;
var url = "//api.openweathermap.org/data/2.5/weather?";
var data = {
lat: lat,
lon: lon,
appId: API_KEY
}
$.ajax({
type: "GET",
url: url,
dataType: "json",
data: data,
success: function(data) {
console.log("Weather data", data);
callback(null, {
country: data.sys.country,
weatherCondition: data.weather[0].main
});
},
error: function(err) {
console.log("Error", err);
callback(err);
}
});
}
};
window.targetGlobalSettings = {
dataProviders: [weatherProvider]
};
Quando si lavora con l'impostazione dataProviders
, tieni presente quanto segue:
- Se i fornitori di dati aggiunti a
window.targetGlobalSettings.dataProviders
sono asincroni, verranno eseguiti in parallelo. La richiesta API dei visitatori verrà eseguita in parallelo con le funzioni aggiunte awindow.targetGlobalSettings.dataProviders
per consentire un tempo minimo di attesa. - at.js non tenterà di memorizzare i dati nella cache. Se il fornitore di dati recupera i dati una sola volta, deve assicurarsi che i dati siano memorizzati nella cache e, quando viene invocata la funzione di fornitore di dati, deve servire i dati della cache per la seconda invocazione.
Informativa sulla sicurezza dei contenuti
at.js 2.3.0+ supporta l’impostazione dei nonce della policy sulla sicurezza dei contenuti nei tag SCRIPT e STYLE aggiunti al DOM della pagina quando si applica il codice distribuito Target offerte.
I nonce SCRIPT e STYLE devono essere impostati rispettivamente in targetGlobalSettings.cspScriptNonce
e targetGlobalSettings.cspStyleNonce
prima del caricamento di at.js 2.3.0+. Vedi un esempio qui sotto:
...
<head>
<script nonce="<script_nonce_value>">
window.targetGlobalSettings = {
cspScriptNonce: "<csp_script_nonce_value>",
cspStyleNonce: "<csp_style_nonce_value>"
};
</script>
<script nonce="<script_nonce_value>" src="at.js"></script>
...
</head>
...
Dopo cspScriptNonce
e cspStyleNonce
specificate, at.js 2.3.0+ le imposta come attributi nonce su tutti i tag SCRIPT e STYLE che aggiunge al DOM durante l’applicazione Target offerte.
Personalizzazione ibrida
serverState
è un’impostazione disponibile in at.js v2.2+ che può essere utilizzata per ottimizzare le prestazioni della pagina quando un’integrazione ibrida di Target è implementato. L’integrazione ibrida significa che utilizzi sia at.js v2.2+ sul lato client che l’API di consegna o un Target SDK lato server per distribuire le esperienze. serverState
consente a at.js v2.2+ di applicare le esperienze direttamente dal contenuto recuperato sul lato server e restituito al client come parte della pagina trasmessa.
Prerequisiti
È necessaria un’integrazione ibrida di Target.
- Lato server: utilizza API di consegna o SDK di Target.
- Lato client: devi utilizzare at.js versione 2.2 o successiva.
Esempi di codice
Per capire meglio come funziona, vedi di seguito esempi di codice che potresti avere sul server. Il codice presuppone che tu stia utilizzando l’SDK di Node.js di Target.
// First, we fetch the offers via Target Node.js SDK API, as usual
const targetResponse = await targetClient.getOffers(options);
// A successfull response will contain Target Delivery API request and response objects, which we need to set as serverState
const serverState = {
request: targetResponse.request,
response: targetResponse.response
};
// Finally, we should set window.targetGlobalSettings.serverState in the returned page, by replacing it in a page template, for example
const PAGE_TEMPLATE = `
<!doctype html>
<html>
<head>
...
<script>
window.targetGlobalSettings = {
overrideMboxEdgeServer: true,
serverState: ${JSON.stringify(serverState, null, " ")}
};
</script>
<script src="at.js"></script>
</head>
...
</html>
`;
// Return PAGE_TEMPLATE to the client ...
Ecco un esempio di oggetto JSON serverState
per la preacquisizione della visualizzazione:
{
"request": {
"requestId": "076ace1cd3624048bae1ced1f9e0c536",
"id": {
"tntId": "08210e2d751a44779b8313e2d2692b96.21_27"
},
"context": {
"channel": "web",
"timeOffsetInMinutes": 0
},
"experienceCloud": {
"analytics": {
"logging": "server_side",
"supplementalDataId": "7D3AA246CC99FD7F-1B3DD2E75595498E"
}
},
"prefetch": {
"views": [
{
"address": {
"url": "my.testsite.com/"
}
}
]
}
},
"response": {
"status": 200,
"requestId": "076ace1cd3624048bae1ced1f9e0c536",
"id": {
"tntId": "08210e2d751a44779b8313e2d2692b96.21_27"
},
"client": "testclient",
"edgeHost": "mboxedge21.tt.omtrdc.net",
"prefetch": {
"views": [
{
"name": "home",
"key": "home",
"options": [
{
"type": "actions",
"content": [
{
"type": "setHtml",
"selector": "#app > DIV.app-container:eq(0) > DIV.page-container:eq(0) > DIV:nth-of-type(2) > SECTION.section:eq(0) > DIV.container:eq(1) > DIV.heading:eq(0) > H1.title:eq(0)",
"cssSelector": "#app > DIV:nth-of-type(1) > DIV:nth-of-type(1) > DIV:nth-of-type(2) > SECTION:nth-of-type(1) > DIV:nth-of-type(2) > DIV:nth-of-type(1) > H1:nth-of-type(1)",
"content": "<span style=\"color:#FF0000;\">Latest</span> Products for 2020"
}
],
"eventToken": "t0FRvoWosOqHmYL5G18QCZNWHtnQtQrJfmRrQugEa2qCnQ9Y9OaLL2gsdrWQTvE54PwSz67rmXWmSnkXpSSS2Q==",
"responseTokens": {
"profile.memberlevel": "0",
"geo.city": "dublin",
"activity.id": "302740",
"experience.name": "Experience B",
"geo.country": "ireland"
}
}
],
"state": "J+W1Fq18hxliDDJonTPfV0S+mzxapAO3d14M43EsM9f12A6QaqL+E3XKkRFlmq9U"
}
]
}
}
}
Dopo che la pagina è stata caricata nel browser, at.js applica immediatamente tutte le offerte Target da serverState
senza attivare alcuna chiamata alla rete Edge di Target. Inoltre, at.js nasconde preventivamente solo gli elementi DOM per i quali sono disponibili delle offerte Target nel contenuto recuperato lato server, con un impatto positivo sulle prestazioni di caricamento delle pagine e sull’esperienza dell’utente finale.
Note importanti
Quando utilizzi serverState
, tieni presente quanto segue:
-
Al momento, at.js v2.2 supporta solo la distribuzione di esperienze tramite serverState per:
-
Attività create dal Compositore esperienza visivo che vengono eseguite al caricamento della pagina.
-
Visualizzazioni preacquisite.
In caso di SPA che utilizzi Target Visualizzazioni e
triggerView()
nell’API at.js, at.js v2.2 memorizza in cache il contenuto di tutte le visualizzazioni preacquisite sul lato server e le applica non appena ogni visualizzazione viene attivata tramitetriggerView()
, di nuovo senza attivare altre chiamate per il recupero dei contenuti a Target. -
Nota: attualmente, le mbox recuperate sul lato server non sono supportate in
serverState
.
-
-
Quando si applica
serverState
offerte, at.js prende in considerazionepageLoadEnabled
eviewsEnabled
impostazioni, ad esempio le offerte di caricamento pagina non verranno applicate sepageLoadEnabled
L'impostazione è false.Per attivare queste impostazioni, abilita l’accesso Amministrazione > Implementazione > Modifica > Caricamento pagina abilitato.
-
Se utilizzi i tag
serverState
e<script>
nel contenuto restituito, assicurati che il contenuto HTML utilizzi<\/script>
invece di</script>
. Se utilizzi</script>
, il browser interpreta</script>
come fine di uno SCRIPT in linea e potrebbe interrompere la pagina HTML.
Risorse aggiuntive
Per ulteriori informazioni sul funzionamento di serverState
, consulta le risorse seguenti: