【老司机精选】基于隐私保护的广告归因

作者:Hummer,现在就职于字节跳动,曾经是从事过 iOS 根底和业务架构研发,也做过 Flutter 根底组件研发,现在从事隐私安全方向的研发作业。

审阅:Leo,iOS开发,老司机技能周报编辑,抖音iOS根底体会负责人

文章的开头会从 cookies、广告和追寻的联络讲起,然后开端介绍广告归因的前史,引申出 Apple 的匿名化点击衡量东西 PCM(Private Click Measurement:一款在维护用户隐私的情况下,一同协助广告商衡量跨站广告转化作用的东西),并进一步介绍 PCM 的最新功用(app-to-web 的广告转化归因),最终介绍 SKAdNetwork 曩昔一年更新的功用。

Cookie 与广告

Cookie 在互联网广告行业中一向扮演着重要的人物,由于它是广告主进行归因的重要根底。广告归因简略来说便是把广告相关活动和广告作用进行相关的进程,比方用户在查找网站点击了一个推行链接,进入了广告主的网站,然后购买了一款产品,将购买行为和点击行为进行相关的进程即为一次广告归因。当然你肯定也听过一个较为抽象的名词——转化,即上述举例中的一次成功的购买行为能够视为一个转化。为了更好的了解 cookie 和 归因,咱们再看一个依据具体的例子。

【老司机精选】基于隐私保护的广告归因

假设你是一位滑板爱好者,想网购一款合适的专业长滑板,所以你翻开查找引擎(比方:searchlongboard.biz),然后输入了要害字“滑板”,这时它为你展现很多条滑板商店的查找成果,所以你点击了榜首条,这时查找引擎会在阅读器里边存储一个 cookie ,记录了你的查找前史或许点击的链接,然后阅读器跳转到了一个出售各类专业滑板的商店(比方:longboardshop.biz),你把自己十分喜爱的一款滑板参加了购物车并完成了付款,此刻查找引擎之前存储的 cookie 发生更新,把你的点击和购买行为相关到一同,这样能够十分高效地进行广告转化作用的衡量。像 searchforlongboard.biz 这样的网站还能够通过记录你的点击、阅读的网站、阅读时长等信息构建你的用户画像,并在你不知情的情况下,把你的用户画像出售给了广告主。

以上行为称为跨网域追寻。大部分用户不期望在网上冲浪时泄漏自己的隐私信息,包括爱好点、点击行为、个人信息等,追寻会失去用户对网站的信任感并形成商业和用户间的错位。现在越来越多的用户开端寻觅反制措施,比方运用广告屏蔽插件限制网站的追寻行为,从用户视点来讲,广告屏蔽插件确实是一个不错的选择,可是也会导致一些网站兼容问题,可能导致阅读体会不佳。此外,由于插件会屏蔽一切的广告,天然导致广告归因活动不再有任何可能性。

【老司机精选】基于隐私保护的广告归因

用户和商业网站在广告追寻共识上的分歧严峻影响了网页的阅读体会,所以 Apple 开端研发一款既能维护用户隐私又不让广告行业过度受损的技能。2017年 Apple 推出了智能防追寻技能( Intelligent Tracking Prevention 简称 ITP),它能够辨认出追寻者并避免用户被追寻者画像,一同不影响完整的网页阅读体会。还是以上面买滑板为例,你点击了查找引擎推荐的成果,它在阅读器里记录了相关的 cookie ,然后你在滑板电商网站上完成了一笔交易,此刻 ITP 会阻挠该电商网站将 cookie 或许其他数据发送给第三方,比方查找引擎公司,因而查找引擎便无法在你点击链接和购买滑板之间树立联络。

当然对用户的追寻不仅仅发生在网页端,一同也发生在移动端。IDFA(Identifier For Advertisers)也称为广告标识符,长久以来一向被用于对 iOS 用户地跨 app 对追寻和画像。Apple 在 2020 年推出了 SKAdNetwork 框架,用于广告网络在对 app 装置进行归因时维护用户的隐私,之后会对它进行具体介绍。

在用户不知情、不同意的情况下擅自分享用户的个人数据的行为严峻侵犯了用户的个人隐私。不仅 像 Apple 这样的商业公司开端意识到维护用户隐私的重要性,越来越多国家或区域的监管组织也开端重视用户隐私,比方 CCPA 和 GDPR 就规则网站必须奉告用户,其数据是怎么被运用的,此外,越来越多的阅读器也开端内置防追寻的功用。因而,依据追寻用户的商业形式注定是不行继续的。

PCM

怎么在维护用户隐私和坚持广告商业繁荣之间获得平衡成为了十分重要的课题。Apple 在这个问题上给出的答案便是匿名化点击衡量(PCM),PCM 是 W3C 隐私维护小组的一个提案,为了成为行业通用标准,还需求更多阅读器厂商进行适配。PCM 是一种纯本地化的广告归因机制,意味着有限的信息能够阻挠网站辨认特定用户,运用 PCM 时用户不会被追寻,所以 app 不需求用 App Tracking Transparency 弹窗提醒用户,现在 Safari 现已完全支撑 web-to-web 和 app-to-web 的广告归因。

web-to-web 归因

还是以滑板为例来介绍 PCM 的作业原理:当你点击了搜素引擎的推行链接,该链接会发生两个信息,Source ID 和 方针网站(Destination Site),其中 Source ID 是标识本次广告活动的一个 8 比特大小的值,方针网站是指产品链接或广告主的网站,这两个值将会被存储在阅读器中;当你进入滑板的电商网站,并将喜爱的滑板参加了购物车,此刻电商网站能够运用一个值记录此次的转化行为,这个值称为触发数据(Trigger Data),触发数据是 4 比特大小的值,能够用于表示转化事情,比方能够是点击了喜爱按钮或许将产品参加了购物车,又或许是完成了一次产品交易,这个值也会储存在阅读器中。

咱们注意到一切的数据都存储在本地设备的阅读器上,那么怎么将这些信息报送给查找引擎和电商网站呢?当阅读器检测到一次成功的转化时,会将这些信息整理成一份陈述,阅读器会在转化发生后的 24 到 48 小时内随机地向查找引擎和电商网站发送这份陈述,这样能够允许网站对广告转化成果进行归因,一同又确保用户不会被跨域追寻。这种随机推迟的机制能有用避免网站通过时刻节点将点击和转化相关起来从而辨认出特定用户。在最新的 iOS 15 和 macOS 12 体系中,还参加了 IP 地址维护机制,在发送陈述的时候避免 IP 地址被用于生成设备指纹。

开发实战

【老司机精选】基于隐私保护的广告归因

如图所示,在查找引擎的推行链接上增加了两个特点:

// Mark an ad with PCM data on the source site
<a href="https://longboardshop.biz/lemonYellowLongboard.html"
   attributionsourceid="55"
   attributiondestination="https://longboardshop.biz"/>

它们表示的意思是,柠檬色的滑板的营销 ID 是 55,该广告将会在 longboardshop.biz 的网站上发生转化。

【老司机精选】基于隐私保护的广告归因

而在电商网站侧,能够通过 HTTP GET 恳求向查找网站发送触发事情:

// Specify the trigger data for a conversion
<img src="https://searchforlongboardbiz/convert/?action=addToCart />

然后查找网站会回来一个固定格式的地址:

https://searchlongboard.biz/.well-known/private-click-measurement/trigger-attribution/15/

那么参加购物车的转化值便是 15(Trigger Data),假如参加购物车之后又发生了更重要的转化,比方购买行为,那么能够运用优先级更高的 6 比特数据掩盖之前的转化值。这一步的目的是兼容现有的归因计划,方便过渡到 PCM 。

【老司机精选】基于隐私保护的广告归因

最终一步为发送陈述,陈述将以 JSON 格式发送到查找和电商网站的固定地址:

https://xxx.biz/.well-known/private-click-measurement/report-attribution/

这份陈述将转化和点击相关到了一同,可是并不涉及任何能够辨认个人用户的信息,网站只知道某位用户在某个地点将一款柠檬色的滑板参加了购物车。

Safari 在发送陈述时会将用户的 IP 地址躲藏起来,以避免被查找引擎和广告主这样的公司所滥用。

【老司机精选】基于隐私保护的广告归因

app-to-web 归因

​ 除了 web-to-web 的归因场景,现在 PCM 支撑进行 app-to-web 的归因场景了,接下来咱们看一下 app-to-web 的归因场景是怎么运作的。首要,你翻开一款交际软件,然后你看到了一款滑板的广告,所以想买滑板的你点击了这个广告,此刻 Source ID 和方针网站两个特点信息会被存储在本地设备上,之后跳转到了 Safari 并翻开了滑板电商的网站,你点击了参加购物车按钮出发了转化事情,阅读器把转化值存储起来,在接下来的 24 到 48 小时内向交际 app 和电商网站陈述归因成果。 ​

开发实战

交际 app 的陈述接纳地址需求在 info.plist 中运用 NSAdvertisingAttributionReportEndpoint 进行注册:

【老司机精选】基于隐私保护的广告归因

体系会主动在这个地址后边拼接上一个固定途径:

https://example.com/.well-known/private-click-measurement/report-attribution

为了确保转化是由用户的点击触发的,Apple 供给了一个新的组件——UIEventAttributionView,将它放置在广告之上,能够用于验证点击事情发生在归因陈述发送之前。

let eventAttributionView = UIEventAttributionView()
eventAttributionView.translatesAutoresizingMaskIntoConstraints = false
adView.addSubview(eventAttributionView)
NSLayoutConstraint.activate([
    adView.topAnchor.constraint(equalTo: eventAttributionView.topAnchor),
    adView.leadingAnchor.constraint(equalTo: eventAttributionView.leadingAnchor),
    adView.trailingAnchor.constraint(equalTo: eventAttributionView.trailingAnchor),
    adView.bottomAnchor.constraint(equalTo: eventAttributionView.bottomAnchor)
])

当用户点击广告之后需求创立一个 UIEventAttribution 实例,在 app 翻开阅读器时,这个UIEventAttribution 中的信息会被传递给电商网站。

let adURL = URL(string: "https://longboardshop.biz/lemonYellowLongboard.html")!
let eventAttribution =
    UIEventAttribution(sourceIdentifier: 55,
                       destinationURL: adURL,
                       sourceDescription: "Lemon Yellow Longboard ad.",
                       purchaser: "Longboard Shop, Inc.")

UIEventAttribution 实例会包括以下信息:

  • Source ID:广告活动标识符,比方柠檬色的滑板
  • 方针网站URL:转化发生的地方,比方滑板电商网站地址
  • 对Source的描绘:对点击广告的描绘
  • 广告主:对广告购买者的描绘

假如 app 生命周期是依据 UIScene 的,只需求创立一个 OpenExternalURLOptions 目标,并作为参数传递给 open 办法即可:

let sceneOpenURLOptions = UIScene.OpenExternalURLOptions()
sceneOpenURLOptions.eventAttribution = eventAttribution
self.view.window?.windowScene?.open(adURL,
                                    options: sceneOpenURLOptions,
                                    completionHandler: nil)

假如 app 生命周期是依据 UIApplication 的,需求将 OpenExternalURLOptions 目标包裹在字典中再传递给 open 办法:

let appOpenURLOptions: [UIApplication.OpenExternalURLOptionsKey : Any] = [
    .eventAttribution: eventAttribution
]
UIApplication.shared.open(adURL,
                          options: appOpenURLOptions,
                          completionHandler: nil)

PCM 防诈骗

由于 PCM 的归因陈述不包括任何可辨认身份的信息,所以接纳者不能完全信任收到的归因陈述。为了解决信任问题,PCM 运用加密签名的方式避免诈骗,其核心思维是在陈述接纳者看不到音讯的情况下对陈述进行签名,其中包括的数学原理是 RSA 盲签名。接下来介绍怎么运用 RSA 盲签名机制避免诈骗: ​

【老司机精选】基于隐私保护的广告归因

当你点击查找引擎上的推行链接时,阅读器会向查找网站恳求它的公钥(e,n),当归因事情发生时会阅读器会生成一个归因陈述,此刻阅读器期望查找网站能够对该陈述签名一同又不能读取陈述的内容。

【老司机精选】基于隐私保护的广告归因

能够运用该公式生成一个躲藏音讯,其中 m 能够是陈述原文也能够是陈述的哈希值,而 r 是与公钥中的 n 互质的较大随机数,将躲藏音讯发送给查找网站。

【老司机精选】基于隐私保护的广告归因

【老司机精选】基于隐私保护的广告归因

查找网站接纳到该躲藏音讯后,运用它的私钥(d,n)按照上面公式对该音讯进行签名,再将成果回来给阅读器。

【老司机精选】基于隐私保护的广告归因

【老司机精选】基于隐私保护的广告归因
阅读器依据上面的公式去除签名成果中的 r 因子,便得到了查找网站对原始陈述的签名。

【老司机精选】基于隐私保护的广告归因

在归因事情发生的 24 小时后,阅读器会将签名的陈述发送给查找网站和电商网站,二者便能够利用查找网站的公钥对陈述的可靠性进行验证。

【老司机精选】基于隐私保护的广告归因

PCM 的测验形式

关于开发者而言怎么对 PCM 进行测验是十分要害的一环,而 Apple 也在最新 iOS / macOS 体系的 Safari 中内置了 PCM debug 形式,翻开方式如下图所示,敞开 debug 形式后,归因陈述将会每 10 秒发送一次,而不是正常形式的 24 到 48 小时随机发送。

macOS体系上翻开方式: Safari -> 偏好设置 -> 高级,勾选“在菜单栏中显示开发菜单”,在“开发”菜单中翻开 PCM Debug 形式。

【老司机精选】基于隐私保护的广告归因
​ ​ iOS体系上翻开方式:
【老司机精选】基于隐私保护的广告归因

SKAdNetwork 新功用

首要让咱们一同回忆一下 SKAdNetwork 的作业原理。SKAdNetwork 的参与者有 3 个:广告网络,发布广告的运用和被推行的运用。

假如你在一款交际 app 的信息流中看到了一个和滑板有关的 app 的广告,那么这款滑板 app 的广告是由某个广告网络所供给的,交际 app 扮演了发布广告的人物,而这款滑板 app 便是被推行的 app 。

【老司机精选】基于隐私保护的广告归因
​当你点击了这款滑板 app 的广告后,会跳转到 App Store,一同广告网络的 ID、交际 app 的 ID、该广告的营销 ID、时刻戳以及其他防诈骗的信息当即以陈述的形式存储在 App Store 中。

然后你装置了滑板 app 这款软件,当榜首次翻开滑板 app 时,滑板 app 需求调用 StoreKit 供给的接口:

class func registerAppForAdNetworkAttribution()
class func updateConversionValue(_ conversionValue: Int)

二者选一即可,由于两个接口都能够用于触发归因定时器(24小时),差异在于后者能够运用一个更大的归因值重置定时器,只需这个 24 小时定时器的倒计时没有完毕,能够调用任意次该更新接口。

倒计时完毕之后,接下来的 0-24 小时内,App Store 会把归因陈述发送给广告网络。

【老司机精选】基于隐私保护的广告归因

关于 SKAdNetwork 更多更具体的内容能够回忆上一年 WWDC 两篇 session:Build trust through better privacy(《WWDC20 10676 – 通过更好的隐私维护与用户树立信任》) 和 What’s new with in-app purchase。

接下来咱们看一下在 WWDC20 之后,SKAdNetwork 更新了哪些功用。

支撑更安全的签名算法

SKAdNetwork 2.1 开端支撑更安全的 256 位密钥,该密钥用于生成每个广告的签名,更具体的内容能够参阅以下几篇文章: ​

  • Registering an ad network
  • Generating the signature to validate storekit-rendered ads
  • Generating the signature to validate view-through ads

支撑阅读型转化归因

SKAdNetwork 2.2 增加了对阅读型转化归因的支撑。 以下是 Google Analytics 对点击型转化和阅读型转化的解释:

点击型转化:不管投放了多少个不同的广告系列,转化功劳都会归于广告系列中最终点击的那个广告。 阅读型转化:假如在看到广告和发生转化之间没有发生任何点击,则不管投放了多少个不同的广告系列,转化功劳都会归于广告系列中用户最终看到的那个广告。

【老司机精选】基于隐私保护的广告归因
​ 要想运用 SKAdNetwork 的阅读型转化归因功用,需求以下步骤:

  1. 需求创立一个 SKAdImpression 目标的实例;
  2. 生成广告的签名;
  3. 在开端展现广告时调用 startImpression(_:completionHandler:)
  4. 完毕展现广告时调用 endImpression(_:completionHandler:)

更具体的步骤能够检查 Signing and Providing Ads 关于阅读型广告的介绍。

与阅读型转化一同引进的功用还有保真度参数,能够了解为一种优先级,点击型转化的保真度是 1 ,而阅读型转化的保真度是 0,意味着点击型转化的归因陈述比较于阅读型转化的归因陈述有更高的优先级。这其实呼应了广告归因的通用标准,即一次转化会优先归因到最终一次点击上,其次再归因到最终一次展现上。

支撑多方反应

【老司机精选】基于隐私保护的广告归因
​从 iOS 14.6 开端,SKAdNetwork 3.0 能够向 6 个广告网络发送归因陈述。

关于一次转化,体系会对广告网络进行排名,其依据是广告网络供给的广告的类型以及该广告最终展现的时刻,即间隔转化时刻点最近的广告排名更高,以及点击型转化比阅读型转化的排名更高,排名榜首的广告网络能够接纳到包括 conversion-valuesource-app-id 的归因陈述,而其他广告网络接纳到的陈述中不包括这两个值,而且 did-win 参数为 false

从 iOS 15 开端,广告主也能够接纳到归因陈述,只需求在 app 的 info.plist 中配置NSAdvertisingAttributionReportEndpoint 作为陈述接纳地址即可。

更具体的内容请参阅Receiving Ad Attributions and Postbacks

IP地址维护

在 iOS 15 体系上 SKAdNetwork 也享有 IP 地址维护的才能,该功用和 PCM 中的作用是共同,避免 IP 地址被广告网络或许广告主用对用户的追寻。

SKAdNetwork 的测验形式

运用 SKAdNetwork 的测验形式能够缩小发送归因陈述的时刻窗口,由一般形式下的 24-48 小时降低到 5-10 分钟,有利于加速开发速度。 进入 SKAdNetwork 的测验形式需求满意以下几个条件:

  1. 确保广告每次展现时的随机数(nonce)必须唯一;
  2. 用于生成广告签名的参数的次序必须正确;
  3. app 的 source-app-id 为 0 ,而且 app 的签名必须时 development 类型;
  4. 测验机上需求装置 SKAdNetwork 的描绘文件,下载方式参阅Downloading a Testing Profile。

总结

以上内容便是 WWDC21 上一切与广告归因相关内容的介绍,能够看出 Apple 在曩昔一年不断地完善 PCM 和 SKAdNetwork ,现在现已具备了 web-to-web、app-to-web 和 app-to-app 的归因才能,信任不久后 web-to-app 的归因功用也会到来。

重视咱们

咱们是「老司机技能周报」,一个继续寻求精品 iOS 内容的技能公众号。欢迎重视。

重视有礼,重视【老司机技能周报】,回复「2021」,领取 2017/2018/2019/2020 内参

支撑作者

在这里给大家推荐一下 《WWDC21 内参》 这个专栏,一共有 102 篇关于 WWDC21 的内容,本文的内容也来历于此。假如对其他内容感爱好,欢迎戳链接阅读更多 ~

WWDC 内参 系列是由老司机牵头组织的精品原创内容系列。 现已做了几年了,口碑一向不错。 主要是针对每年的 WWDC 的内容,做一次精选,并号召一群一线互联网的 iOS 开发者,结合自己的实践开发经历、苹果文档和视频内容做二次创造。