当前位置: 首页 > news >正文

SKAdNetwork:从0到1

一、什么是SKAdNetwork

https://developer.apple.com/documentation/storekit/skadnetwork

iOS14.5开始,获取IDFA需要用户确认授权才可,此时SKAdNetwork 正式回归。

SKAdNetwork 是苹果在2018年推出的一个更加保护用户隐私的归因框架,并与2020年推出2.0版本,加入了源AppID,可识别出从哪里来的。
目的:高度保护用户隐私
其相对于IDFA来说,在不追踪用户隐私的情况下,达到归因的目的。一对一实现,非实时。IDFA可以一对多,实时归因流程如下:

二、种类

  1. 网站到网站
  2. 网站到App。网站以前是Cookie来区分的,苹果推出了 PCM (Private Click Measurement)
  3. App到App Store App。涉及到三方交互:Ad Networks、Publisher apps、Advertised Apps

三、归因流程

广告平台(Ad Networks):

  • 在苹果后台注册 SKAdNetworkIdentifier,例如:n38lu8286q.skadnetwork,可以注册多个,后续将所有相关ID提供给 “接入广告SDK的App” 人员
  • 提供广告SDK,内部代码:在广告页面进行点击的时候,调用苹果API:loadProductWithParameters,插入相应的参数,这时候苹果保存这些信息

接入广告SDK的App(Publisher Apps):

  • 接入广告SDK,将广告平台提供的所有 SKAdNetworkIdentifier 写入到 Info.plist 中
  • 在合适的时机相应地展示广告

被推广的App (Advertised Apps):

  • 启动时,调用苹果API:registerAppForAdNetworkAttribution,调用此方法后,会启动一个定时器来向苹果发送归因(24~48小时触发)(多次调用无效,只会生效第一次)。当然你可以并没有直接调用,有可能接入了第三方SDK AppsFlyer,他们会帮助调用,并把广告平台发来的归因数据给出(归因数据中在2.0版本中添加了一个 Redownload字段,来标识用户是否是重新安装。同时有 源AppIDConversion Value
  • 另外一个API:updateConversionValue,更新后,已启动定时器会重新开始计时,比如首次购买
  • 24~48小时触发归因后,苹果会将归因数据回传给广告平台。如果当前App(被推广的App)在Info.plist 填入了 NSAdvertisingAttributionReportEndpoint 字段来接收归因回调,那么苹果此时也会同步一份归因数据给当前App(iOS 15支持的 postback to Developer)
  • 在Info.plist 中填入 键值为 NSAdvertisingAttributionReportEndpoint 的回调地址(可选)
  • 测试:测试阶段可以配置 Testing profile 文件,能很快拿到归因,不用等24~48小时 (https://developer.apple.com/download/all/?q=SKAdNetwork)

四、开发者回传归因数据示例

{"app-id":1413608864,"campaign-id":3,"attribution-signature":"MEUCIFRozIX4hxGHiXUtFjSdy77SOVrCU8NY9pgfgL3dzNXbAiEA9oi7jPDHvy0NDdRRQFyIPxSj8NGMYELGcSf\\/hfQFHkQ=","fidelity-type":1,"transaction-id":"7e0909b1-0fb4-422b-85c4-9421c534281b","did-win":true,"version":"3.0","ad-network-id":"n38lu8286q.skadnetwork","redownload":false
}

五、开发者归因回调链接的要求(针对服务器)

https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint

提供的链接为一个服务器域名,需要支持https,且需是主域名支持而非子域名。例如AppsFlyer给出的归因链接: https://appsflyer-skadnetwork.com 。
注意事项:如果你使用的是子域名,苹果会直接忽略子域,自动向主域发送Post请求。例如你填入的域名是 https://appsflyer-skadnetwork.sub.com 其是子域,苹果这时候会忽略掉 sub,自动向主域 https://appsflyer-skadnetwork.com 发送。另外,如果发送失败,苹果最多会再尝试9次,苹果是通过接口返回的状态码是否是200来确认有没有发送成功的。

Replace example.com with your domain name. The system uses only the registrable part of the domain name, and ignores any subdomains.

接口要求:其可以接收 Post请求,content-type为: application/json。接口要求的最终形式如下(从.well-known开始到后面的苹果会主动拼接,不要填入,开发者只需填入https+域名部分即可)

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

可以使用Postman向如上两个最终接口各发一个Post请求,将【四】的示例数据放入body,content-type设置为application/json。如果服务器能够接收到数据,并返回200 的状态码,就是对的。

六、SKAdNetwork的版本生效规则

https://developer.apple.com/documentation/storekit/skadnetwork/skadnetwork_release_notes

SKAdNetwork 2.1:

  • The source app generates a signature for version 2.1.
  • The source app is built with the iOS 14 SDK or later.
  • The advertised app is App Store-signed and running on a device with iOS 14 or later.

SKAdNetwork 2.2:

  • The source app generates a signature for version 2.2.
  • The source app is built with iOS 14.5 SDK or later.
  • The advertised app is App Store-signed and running on a device with iOS 14.5 or later.

SKAdNetwork 3.0:

  • The source app generates a signature for version 3.0.
  • The source app is built with iOS 14.6 SDK or later.
  • The advertised app is App Store-signed and is running on a device with iOS 14.6 or later.

SKAdNetwork 4.0:

  • The ad network generates an ad signature for version 4.
  • For ads that appear in an app, the app is built with iOS 16.1 SDK or later. For web ads, the ad appears in Safari 16.1 or later.
  • The advertised app is App Store-signed and is running on a device with iOS 16.1 or later.

解释说明:

source app :发布广告的App;
The advertised app : 广告中被推广的App;
Store-signed :是说必须是上架在App Store 的App,企业版App无法生效;
The ad network:广告平台

七、参考WWDC

  • 2022:SKAdNetwork 的新功能 What’s new with SKAdNetwork
  • 2021:认识保护隐私的广告属性 Meet privacy-preserving ad attribution
  • 2020:App内购买项目的新内容(最后10分钟) What’s new with in-app purchase
  • 2020:通过更好的隐私建立信任 Build trust through better privacy
  • SKAdNetwork文档:https://developer.apple.com/documentation/storekit/skadnetwork
  • 开发者归因文档:https://developer.apple.com/documentation/bundleresources/information_property_list/nsadvertisingattributionreportendpoint

相关文章:

SKAdNetwork:从0到1

一、什么是SKAdNetwork https://developer.apple.com/documentation/storekit/skadnetwork iOS14.5开始,获取IDFA需要用户确认授权才可,此时SKAdNetwork 正式回归。 SKAdNetwork 是苹果在2018年推出的一个更加保护用户隐私的归因框架,并与…...

Spring+MVC+MYbatis注解开发

Spring常见注解 注解一:Configuration 用在类上面,加上这个注解的类可以成为一个spring的xml配置文件,使用的是java代码的配置 注解二:ComponentScan 用在类上,加上注解可以指定扫描路径 注解三:创建对…...

Redis主从复制过程

将目前服务器加入到端口号为6379的从服务器 一主二仆 当期中一台从服务器宕机之后 从服务器重启之后会变成单独的主服务器,与之前的主从复制没有关系,重新使用slaceof命令才能恢复到之前一样 主服务器宕机后,从服务器不会成为主服务器&…...

Spring boot开启定时任务的三种方式(内含源代码+sql文件)

Spring boot开启定时任务的三种方式(内含源代码sql文件) 源代码sql文件下载链接地址:https://download.csdn.net/download/weixin_46411355/87486580 目录Spring boot开启定时任务的三种方式(内含源代码sql文件)源代码…...

Tekton实战案例--S2I

案例环境说明 示例项目: 代码仓库:https://gitee.com/mageedu/spring-boot-helloWorld.git 构建工具maven pipeline各Task git-clone:克隆项目的源代码 build-to-package: 代码测试,构建和打包 generate-build-id:生…...

四、使用类实现功能

使用类实现功能 ts中类的继承 ES6中class类中,属性分为:实例上的属性,原型上的方法;也可以叫做:class的属性,class的方法。 类的继承叫法:父类>子类,基类>派生类&#xff1b…...

Java多线程不安全的例子

目录 1. 可见性不安全例子 2. 原子性不安全例子 3. 有序性不安全例子 1. 可见性不安全例子 可见性:一个线程对共享变量的修改,另外一个线程不能够立刻看到。 如果多线程对共享数据进行访问而不采取同步操作的话,那么操作的结果是不一致…...

vivo X Flip会是高端手机市场的又一折叠屏爆款吗?

据多个平台消息,vivo即将推出小折叠屏手机X Flip。据了解,vivo X Flip将采用轻盈便携的竖向折叠布局,以及非常受女性消费者喜爱的结构设计。那么,vivo X Flip会是vivo折叠屏的又一个爆款吗? 一、vivo X Flip小折叠屏手…...

MySQL中MVCC如何解决不可重复读以及幻读?

了解MVCC之前,我们首先需要了解以下两个概念:一致性非锁定读和锁定读,了解这两个概念之后我们在逐步分析MVCC。 一致性非锁定读和锁定读 一致性非锁定读(快照读) 对于 一致性非锁定读的实现,通常做法是加一个版本号或者时间戳字…...

设计模式第八讲:观察者模式和中介者模式详解

一. 观察者模式 1. 背景 在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心;还有&…...

关于 mac 本地配置域名能 ping 通,但是浏览器不能访问的问题(而其他电脑操作可访问)

关于 mac 本地配置域名能 ping 通,但是浏览器不能访问的问题(而其他电脑操作可访问)1. 配置域名的方式1.1 sudo vim /etc/hosts1.2 浏览器插件 LiveHosts2. 问题描述3. 解决问题方法3.1 尝试方法1—确保代理都关闭3.2 尝试方法2—确保域名能p…...

【代码随想录二刷】Day23-二叉树-C++

代码随想录二刷Day23 今日任务 669.修剪二叉搜索树 108.将有序数组转换为二叉搜索树 538.把二叉搜索树转换为累加树 语言:C 669. 修剪二叉搜索树 链接:https://leetcode.cn/problems/trim-a-binary-search-tree/ 递归 class Solution { public:Tree…...

Linux GPIO 开发指南

文章目录Linux GPIO 开发指南1 概述1.1 编写目的1.2 适用范围1.3 相关人员2 模块介绍2.1 模块功能介绍2.2 相关术语介绍2.3 总体框架2.4 state/pinmux/pinconfig2.5 源码结构介绍3 模块配置3.1 kernel menuconfig 配置3.2 device tree 源码结构和路径3.2.1 device tree 对 gpio…...

记一次后端生成Zip文件通过浏览器下载后文件损坏,无法打开,不可预知的末端错误,下载后文件比源文件增大

记一次后端生成Zip文件问题前言问题出现排查一、流没有关好二、写入了空白字节三、没有flush定位环节一、生成二、通过SwaggerUI、PostMan进行下载三、结论解决方法前言 在项目上线前夕,临时添加了个数据导出的接口,需求是导出压缩包,选择了项…...

python中savgol_filter的详细解释

目录savgol_filter简介savgol_filter原理参数window_length对平滑的效果参数polyorder的平滑效果savgol_filter简介 Savitzky-Golay滤波器最初由Savitzky和Golay于1964年提出,是光谱预处理中常用滤波方法,它的核心思想是对一定长度窗口内的数据点进行k阶…...

C语言--指针进阶1

目录回顾字符指针指针数组数组指针&数组名和数组名的区别数组指针的使用指针作为形参练习数组参数、指针参数一维数组传参二维数组传参一级指针传参二级指针传参回顾 指针的内容,我们在初级阶段已经有所涉及了,我们先来复习一下 指针就是个变量&am…...

ssh的使用

Halo,这里是Ppeua。平时主要更新C语言,C,数据结构算法......感兴趣就关注我吧!你定不会失望。 🌈个人主页:主页链接 🌈算法专栏:专栏链接 我会一直往里填充内容哒! &…...

Apache Hadoop生态-目录汇总-持续更新

目录 1:系统服务分布图 3台分布式架构 1台单机架构 服务版本介绍 2:服务目录 存储相关 数据采集 任务调度 即席查询 数据可视化 集群监控 元数据管理 用户认证 权限管理 第三方windows客户端 1:系统服务分布图 3台分布式架构…...

「JVM 编译后话」编译器优化技术

后端编译(即时编译、提前编译)的目标时将字节码翻译成本地机器码,而难点是输出优化质量较高的机器码; 文章目录1. 优化技术概览2. 方法内联(Inlining)3. 逃逸分析(Escape Analysis)4…...

【python学习笔记】:输出与输入

01 输出方式 表达式语句、print()函数和使用文件对象的write()方法。 02 输出形式 格式化输出str.format()函数、转成字符串可以使用repr()或str()函数来实现。 (1)repr():产生一个解释器易读的表达形式,便于字符串的拼接。 例:输出平方与…...

汽车电子社区交流宣传

http://t.csdn.cn/VSLO0http://t.csdn.cn/VSLO0 当今的汽车行业已经进入了数字化时代,汽车电子软件的开发变得越来越重要。在这个领域,开发者们需要应对各种挑战,包括复杂的硬件和软件交互、高效的嵌入式编程和安全性要求。为了帮助汽车电子…...

String、StringBuilder 和 StringBuffer 详解

碎碎念 这是一道老生常谈的问题了,字符串是不仅是 Java 中非常重要的一个对象,它在其他语言中也存在。比如 C、Visual Basic、C# 等。字符串使用 String 来表示,字符串一旦被创建出来就不会被修改,当你想修改StringBuffer 或者是 …...

windows服务器上传文件解决方案

1.说明 1.如果上传到linux系统,通常使用ftp相关技术,配合windows端的ftp客户端工具比如FileZilla等进行大文件的上传工作。 2.同理windows服务器也可以开启ftp服务用来传输大文件。 3.本文介绍偷懒方式(常规是开启windows的ftp服务&#xff0…...

Android Studio翻译插件推介(Translation)

前言 Android Studio翻译插件适合英语水平不太好的程序员(比如:我),最常用的翻译插件Translation和AndroidLocalize,本文主要讲解Translation,亲测可用。 先看看效果:这里是Android的API,任意选…...

DNS,DNS污染劫持,DNS加密

1. DNS(Domain Name System)DNS(Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上是一个 域名 和 IP 相互映射的分布式数据库.DNS(Domain Name Server,域名服务…...

【Python】如何度量优秀代码——静态分析工具

静态分析工具背景有哪些静态分析工具呢度量Python代码的静态属性度量Python的生态系统代码的坏味道在类层面上在方法层面上结语背景 静态代码分析工具能够提炼出丰富的代码静态属性信息,这使得程序员可以对代码的复杂性、可修改性和可读性有进一步的了解。 有哪些…...

Open3D 点云高程归一化(基于2维地面点,Python版本)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 之前的博客中Open3D 点云高程归一化(基于地面点,Python版本)是基于三维空间进行最近地面点的查询操作,这里对其进行修改一下,将点云投影到水平面,基于二维空间进行最近地面点的查询,这种方式对一些较为陡峭的…...

动态系统的建模与分析

前言 CS小菜鸡控制理论入门 视频学习笔记 视频传送门:动态系统的建模与分析】9_一阶系统的频率响应_低通滤波器_Matlab/Simulink分析 拉普拉斯变换 F(s)L{f(t)}∫0∞f(t)e−stdtF(s)\mathcal{L}\{f(t)\}\int_0^\infty f(t)e^{-st}\mathrm{d}tF(s)L{f(t)}∫0∞​f(t)…...

QCC51XX---HCI log

高通在新的S3/S5以及往后新的平台上面,引入了一个新的调试功能。就是标题说的HCI log,他类似air trace那样用来分析蓝牙协议的,这样我们就可以很详细地找到通信协议之间哪个部分出了问题。以前我们都是通过抓包器抓air trace分析的,抓包器一个要几十万,学会这个功能就相当…...

Redis四 原理篇

《Redis四 原理篇》 提示: 本材料只做个人学习参考,不作为系统的学习流程,请注意识别!!! 《Redis四 原理篇》《Redis四 原理篇》1、原理篇-Redis数据结构1.1 Redis数据结构-动态字符串1.2 Redis数据结构-intset1.3 Redis数据结构-Dict1.4 Redis数据结构-ZipList1.4.1 Redis数据…...