Konfigurera stöd för innehållskort i Web SDK content-card-configuration-sdk
I det här exemplet visas hur du hämtar innehållskort från Adobe Journey Optimizer (AJO) med Adobe Experience Platform. Genom att utnyttja Adobe Experience Platform Web SDK hämtas personaliseringsinnehållet och återges helt på klientsidan.
När den första sidan läses in visas sidans standardläge. Om du interagerar med knapparna Insättningsfonder eller Dela på sociala medier visas ytterligare innehållskort. Dessa kort aktiveras av klientvillkoren, vilket säkerställer att de bara visas när specifika åtgärder vidtas.
Köra exemplet run-sample
-
Konfigurera lokala SSL-certifikat för HTTPS. Dessa exempel kräver lokalt signerade SSL-certifikat för att leverera innehåll via HTTPS:
-
Installera
mkcert
på datorn. -
Efter installationen kör du
mkcert -install
för att installeramkcert root
-certifikatet.
-
-
Klona databasen till din lokala dator.
-
Öppna en terminal och navigera till exempelmappen.
-
Installera nödvändiga beroenden genom att köra
npm install
. -
Starta programmet med
npm start
. -
Öppna webbläsaren och gå till
https://localhost
.
Så fungerar det setup
-
Inkludera och konfigurera Web SDK på sidan med inställningar från filen
.env
i exempelmappen.code language-none <script src="https://cdn1.adoberesources.net/alloy/2.18.0/alloy.min.js" async></script> alloy("configure", { defaultConsent: "in", edgeDomain: "{{edgeDomain}}", edgeConfigId: "{{edgeConfigId}}", orgId:"{{orgId}}", debugEnabled: false, personalizationStorageEnabled: true, thirdPartyCookiesEnabled: false });
-
Använd kommandot
sendEvent
för att hämta anpassat innehåll.code language-none alloy("sendEvent", { renderDecisions: true, personalization: { surfaces: ["web://alloy-samples.adobe.com/#content-cards-sample"], }, });
-
Prenumerera på innehållskort för en viss yta med kommandot
subscribeRulesetItems
. Varje gång regeluppsättningar utvärderas hanterar du resultatobjektet i återanropet, som kommer att innehållapropositions
med innehållskortsdata.code language-none const contentCardManager = createContentCardManager("content-cards"); alloy("subscribeRulesetItems", { surfaces: ["web://alloy-samples.adobe.com/#content-cards-sample"], schemas: ["https://ns.adobe.com/personalization/message/content-card"], callback: (result, collectEvent) => { const { propositions = [] } = result; contentCardManager.refresh(propositions, collectEvent); }, });
-
Hantera återgivning av innehållskort och skicka
interact
- ochdisplay
-händelser med objektetcontentCardsManager
som finns iscript.js
. Extrahera, sortera och bearbeta innehållskort från de mottagna förslagen.code language-none const createContentCard = (proposition, item) => { const { data = {}, id } = item; const { content = {}, meta = {}, publishedDate, qualifiedDate, displayedDate, } = data; return { id, ...content, meta, qualifiedDate, displayedDate, publishedDate, getProposition: () => proposition, }; }; const extractContentCards = (propositions) => propositions .reduce((allItems, proposition) => { const { items = [] } = proposition; return [ ...allItems, ...items.map((item) => createContentCard(proposition, item)), ]; }, []) .sort( (a, b) => b.qualifiedDate - a.qualifiedDate || b.publishedDate - a.publishedDate ); const contentCards = extractContentCards(propositions);
-
Rendera innehållskorten baserat på de detaljer som definierats för varje kampanj. Varje kort innehåller en
title
,body
,imageUrl
och andra anpassade datavärden.code language-none const renderContentCards = () => { const contentCardsContainer = document.getElementById(containerElementId); contentCardsContainer.addEventListener("click", handleContentCardClick); let contents = ""; contentCards.forEach((card) => { const { id, title, body, imageUrl, meta = {} } = card; const { buttonLabel = "" } = meta; contents += ` <div class="col"> <div data-id="${id}" class="card h-100"> <img src="${imageUrl}" class="card-img-top" alt="..."> <div class="card-body d-flex flex-column"> <h5 class="card-title">${title}</h5> <p class="card-text">${body}</p> <a href="#" class="mt-auto btn btn-primary">${buttonLabel}</a> </div> </div> </div> `; }); contentCardsContainer.innerHTML = contents; collectEvent( "display", contentCards.map((card) => card.getProposition()) ); };
-
När återanropet
subscribeRulesetItems
anropas finns även en bekvämlighetsfunktion med namnetcollectEvent
. Den här funktionen används för att skicka Experience Edge-händelser för att spåra interaktioner, visningar och andra användaråtgärder. I det här exemplet spårar collectEvent när någon klickar på ett innehållskort. Om du klickar på knappen på innehållskortet dirigeras dessutom webbläsaren tillactionUrl
som anges av kampanjen.code language-none const handleContentCardClick = (evt) => { const cardEl = evt.target.closest(".card"); if (!cardEl) { return; } const isAnchor = evt.target.nodeName === "A"; const card = contentCards.find((card) => card.id === cardEl.dataset.id); if (!card) { return; } collectEvent("interact", [card.getProposition()]); if (isAnchor) { evt.preventDefault(); evt.stopImmediatePropagation(); const { actionUrl } = card; if (actionUrl && actionUrl.length > 0) { window.location.href = actionUrl; } } };
Viktiga kommentarer key-observations
personalizationStorageEnabled
Alternativet personalizationStorageEnabled
är inställt på true
i kommandot configure
. Detta garanterar att tidigare kvalificerade innehållskort lagras och fortsätter att visas i alla användarsessioner.
Utlösare
Innehållskort har stöd för anpassade utlösare som utvärderas på klientsidan. När en utlösarregel har uppfyllts visas ytterligare innehållskort. Det här exemplet använder fyra olika kampanjer, en för varje innehållskort, som alla delar samma yta: web://alloy-samples.adobe.com/#content-cards-sample
. Tabellen nedan visar utlösarreglerna för varje kampanj och hur de kan uppfyllas.
Kommandot evaluateRulesets
aktiveras när du klickar på knapparna Insättningsfonder och Dela på sociala medier. Varje knapp anger den relevanta decisionContext
för att uppfylla reglerna som definierats för respektive kampanj.
document.getElementById("action-button-1").addEventListener("click", () => {
alloy("evaluateRulesets", {
renderDecisions: true,
personalization: {
decisionContext: {
action: "deposit-funds",
},
},
});
});
document.getElementById("action-button-2").addEventListener("click", () => {
alloy("evaluateRulesets", {
renderDecisions: true,
personalization: {
decisionContext: {
action: "social-media",
},
},
});
});