[Alpha]{class="badge informative"}
与服务器SDK的混合个性化
在混合个性化实施中,您的服务器请求个性化内容,而访客的浏览器会渲染该内容。 适用于JavaScript🔗的Adobe Experience Platform Server SDK或Server SDK在服务器构建页面时请求内容,并且Web SDK在浏览器中呈现内容。
与客户端个性化相比,此方法具有以下优势:
- Personalization已提前准备就绪。 服务器在构建页面时请求建议,因此浏览器不会等待单独向Edge Network发出请求,然后才能呈现内容。
- 闪烁更少。 由于建议已在页面中,因此浏览器可以在Web SDK加载后立即呈现这些建议。
- 服务器也可以使用这些决策。 例如,您的服务器可以在发送页面之前根据建议选择要加载哪些产品。
NOTE
服务器SDK采用Alpha格式。 在计划实施之前,请查看支持的功能。
工作原理 how-it-works
- 访客的浏览器向您的服务器请求一个页面。
- 您的服务器使用访客的
forRequest句柄上的personalization选项调用sendEvent。 结果包含访客的建议。 - 您的服务器包含其返回的HTML中的建议。
- 在浏览器中,Web SDK使用
applyPropositions命令呈现建议。 - Web SDK会为其呈现的建议发送一个显示事件。
先决条件 prerequisites
- 启用了Adobe Target或Adobe Journey Optimizer的数据流。 将其 访问类型 设置为混合身份验证,因为服务器发送经过身份验证的请求,而浏览器发送未经身份验证的请求。 请参阅身份验证。
- 服务器SDK 已安装且已配置至您的服务器。
- 您页面上的Web SDK使用相同的
orgId和datastreamId进行配置。
步骤1:在服务器上请求建议 server
当服务器处理页面请求时,请求该页面上表面或决策范围的建议。 显式设置页面URL,因为请求的Referer标头在导航期间包含 previous 页面。 请参阅上下文和转发的标头。
async function getPropositions(req) {
const visitor = alloy.forRequest({ request: req });
try {
const { propositions = [] } = await visitor.sendEvent({
xdm: {
eventType: "decisioning.propositionFetch",
web: {
webPageDetails: {
URL: `https://www.example.com${req.url}`
}
},
identityMap: {
Email: [{ id: "visitor@example.com", primary: true }]
}
},
personalization: {
surfaces: ["web://www.example.com/home#hero"],
decisionScopes: ["daily-special"]
}
});
return propositions;
} catch (error) {
// Render the default experience if personalization isn't available
console.error("Failed to fetch propositions", error);
return [];
}
}
服务器SDK不呈现建议或发送显示事件。 它只返回它们。 如果请求失败,将返回空数组,以使页面仍使用其默认内容渲染。
第2步:在页面中包含建议 page
将建议序列化到您的服务器返回的HTML中。 转义<字符,以便建议中的内容不能提前关闭<script>元素。
const propositions = await getPropositions(req);
const serialized = JSON.stringify(propositions).replace(/</g, "\\u003c");
res.end(`<!DOCTYPE html>
<html>
<head>
<script>window.serverPropositions = ${serialized};</script>
<!-- Web SDK base code and library -->
</head>
<body>
<div id="hero">Default hero content</div>
<div id="daily-special">Default special</div>
</body>
</html>`);
步骤3:在浏览器中呈现建议 browser
在页面上配置Web SDK后,将建议传递给applyPropositions。 对于不包含选择器的HTML选件,使用metadata告知Web SDK每个选件的放置位置。 请参阅呈现HTML选件。
alloy("applyPropositions", {
propositions: window.serverPropositions || [],
metadata: {
"daily-special": { selector: "#daily-special", actionType: "setHtml" }
}
}).then(({ propositions: renderedPropositions = [] }) => {
if (!renderedPropositions.length) { return; }
return alloy("sendEvent", {
xdm: {
eventType: "decisioning.propositionDisplay",
_experience: {
decisioning: {
propositions: renderedPropositions.map(({ id, scope, scopeDetails }) => ({
id,
scope,
scopeDetails
})),
propositionEventType: { display: 1 }
}
}
}
});
});
applyPropositions不会自行发送显示事件。 第二个sendEvent调用记录访客查看的建议。 请参阅管理显示事件。
保持访客身份一致 identity
为了进行准确的报告和个性化,服务器和浏览器必须以相同的方式识别访客:
服务器SDK不包含读取访客请求Cookie的Cookie服务。 有关Cookie服务必须实现的接口,请参阅平台服务。
recommendation-more-help
experience-platform-help-collection