Experience Cloud ID (ECID) Service
Gemaakt voor:
- Ontwikkelaar
Experience Cloud ID (ECID) Integratie
Hoewel u de Target SDK's voor het ophalen van inhoud van Target kan krachtig zijn, de toegevoegde waarde van het gebruiken van Experience Cloud ID (ECID) voor het bijhouden van gebruikers loopt verder dan Adobe Target. Met de ECID kunt u gebruikmaken van Adobe Experience Cloud producten en kenmerken, zoals A4T-rapportage en Adobe Audience Manager (AAM) segmenten.
De ECID wordt gegenereerd en onderhouden door visitor.js
, die haar eigen staat handhaaft. De visitor.js
bestand maakt een cookie met de naam AMCV_{organizationId}
, die wordt gebruikt door Target SDK's voor ECID-integratie. Wanneer de Target response is returned, you need to update the Visitor instance on the client side with thevisitorState
geretourneerd door Target SDK's.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ECID (Visitor API) Integration Sample</title>
<script src="VisitorAPI.js"></script>
<script>
Visitor.getInstance("${organizationId}", {serverState: ${visitorState}});
</script>
</head>
<body>
<pre>Sample content</pre>
</body>
</html>
const express = require("express");
const cookieParser = require("cookie-parser");
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const TEMPLATE = `
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ECID (Visitor API) Integration Sample</title>
<script src="VisitorAPI.js"></script>
<script>
Visitor.getInstance("${organizationId}", {serverState: ${visitorState}});
</script>
</head>
<body>
<pre>${content}</pre>
</body>
</html>
`;
const app = express();
const targetClient = TargetClient.create(CONFIG);
app.use(cookieParser());
// We assume that VisitorAPI.js is stored in "public" folder
app.use(express.static(__dirname + "/public"));
function saveCookie(res, cookie) {
if (!cookie) {
return;
}
res.cookie(cookie.name, cookie.value, {maxAge: cookie.maxAge * 1000});
}
const getResponseHeaders = () => ({
"Content-Type": "text/html",
"Expires": new Date().toUTCString()
});
function sendSuccessResponse(res, response) {
res.set(getResponseHeaders());
const result = TEMPLATE
.replace("${organizationId}", CONFIG.organizationId)
.replace("${visitorState}", JSON.stringify(response.visitorState))
.replace("${content}", response);
saveCookie(res, response.targetCookie);
res.status(200).send(result);
}
function sendErrorResponse(res, error) {
res.set(getResponseHeaders());
res.status(500).send(error);
}
app.get("/abtest", async (req, res) => {
const visitorCookie = req.cookies[TargetClient.getVisitorCookieName(CONFIG.organizationId)];
const targetCookie = req.cookies[TargetClient.TargetCookieName];
const request = {
execute: {
mboxes: [{
address: { url: req.headers.host + req.originalUrl },
name: "a1-serverside-ab"
}]
}};
console.log("Request", request);
try {
const response = await targetClient.getOffers({ request, visitorCookie, targetCookie });
sendSuccessResponse(res, response);
} catch (error) {
sendErrorResponse(res, error);
}
});
app.listen(3000, function () {
console.log("Listening on port 3000 and watching!");
});
@Controller
public class TargetControllerSample {
@Autowired
private TargetClient targetClient;
@GetMapping("/")
public String targetMcid(Model model, HttpServletRequest request, HttpServletResponse response) {
Context context = getContext(request);
TargetDeliveryRequest targetDeliveryRequest = TargetDeliveryRequest.builder()
.context(context)
.prefetch(getPrefetchRequest())
.cookies(getTargetCookies(request.getCookies()))
.build();
TargetDeliveryResponse targetResponse = targetClient.getOffers(targetDeliveryRequest);
model.addAttribute("visitorState", targetResponse.getVisitorState());
model.addAttribute("organizationId", "0DD934B85278256B0A490D44@AdobeOrg");
setCookies(targetResponse.getCookies(), response);
return "targetMcid";
}
}
ECID met integratie van klant-id
Om gebruikersaccounts en aanmeldingsgegevens van bezoekers bij te houden, customerIds
kan via Target SDK's.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ECID (Visitor API) Integration Sample</title>
<script src="VisitorAPI.js"></script>
<script>
Visitor.getInstance("${organizationId}", {serverState: ${visitorState}});
</script>
</head>
<body>
<pre>Sample content</pre>
</body>
</html>
const express = require("express");
const cookieParser = require("cookie-parser");
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const TEMPLATE = `
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ECID (Visitor API) with Customer IDs Integration Sample</title>
<script src="VisitorAPI.js"></script>
<script>
Visitor.getInstance("${organizationId}", {serverState: ${visitorState}});
</script>
</head>
<body>
<pre>${content}</pre>
</body>
</html>
`;
const app = express();
const targetClient = TargetClient.create(CONFIG);
app.use(cookieParser());
// We assume that VisitorAPI.js is stored in "public" folder
app.use(express.static(__dirname + "/public"));
function saveCookie(res, cookie) {
if (!cookie) {
return;
}
res.cookie(cookie.name, cookie.value, {maxAge: cookie.maxAge * 1000});
}
const getResponseHeaders = () => ({
"Content-Type": "text/html",
"Expires": new Date().toUTCString()
});
function sendSuccessResponse(res, response) {
res.set(getResponseHeaders());
const result = TEMPLATE
.replace("${organizationId}", CONFIG.organizationId)
.replace("${visitorState}", JSON.stringify(response.visitorState))
.replace("${content}", response);
saveCookie(res, response.targetCookie);
res.status(200).send(result);
}
function sendErrorResponse(res, error) {
res.set(getResponseHeaders());
res.status(500).send(error);
}
app.get("/abtest", async (req, res) => {
const visitorCookie = req.cookies[TargetClient.getVisitorCookieName(CONFIG.organizationId)];
const targetCookie = req.cookies[TargetClient.TargetCookieName];
const customerIds = {
"userid": {
"id": "67312378756723456",
"authState": TargetClient.AuthState.AUTHENTICATED
}
};
const request = {
execute: {
mboxes: [{
address: { url: req.headers.host + req.originalUrl },
name: "a1-serverside-ab"
}]
}};
try {
const response = await targetClient.getOffers({ request, visitorCookie, targetCookie, customerIds });
sendSuccessResponse(res, response);
} catch (error) {
sendErrorResponse(res, error);
}
});
app.listen(3000, function () {
console.log("Listening on port 3000 and watching!");
});
@Controller
public class TargetControllerSample {
@Autowired
private TargetClient targetJavaClient;
@GetMapping("/targetMcid")
public String targetMcid(Model model, HttpServletRequest request, HttpServletResponse response) {
Context context = getContext(request);
Map<String, CustomerState> customerIds = new HashMap<>();
customerIds.put("userid", CustomerState.authenticated("67312378756723456"));
customerIds.put("puuid", CustomerState.unknown("550e8400-e29b-41d4-a716-446655440000"));
TargetDeliveryRequest targetDeliveryRequest = TargetDeliveryRequest.builder()
.context(context)
.prefetch(getPrefetchRequest())
.cookies(getTargetCookies(request.getCookies()))
.customerIds(customerIds)
.build();
TargetDeliveryResponse targetResponse = targetJavaClient.getOffers(targetDeliveryRequest);
model.addAttribute("visitorState", targetResponse.getVisitorState());
model.addAttribute("organizationId", "0DD934B85278256B0A490D44@AdobeOrg");
setCookies(targetResponse.getCookies(), response);
return "targetMcid";
}
}
ECID en Analytics Integratie
Om optimaal te profiteren van de Target SDK's en de krachtige analysemogelijkheden van Adobe Analytics, kunt u integratie gebruiken over ECID, Analytics, en Target.
Integraties met ECID gebruiken Analytics, en Target Hiermee kunt u:
- Segmenten uit Adobe Audience Manager gebruiken (AAM)
- De gebruikerservaring aanpassen op basis van de inhoud die is opgehaald uit Target
- Zorg ervoor dat alle gebeurtenissen en succesmetriek worden verzameld in Analytics
- Gebruiken Analytics" krachtige vragen en profiteer van de fantastische rapportavisualisaties
Integraties in ECID, Analytics, en Target geen speciale verwerking voor analyses aan de serverzijde vereist. Voeg in plaats daarvan, zodra u de ECID hebt geïntegreerd, AppMeasurement.js
(Analytics bibliotheek) aan de clientzijde. Analytics gebruikt u vervolgens de instantie Visitor om te synchroniseren met Target.
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ECID and Analytics integration Sample</title>
<script src="VisitorAPI.js"></script>
<script>
Visitor.getInstance("${organizationId}", {serverState: ${visitorState}});
</script>
</head>
<body>
<p>Sample content</p>
<script src="AppMeasurement.js"></script>
<script>var s_code=s.t();if(s_code)document.write(s_code);</script>
</body>
</html>
const express = require("express");
const cookieParser = require("cookie-parser");
const TargetClient = require("@adobe/target-nodejs-sdk");
const CONFIG = {
client: "acmeclient",
organizationId: "1234567890@AdobeOrg"
};
const TEMPLATE = `
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<title>ECID and Analytics integration Sample</title>
<script src="VisitorAPI.js"></script>
<script>
Visitor.getInstance("${organizationId}", {serverState: ${visitorState}});
</script>
</head>
<body>
<p>${content}</p>
<script src="AppMeasurement.js"></script>
<script>var s_code=s.t();if(s_code)document.write(s_code);</script>
</body>
</html>
`;
const app = express();
const targetClient = TargetClient.create(CONFIG);
app.use(cookieParser());
// We assume that VisitorAPI.js and AppMeasurement.js are stored in "public" directory
app.use(express.static(__dirname + "/public"));
function saveCookie(res, cookie) {
if (!cookie) {
return;
}
res.cookie(cookie.name, cookie.value, {maxAge: cookie.maxAge * 1000});
}
const getResponseHeaders = () => ({
"Content-Type": "text/html",
"Expires": new Date().toUTCString()
});
function sendSuccessResponse(res, response) {
res.set(getResponseHeaders());
const result = TEMPLATE
.replace("${organizationId}", CONFIG.organizationId)
.replace("${visitorState}", JSON.stringify(response.visitorState))
.replace("${content}", response);
saveCookie(res, response.targetCookie);
res.status(200).send(result);
}
function sendErrorResponse(res, error) {
res.set(getResponseHeaders());
res.status(500).send(error);
}
app.get("/abtest", async (req, res) => {
const visitorCookie = req.cookies[TargetClient.getVisitorCookieName(CONFIG.organizationId)];
const targetCookie = req.cookies[TargetClient.TargetCookieName];
const request = {
execute: {
mboxes: [{
address: { url: req.headers.host + req.originalUrl },
name: "a1-serverside-ab"
}]
}};
try {
const response = await targetClient.getOffers({ request, visitorCookie, targetCookie });
sendSuccessResponse(res, response);
} catch (error) {
sendErrorResponse(res, error);
}
});
app.listen(3000, function () {
console.log("Listening on port 3000 and watching!");
});
@Controller
public class TargetControllerSample {
@Autowired
private TargetClient targetJavaClient;
@GetMapping("/targetAnalytics")
public String targetMcid(Model model, HttpServletRequest request, HttpServletResponse response) {
Context context = getContext(request);
Map<String, CustomerState> customerIds = new HashMap<>();
customerIds.put("userid", CustomerState.authenticated("67312378756723456"));
customerIds.put("puuid", CustomerState.unknown("550e8400-e29b-41d4-a716-446655440000"));
TargetDeliveryRequest targetDeliveryRequest = TargetDeliveryRequest.builder()
.context(context)
.prefetch(getPrefetchRequest())
.cookies(getTargetCookies(request.getCookies()))
.customerIds(customerIds)
.trackingServer("imsbrims.sc.omtrds.net")
.build();
TargetDeliveryResponse targetResponse = targetJavaClient.getOffers(targetDeliveryRequest);
model.addAttribute("visitorState", targetResponse.getVisitorState());
model.addAttribute("organizationId", "0DD934B85278256B0A490D44@AdobeOrg");
setCookies(targetResponse.getCookies(), response);
return "targetAnalytics";
}