在Web SDK中使用第一方设备ID
Adobe Experience Platform Web SDK使用Cookie为网站访客分配Adobe Experience Cloud ID (ECID)以跟踪用户行为。 要消除浏览器对Cookie有效期的限制,您可以设置和管理自己的设备标识符,称为第一方设备ID (FPID)。
先决条件 prerequisites
在开始之前,请确保您熟悉身份数据在Web SDK中的工作方式,包括ECID和identityMap
。 有关详细信息,请参阅Web SDK🔗中有关身份数据的概述。
第一方设备ID格式要求 formatting-requirements
Edge Network仅接受符合UUIDv4格式的ID。 将拒绝不采用UUIDv4格式的设备ID。
- UUIDs是唯一的、随机的,发生冲突的概率可以忽略不计。
- 无法使用IP地址或任何其他个人身份信息(PII)为UUIDv4设定种子。
- 用于生成UUIDs的库可用于每种编程语言。
使用您自己的服务器设置FPID Cookie set-cookie-server
通过您自己的服务器设置Cookie时,您可以使用各种方法防止Cookie因浏览器策略而受到限制:
- 使用服务器端脚本语言生成Cookie
- 设置Cookie以响应对子域或网站上的其他端点发出的API请求
- 使用CMS生成Cookie
- 使用CDN生成Cookie
此外,您应始终在域的A
记录下设置FPID Cookie。
document.cookie
方法设置的Cookie几乎永远不会受到浏览器策略的保护,这些策略会限制Cookie的持续时间。何时设置Cookie when-to-set-cookie
最好在向Edge Network发出任何请求之前设置FPID Cookie。 但是,在无法实现的情况下,ECID仍将使用现有方法生成,并充当主要标识符,前提是Cookie存在。
假设ECID最终受到浏览器删除策略的影响,但FPID未受到影响,则FPID将在下次访问时成为主要标识符,并用于在每次后续访问时为ECID设定种子。
设置Cookie的过期时间 set-expiration
在实施FPID功能时,应仔细考虑设置Cookie的过期时间。 在做出决定时,您应该考虑贵组织运营的国家或地区以及其中每个地区的法律和政策。
作为此决策的一部分,您可能希望采用全公司Cookie设置策略,或根据您运营的每个区域设置中的用户而有所不同。
无论您为Cookie的初始过期时间选择的设置如何,都必须确保包含每次发生对网站的新访问时都会延长Cookie过期时间的逻辑。
Cookie标记的影响 cookie-flag-impact
有各种Cookie标记会影响Cookie在不同浏览器中的处理方式:
HTTPOnly
http-only
无法使用客户端脚本访问使用HTTPOnly
标志设置的Cookie。 这意味着,如果在设置FPID时设置了HTTPOnly
标记,则必须使用服务器端脚本语言来读取包含在identityMap
中的Cookie值。
如果您选择让Edge Network读取FPID Cookie的值,则设置HTTPOnly
标志可确保任何客户端脚本均无法访问该值,但不会对Edge Network读取Cookie的能力产生任何负面影响。
HTTPOnly
标记不会影响可能会限制Cookie生命周期的Cookie策略。 但是,在设置并读取FPID的值时,您仍应考虑它。Secure
secure
使用Secure
属性设置的Cookie仅通过HTTPS协议以加密请求发送到服务器。 使用此标记有助于确保中间人攻击者无法轻松访问Cookie的值。 如果可能,最好设置Secure
标志。
SameSite
same-site
SameSite
属性允许服务器确定是否随跨站点请求一起发送Cookie。 属性提供了一些针对跨站点伪造攻击的保护。 存在三个可能的值: Strict
、Lax
和None
。 请咨询您的内部团队,确定适合您组织的设置。
如果未指定SameSite
特性,则某些浏览器的默认设置现在为SameSite=Lax
。
ID层次结构 id-hierarchy
当ECID和FPID都存在时,将优先考虑ECID来标识用户。 这样可以确保当浏览器Cookie存储中存在现有的ECID时,它仍然是主要标识符,并且现有访客计数不会受到影响。 对于现有用户,在ECID过期或因浏览器策略或手动过程而被删除之前,FPID不会成为主标识。
身份按以下顺序排定优先级:
- ECID包含在
identityMap
中 - ECID存储在Cookie中
- FPID包含在
identityMap
中 - FPID存储在Cookie中
迁移到第一方设备ID migrating-to-fpid
如果您从以前的实施迁移到第一方设备ID,则可能很难在低级别上直观显示过渡情况。
为了帮助说明此过程,请考虑一个涉及以前访问过您网站的客户的情形,以及FPID迁移将如何影响在Adobe解决方案中识别该客户。
ECID
Cookie的优先级始终高于FPID
。使用第一方设备ID (FPID) using-fpid
第一方设备ID (FPIDs)使用第一方Cookie跟踪访客。 当使用使用DNS A记录(对于IPv4)或AAAA记录(对于IPv6)而不是DNS CNAME或JavaScript代码的服务器设置第一方Cookie时,它们最有效。
设置FPID Cookie后,在收集事件数据时,可以获取其值并将其发送到Adobe。 收集的FPIDs用于生成ECIDs,它们是Adobe Experience Cloud应用程序中的主要标识符。
您可以通过两种方式使用FPIDs:
方法1:为Web SDK调用配置CNAME,并在数据流中设置第一方ID Cookie setting-cookie-datastreams
要从您自己的域设置FPID Cookie,您需要为Web SDK调用配置您自己的CNAME (规范名称),然后在数据流配置中启用First Party ID Cookie功能。
步骤 1. 为Web SDK部署域 配置CNAME
DNS中的CNAME记录允许您创建一个域名之间的别名。 这有助于使第三方服务看起来像是您自己的域的一部分,从而使其Cookie看起来像第一方Cookie。
示例
假设您想在网站mywebsite.com
上实施Web SDK。 Web SDK将数据发送到edge.adobedc.net
域的Edge Network。
- 您的网站
mywebsite.com
使用Web SDK域edge.adobedc.net
将数据发送到Edge Network。 - 由
edge.adobedc.net
设置的Cookie被视为第三方Cookie,因为它们并非来自您的mywebsite.com
域。 根据您的用户浏览器,第三方Cookie可能会被阻止,并且您的数据无法访问Edge Network。
- 创建一个部署Web SDK的子域,如
metrics.mywebsite.com
。 - 您在DNS系统中设置了CNAME记录,以便
metrics.mywebsite.com
指向edge.adobedc.net
。 - 当您的网站通过
metrics.mywebsite.com
设置Cookie到浏览器时,它们将显示为来自mywebsite.com
(第一方)而不是edge.adobedc.net
(第三方)。 这降低了第一方ID Cookie被阻止的可能性,从而确保更准确的数据收集。
使用CNAME启用第一方数据收集后,将对向数据收集端点发出的请求发送您域的所有Cookie。
要使用此功能,您需要在域的顶级设置FPID Cookie,而不是在特定的子域设置。 如果您在子域中设置它,则Cookie值将不会发送到Edge Network,FPID解决方案将不会按预期工作。
步骤 2. 为您的数据流启用 第一方ID Cookie 功能
配置CNAME后,必须为数据流启用 第一方ID Cookie 选项。 此设置会告知Edge Network在查找第一方设备ID时引用指定的Cookie,而不是在标识映射中查找此值。
请参阅数据流配置文档以了解如何设置数据流。
有关第一方Cookie如何与Adobe Experience Cloud配合使用的更多详细信息,请参阅有关第一方Cookie的文档。
在启用此设置时,必须提供预期存储FPID的Cookie的名称。
UUID
。 使用第一方ID功能时,生成ECID时未使用Visitor ID服务,这会导致无法同步第三方ID。当您使用第一方ID时,由于Audience Manager合作伙伴ID同步主要基于
UUIDs
或DIDs
,因此不支持在合作伙伴平台中激活的Audience Manager功能。 从第一方ID派生的ECID未链接到UUID
,使其不可寻址。方法2:在identityMap
中使用FPID identityMap
作为将FPID存储在您自己的Cookie中的替代方法,您可以通过身份映射将FPID发送到Edge Network。
以下是如何在identityMap
中设置FPID的示例:
{
"identityMap": {
"FPID": [
{
"id": "123e4567-e89b-42d3-9456-426614174000",
"authenticatedState": "ambiguous",
"primary": true
}
]
}
}
与其他标识类型一样,您可以在identityMap
中包含FPID和其他标识。 以下是经过身份验证的CRM ID所包含的FPID的示例:
{
"identityMap": {
"FPID": [
{
"id": "123e4567-e89b-42d3-9456-426614174000",
"authenticatedState": "ambiguous",
"primary": false
}
],
"EMAIL": [
{
"id": "email@mail.com",
"authenticatedState": "authenticated",
"primary": true
}
]
}
}
如果启用第一方数据收集时,如果FPID包含在Edge Network正在读取的Cookie中,则应当仅捕获经过身份验证的CRM ID:
{
"identityMap": {
"EMAIL": [
{
"id": "email@mail.com",
"authenticatedState": "authenticated",
"primary": true
}
]
}
}
以下identityMap
将导致来自Edge Network的错误响应,因为它缺少FPID的primary
指示器。 identityMap
中存在的ID中至少有一个必须标记为primary
。
{
"identityMap": {
"FPID": [
{
"id": "123e4567-e89b-12d3-a456-426614174000",
"authenticatedState": "ambiguous"
}
],
"EMAIL": [
{
"id": "email@mail.com",
"authenticatedState": "authenticated"
}
]
}
}
在这种情况下,Edge Network返回的错误响应将类似于以下内容:
{
"type": "https://ns.adobe.com/aep/errors/EXEG-0306-400",
"status": 400,
"title": "No primary identity set in request (event)",
"detail": "No primary identity found in the input event. Update the request accordingly to your schema and try again.",
"report": {
"requestId": "{REQUEST_ID}",
"configId": "{CONFIG_ID}",
"orgId": "{ORG_ID}"
}
}
常见问题解答 faq
以下是有关第一方设备ID的常见问题解答列表。
植入ID与仅生成ID有何不同?
种子设定的概念是唯一的,因为传递到Adobe Experience Cloud的FPID使用确定性算法转换为ECID。 每次将相同的FPID发送到Edge Network时,相同的ECID都是从FPID中植入的。
何时应生成第一方设备ID?
为了减少潜在的访客虚增,应在使用Web SDK发出您的第一个请求之前生成FPID。 但是,如果您无法执行此操作,仍将为该用户生成ECID,并将用作主要标识符。 在ECID不再存在之前,生成的FPID不会成为主标识符。
哪些数据收集方法支持第一方设备ID?
当前仅Web SDK支持第一方设备ID。
第一方设备ID是否存储在任何Platform或Experience Cloud解决方案上?
使用FPID为ECID设定种子后,它将从identityMap
中删除,并替换为已生成的ECID。 FPID未存储在任何Adobe Experience Platform或Experience Cloud解决方案中。