程序化广告行业(56/89):S2S对接与第三方广告监测全解析
程序化广告行业(56/89):S2S对接与第三方广告监测全解析
大家好!在前面的博客中,我们一起深入学习了程序化广告的人群标签、用户标签生成、Look Alike原理,以及DMP与DSP对接和数据统计原理等内容。今天,咱们继续探索程序化广告领域,聚焦在S2S对接和第三方广告监测这两个重要方面。我希望通过这篇博客,和大家一起进一步加深对程序化广告的理解,共同在这个充满挑战与机遇的行业里学习进步。
一、S2S对接:iOS广告主的转化数据桥梁
在程序化广告投放中,iOS类广告主因为应用上架审核等原因,往往不太愿意添加广告商的统计SDK,但广告商又需要通过转化数据(像安装激活数据)来评估广告效果并调整投放策略。这时候,S2S(Server To Server,即服务器对服务器)对接就发挥了关键作用。
假设用户A在手机上打开媒体App,看到一个感兴趣的广告并点击了它。这就触发了一系列流程:首先,媒体App会请求DSP的跳转URL,同时把用户A的设备信息(比如设备号IDFA)带上,这一步就像是媒体App给DSP送了一张写着用户信息的“小纸条”。接着,DSP收到请求后,会进行302跳转,跳到广告主的中转URL,还把IDFA和曝光/点击ID等信息也带上,相当于DSP又给广告主送了一张更详细的“信息单”。广告主服务器收到这些信息后,先保存起来,然后再302跳转到App Store,引导用户下载并安装广告主App。
当用户首次打开广告主App时,App会触发广告主服务器,同时带上设备信息。如果用户下载了App,广告主服务器就会把这次打开的设备信息和之前保存的信息进行匹配,找到最近一次点击,假设这次点击是该DSP产生的,就把激活信息传送给DSP。DSP收到激活信息后,根据曝光/点击ID,把这次激活和对应的设备ID记录到对应的推广活动里,这样广告商就能知道这次广告投放有没有带来实际的转化效果啦。
这里要注意,如果广告主使用了第三方移动监测服务,比如Talking Data、热云等,那么流程中的广告主服务器部分就可以由这些监测服务提供商来代替。另外,如果媒体App没办法提供IDFA,也可以用“IP + userAgent”(简称IP + UA)信息来代替,不过这种方式的精准度不如IDFA,因为用户的IP地址经常会变,同一个设备连接不同的Wi-Fi或运营商网络时,IP就会更改,这样“IP + UA”就可能无法识别出是同一台设备了。
下面用Python代码来简单模拟S2S对接过程中的数据传递(实际情况要复杂得多,涉及网络通信、数据加密等):
import random# 模拟设备信息
device_idfa = "123e4567-e89b-12d3-a456-426614174000"
exposure_click_id = random.randint(10000, 99999)# 模拟媒体App向DSP发送请求
def media_app_to_dsp():print(f"媒体App向DSP发送请求,携带设备信息IDFA: {device_idfa}")return device_idfa# 模拟DSP向广告主服务器跳转
def dsp_to_advertiser_server(idfa):print(f"DSP向广告主服务器跳转,携带IDFA: {idfa}和曝光/点击ID: {exposure_click_id}")return idfa, exposure_click_id# 模拟广告主服务器保存信息并跳转
def advertiser_server_save_and_redirect(idfa, exposure_click_id):print(f"广告主服务器保存IDFA: {idfa}和曝光/点击ID: {exposure_click_id},并跳转至App Store")return idfa, exposure_click_id# 模拟用户下载安装并打开App后广告主服务器匹配信息并通知DSP
def advertiser_server_match_and_notify(idfa, exposure_click_id):print(f"广告主服务器匹配信息,找到对应的点击,将激活信息通知DSP,IDFA: {idfa},曝光/点击ID: {exposure_click_id}")return True# 模拟DSP记录激活信息
def dsp_record_activation():print("DSP记录对应推广活动的激活信息")if __name__ == "__main__":idfa_from_media = media_app_to_dsp()idfa_sent, exposure_click_sent = dsp_to_advertiser_server(idfa_from_media)saved_idfa, saved_exposure_click = advertiser_server_save_and_redirect(idfa_sent, exposure_click_sent)if advertiser_server_match_and_notify(saved_idfa, saved_exposure_click):dsp_record_activation()
二、第三方广告监测:广告投放的“监察员”
第三方广告监测是在广告投放平台之外,由专门的广告监测服务提供商提供的服务。它就像是广告投放过程中的“监察员”,负责监测广告投放各维度的曝光和点击数据等。广告主会根据第三方监测平台提供的监测代码,在广告投放时让各个广告投放平台使用,而且部分广告主还会把第三方监测的广告投放数量和效果作为广告结算和效果评估的重要依据。
第三方监测主要分为曝光监测、点击监测和落地页监测(也就是站内监测)。曝光监测和点击监测代码通常是以URL形式提供的,曝光监测URL一般是1×1的透明像素图片。当广告在客户端展示时,就会触发这个曝光监测URL,完成曝光监测计数,这就好比广告一“露脸”,监测系统就记录下来了。
点击监测URL又分为同步(串联)点击监测和异步(并联)点击监测。同步点击监测时,用户点击广告后,会先跳转到广告投放平台的URL,然后再302跳转到第三方点击监测URL,最后才跳转到客户落地页。而异步点击监测时,用户点击广告的同时,会触发广告投放平台的URL和第三方点击监测URL,各自完成点击监测计数。
一般来说,广告投放平台都有专门的设置项,可以填写曝光监测、同步点击监测或异步点击监测的代码。在第三方监测平台提供的代码中,同步和异步监测只需选择其中一种就行。曝光监测代码一般在创意级别或者活动级别填写;同步点击监测代码直接填写到落地页输入框;异步点击监测则需要同时填写落地页地址和异步点击监测代码到对应的输入框。
虽然同步和异步监测效果基本一样,都能监测到广告来源页面,但由于它们触发代码的先后顺序不同,再加上不同监测平台的代码触发机制也有差异,所以会出现不同的情况。在同步监测时,广告投放平台监测的数据一定是大于等于第三方监测平台的数据;而异步监测时,广告投放平台的数据可能大于、小于或等于第三方监测平台的数据。
站内监测还细分为网站监测和App监测。要使用站内监测,需要添加特定代码。网站监测一般加JS代码,如果监测页面不支持JS,也可以用1像素统计代码代替;App监测则一般加SDK代码。这些代码又分为基础代码和事件代码,基础代码主要用于统计流量,比如页面浏览量(PV)、停留时间等,通常加到网站编码的标签里。
下面用JavaScript代码模拟一个简单的曝光监测过程(实际的监测代码会更复杂,还需要和监测平台进行交互):
<!DOCTYPE html>
<html><head><meta charset="UTF-8"><title>模拟曝光监测</title>
</head><body><!-- 假设这是广告内容 --><div><h1>这是一个示例广告</h1></div><script>// 模拟曝光监测,当页面加载时触发window.onload = function () {var img = new Image();// 这里假设曝光监测URL为示例地址,实际需替换为真实监测URLimg.src = "https://monitor.example.com/exposure?adId=123";};</script>
</body></html>
写作不易,希望这篇博客能帮助大家更好地理解程序化广告中的S2S对接和第三方广告监测。如果文章对您有所帮助,恳请大家关注我的博客,点赞并评论。您的支持是我持续创作的动力,后续我还会为大家带来更多程序化广告行业的精彩内容,让我们一起在学习中不断成长!
相关文章:
程序化广告行业(56/89):S2S对接与第三方广告监测全解析
程序化广告行业(56/89):S2S对接与第三方广告监测全解析 大家好!在前面的博客中,我们一起深入学习了程序化广告的人群标签、用户标签生成、Look Alike原理,以及DMP与DSP对接和数据统计原理等内容。今天&…...
C++进阶知识复习 31~38
目的 写这一系列文章的目的主要是为了秋招时候应对计算机基础问题能够流畅的回答出来 (如果不整理下 磕磕绊绊的回答会被认为是不熟悉) 本文章题目的主要来源来自于 面试鸭 部分面试鸭上没有而牛客网上有的博主会进行查缺补漏 题目编号按照面试鸭官网…...
Spring Boot 整合mybatis
2025/4/3 向全栈工程师迈进!!! 配置文件在实际开发中如何使用呢,接下去将通过Spring Boot整合mybatis来看配置文件如何在实际开发中被使用。 一、引入mybatis起步依赖 在pom.xml中引入mybatis的起步依赖,如下。 在这…...
新能源汽车测试中的信号调理模块:从原理到实战应用
摘要 信号调理模块(Signal Conditioning Module, SCM)是新能源汽车(NEV)测试系统中的关键环节,直接影响数据采集的精度与可靠性。本文面向HIL测试工程师、电机测试工程师及整车动力经济性测试工程师,系统性…...
一篇关于Netty相关的梳理总结
一篇关于Netty的梳理总结 一、Netty1.1 什么是netty?为什么要用netty1.2 Netty是什么? 二、Netty关于网络基础2.1 线程池2.2 线程池线程的生命周期和状态2.3 为什么要使用线程池2.4 简述线程池原理,FixedThreadPool用的阻塞队列是什么2.5 并发…...
纺织车间数字化转型:降本增效新路径
在纺织行业竞争日益激烈的当下,如何提升生产效率、降低成本成为企业关注的焦点。某纺织车间通过创新引入明达技术MBox20网关并部署IOT 平台,成功接入千台设备,实现了生产模式的重大变革。 以往,纺织车间生产犹如黑箱,…...
递归典例---汉诺塔
https://ybt.ssoier.cn/problem_show.php?pid1205 #include<bits/stdc.h> #define endl \n #define pii pair<int,int>using namespace std; using ll long long;void move(int n,char a,char b,char c) // n 个盘子,通过 b,从 a 移动到 …...
Unity2D:从零开始制作一款跑酷游戏!
目录 成品展示 美术资源 制作步骤 场景预布设: 实现人物基础功能: 移动背景——横向卷轴: 生成障碍物: 生成敌人与攻击逻辑: UI制作与重新开始: 导出游戏: 小结 大家小时候都玩过《…...
维拉工时自定义字段:赋能项目数据的深度洞察 | 上新预告
原文链接:维拉工时自定义字段:赋能项目数据的深度洞察 | 上新预告 在项目管理实践中,每个企业都有独特的数据统计与分析需求。为了帮助用户实现个性化数据建模,从而更精准地衡量项目进度和预算投入,维拉工时全新升级的…...
C++ | 文件读写(ofstream/ifstream/fstream)
一、C文件操作核心类 C标准库通过<fstream>提供了强大的文件操作支持,主要包含三个关键类: 类名描述典型用途ofstream输出文件流(Output File Stream)文件写入操作ifstream输入文件流(Input File Stream&#…...
flux文生图部署笔记
目录 依赖库: 文生图推理代码cpu: cuda版推理: 依赖库: tensorrt安装: pip install nvidia-pyindex # 添加NVIDIA仓库索引 pip install tensorrt 文生图推理代码cpu: import torch from diffusers import FluxPipelinemodel_id = "black-forest-labs/FLUX.1-s…...
二语习得理论(Second Language Acquisition, SLA)如何学习英语
二语习得理论(Second Language Acquisition, SLA)是研究学习者如何在成人或青少年阶段学习第二语言(L2)的理论框架。该理论主要关注语言习得过程中的认知、社会和文化因素,解释了学习者如何从初学者逐渐变得流利并能够…...
策略模式实际用处,改吧改吧直接用,两种方式
controller RestController RequestMapping("admin/test") RequiredArgsConstructor(onConstructor __(Autowired)) public class TestController {Autowiredprivate VideoFactory VideoFactory;GetMapping("getList")public R getList(){// 第一种方式T…...
计算机网络-TCP的流量控制
内容来源:小林coding 本文是对小林coding的TPC流量控制的精简总结 什么是流量控制 发送方不能无脑的发数据给接收方,要考虑接收方处理能力 如果一直无脑的发数据给对方,但对方处理不过来,那么就会导致触发重发机制 从而导致网…...
搬砖--贪心+排序的背包
a在上面b在下面->a.v-M-b.m>b.v-M-a.m->剩余率大 所以我先遍历a,让a在上面 这就是要考虑贪心排序的01背包 因为它有放的限制条件 #include<bits/stdc.h> using namespace std; #define N 100011 typedef long long ll; typedef pair<ll,int>…...
git克隆数据失败
场景:当新到一家公司,然后接手了上一个同时的电脑,使用git克隆代码一直提示无法访问,如图 原因:即使配置的新的用户信息。但是window记录了上一个同事的登录信息,上一个同事已经被剔除权限,再拉…...
Dart 语法
1. 级联操作符 … var paint Paint()..color Colors.black..strokeCap StrokeCap.round..strokeWidth 5.0;2. firstWhereOrNull 3. 隐藏或导入部分组件 // Import only foo. import package:lib1/lib1.dart show foo;// Import all names EXCEPT foo. import package:lib…...
34、web前端开发之JavaScript(三)
十. DOM操作详解 1、DOM简介 文档对象模型(DOM,Document Object Model)是JavaScript与网页内容交互的接口。它将HTML文档表示为一种树状结构(DOM树),其中每个节点代表文档的一部分(例如元素、…...
自适应卡尔曼滤波
目录 自适应卡尔曼滤波 自适应卡尔曼滤波 主要作用,去抖动 AdaptiveKalmanFilter.py import cv2 import numpy as np from collections import deque# ------------------ 核心去抖算法 ------------------ import cv2 import numpy as np from collections import deque#…...
EIP-712:类型化结构化数据的哈希与签名
1. 引言 以太坊 EIP-712: 类型化结构化数据的哈希与签名,是一种用于对类型化结构化数据(而不仅仅是字节串)进行哈希和签名 的标准。 其包括: 编码函数正确性的理论框架,类似于 Solidity 结构体并兼容的结构化数据规…...
Day 3:Leetcode 比特位计数+只出现一次的数字 II
比特位计数 本质是一个递推,时间复杂度O(n),空间复杂度O(n)。 class Solution { public:vector<int> countBits(int n) {vector<int> ans(n 1);ans[0] 0;//ans[1] 1;for(int i 1; i < n; i){if(i & 1){ans[i] ans[i/2] 1;}else…...
CentOS7安装conda
root用户登录虚拟机后更新yum yum update 下载Miniconda,路径就在/root下 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh conda分为Miniconda和Anaconda, Miniconda是Conda的轻量级版本,只包含conda和Python…...
[Linux]从零开始的vs code交叉调试arm Linux程序教程
一、前言 最近的项目中需要集成rknn的视觉识别,在这之前我并且没有将rknn集成到自己项目的经验。这里我需要在rknn原本demo的基础上我还需要集成自己的业务代码。但是又有一个问题,原本rknn我们都是使用交叉编译编译到开发板上的,并且我们还要…...
【顶刊级科研绘图】AI支持下Nature级数据可视化(如何画图、如何标注、如何改图、如何美化、如何组合、如何排序)
技术点目录 第一章、绘图原则与概念:规范清晰简洁自明第二章、DeepSeek、ChatGPT、R绘图系统:八仙过海各显神通第三章、美学设计与细节:完美图表华丽呈现第四章、数据类型与图表:宝典在手各个击破第五章、统计分析与可视化&#x…...
CSRF跨站请求伪造——入门篇【DVWA靶场low级别writeup】
CSRF跨站请求伪造——入门篇 0. 前言1. 什么是CSRF2. 一次完整的CSRF攻击 0. 前言 本文将带你实现一次完整的CSRF攻击,内容较为基础。需要你掌握的基础知识有: 了解cookie;已经安装了DVWA的靶场环境(本地的或云的)&am…...
Spring Boot应用中实现Jar包热更新的实践指南
Spring Boot应用中实现Jar包热更新的实践指南 一、引言 在现代软件开发中,快速迭代和持续交付是至关重要的。对于基于Spring Boot的应用程序,一旦部署到生产环境,传统的更新方式通常是重新打包并重启应用,这不仅耗时,…...
JVM深入原理(七)(一):运行时数据区
目录 7. JVM运行时数据区 7.1. 运行时数据区-总览 7.2. 运行时数据区-查看内存对象 7.3. 运行时数据区-程序计数器 7.3.1. 程序计数器-作用 7.3.2. 字节码指令执行流程 7.4. 运行时数据区-Java虚拟机栈 7.4.1. 栈-概述 7.4.2. 栈帧-组成 7.4.2.1. 栈帧-帧数据 7.4.2…...
约瑟夫环的四种(数组,链表,递归,迭代)解决方案,与空间、时间复杂度分析
以下方法均没有考虑结果集的空间与时间复杂度 1.数组解法 实现代码(未优化) class Main {public static void main(String[] args){Scanner read new Scanner(System.in);int n read.nextInt();int m read.nextInt();int[] people new int[n]; //…...
skynet.start 的作用详细解析
目录 skynet.start 的作用详细解析1. 功能概述2. 基本用法3. 关键作用(1) 注册消息处理函数(2) 启动事件循环(3) 服务生命周期管理 4. 与其他函数的协作5. 未调用 skynet.start 的后果6. 高级场景:何时不需要 skynet.start7. 总结 skynet.start 的作用详细解析 在 …...
Apache Doris 2025 Roadmap:构建 GenAI 时代实时高效统一的数据底座
在全球 290 位开发者的协作下,Apache Doris 在 2024 年完成了 7000 次代码提交,并发布了 22 个版本,实现在实时分析、湖仓一体和半结构化数据分析等核心场景的技术突破及创新。 2025 年,Apache Doris 社区将秉承“以场景驱动创新…...
springboot+easyexcel实现下载excels模板下拉选择
定义下拉注解 Target(ElementType.FIELD) Retention(RetentionPolicy.RUNTIME) public interface ExcelDropDown {/*** 固定下拉选项*/String[] source() default {};/*** 动态数据源key(从上下文中获取)*/String sourceMethod() default "";…...
vue3+ts+element-plus 开发一个页面模块的详细过程
目录、文件名均使用kebab-case(短横线分隔式)命名规范 子组件目录:./progress-ctrl/comps 1、新建页面文件 progress-ctrl.vue <script setup lang"ts" name"progress-ctrl"></script><template>&l…...
软考《信息系统运行管理员》- 7.1 物联网运维
物联网的概念及特征 物联网是在计算机互联网的基础上,通过射频识别 (RFID) 、 无线传感器、红外感应器、 全球定位系统、激光扫描器等信息传感设备,按约定的协议,把物与物之间通过网络连接起来, 进行信息交换和通信,以…...
【GPT入门】第33 课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南
[TOC](【GPT入门】第33课 一文吃透 LangChain:chain 结合 with_fallbacks ([]) 的实战指南) 1. fallback概述 模型回退,可以设置在llm上,也可以设置在chain上,都带有with_fallbacks([])函数 2. llm的回退 2.1 代码 核心代码&…...
裴蜀定理:整数解的奥秘
裴蜀定理:整数解的奥秘 在数学的世界里,裴蜀定理(Bzout’s Theorem)是数论中一个非常重要的定理,它揭示了二次方程和整数解之间的关系。它不仅仅是纯粹的理论知识,还在计算机科学、密码学、算法优化等多个…...
Table as Thought论文精读
标题:Table as Thought: Exploring Structured Thoughts in LLM Reasoning 作者:Zhenjie Sun, Naihao Deng, Haofei Yu, Jiaxuan You 单位:University of Illinois Urbana-Champaign, University of Michigan 摘要: llm的推理…...
PyQt6实例_A股日数据维护工具_使用
目录 前置: 下载预备更新的数据 使用工具更新 用工具下载未复权、前复权、权息数据 在PostgreSQL添加两个数据表 工具&视频 前置: 1 本系列将以 “PyQt6实例_A股日数据维护工具” 开头放置在“PyQt6实例”专栏 2 日数据可在“数据库”专栏&…...
MySQL客户端工具-图形化工具-DataGrip 安装与使用
一. 常见的图形化工具 二. DataGrip 安装 官网:DataGrip:由 JetBrains 开发的数据库和 SQL 跨平台 IDE 二. DataGrip 使用...
企业管理系统的功能架构设计与实现
一、企业管理系统的核心功能模块 企业管理系统作为现代企业的中枢神经系统,涵盖了多个核心功能模块,以确保企业运营的顺畅与高效。这些功能模块通常包括: 人力资源管理模块:负责员工信息的录入、维护、查询及统计分析,…...
1.Qt信号与槽
本篇主要介绍信号和槽,如何关联信号和槽以及用QPixmap在窗口中自适应显示图片 本文部分ppt、视频截图原链接:[萌马工作室的个人空间-萌马工作室个人主页-哔哩哔哩视频] 1. 信号 一般不需要主动发送信号,只有自定义的一些控件才需要做信号的…...
再生认证体系有哪些?不同标准对应的要求及可以做的审核机构
再生认证体系 标准 GRS再生回收认证要求 再生原材料的上游企业:需要具备GRS认证证书,以确保原材料的可追溯性和再生成分。 认证条件: 最终商品的再生成分比例必须至少为20%。 只有由至少50%的回收材料制成的产品才能贴上GRS标签。 认证机构…...
[CISSP] [6] 密码学和对称密钥算法
密码学的目标 1. 机密性(Confidentiality) 目标:保护信息不被未授权访问。 通过 加密(Encryption)技术确保数据只能被授权方解密和读取。主要方法: 对称加密(AES、3DES)ÿ…...
thinkphp每条一级栏目中可自定义添加多条二级栏目,每条二级栏目包含多个字段信息
小程序客户端需要展示团购详情这种结构的内容,后台会新增多条套餐,每条套餐可以新增多条菜品信息,每条菜品信息包含菜品名称,价格,份数等字段信息,类似于购物网的商品多规格属性,数据表中以json类型存储,手写了一个后台添加和编辑的demo 添加页面 编辑页面(json数据…...
混杂模式(Promiscuous Mode)与 Trunk 端口的区别详解
一、混杂模式(Promiscuous Mode) 1. 定义与工作原理 定义:混杂模式是网络接口的一种工作模式,允许接口接收通过其物理链路的所有数据包,而不仅是目标地址为本机的数据包。工作层级:OSI 数据链路层&#x…...
Spring Boot项目信创国产化适配指南
将 Spring Boot 项目适配信创国产化环境,需要从底层基础设施到上层应用组件进行全面替换和调整。以下是主要替换点和适配步骤的总结: 一、基础软件替换 1. JDK 替换 国外JDK:Oracle JDK、OpenJDK国产JDK: 阿里龙井(D…...
MySQL:数据类型
数值类型 数值类型用于存储整数、小数、浮点数等,主要分为整数类型和浮点类型。 整数类型 数据类型存储大小取值范围(有符号)取值范围(无符号)说明TINYINT1字节-128 ~ 1270 ~ 255小整数,如布尔值&#x…...
maven引入项目内本地包方法
最近在写java实现excel转pdf功能; 网上有个包很好用,免费:spire.xls.free-5.3.0.jar。 但是maven打包项目时报错,找不到这个包。 jar包位置如下: 在项目/src/jar/spire.xls.free-5.3.0.jar。 解决方法:…...
ARP协议
ARP协议 ARP协议的作用 当网络设备有数据要发送给另一台网络设备时,必须要知道对方的网络层地址(即IP地址)。IP地址由网络层来提供,但是仅有IP地址是不够的,IP数据报文必须封装成帧才能通过数据链路进行发送。数据帧…...
科技赋能安居梦:中建海龙以模块化革新重塑城市更新范式
在北京市西城区桦皮厂胡同,一栋始建于上世纪70年代的住宅楼正经历着一场脱胎换骨的蜕变。这座曾被鉴定为D级危房的建筑,在中建海龙科技有限公司(以下简称“中建海龙”)的匠心打造下,仅用三个月便完成"原拆原建&qu…...
2025 AI智能数字农业研讨会在苏州启幕,科技助农与数据兴业成焦点
4月2日,以"科技助农数据兴业”为主题的2025AI智能数字农业研讨会在苏州国际博览中心盛大启幕。本次盛会吸引了来自全国各地相关部门领导、知名专家学者、行业协会组织,以及县级市农业企业代表、县级市农产品销售商等万名嘉宾齐聚姑苏城,…...