-
2018-10-28 09:43:43
广告从产生到用户接触经历了一些阶段,就是广告的信息传播模型。该有效性模型把广告的信息接收过程分为选择(selection)、解释(interpretation)与态度(attitude) 三个大阶段,或者进一步分解为曝光(exposure)、关注(attention)、理解(comprehension)、接受
(acceptence)、保持(retention)与决策(decision) 6个子阶段。1. 曝光(exposure)阶段。这一阶段指的是广告物理上展现出来的过程, 此阶段的有效程度往往与广告位的物理属性有关, 并没有太多可以通过技术优化的空间。 实际的广告实践中, 曝光的有效性对最终结果的影响往往远远高于其他技术性因素, 所以才会有传统广告中“位置为王”的说法,比如纽约时代广场的广告牌、各一线城市高层建筑上的广告牌等。在互联网广告中,位置的影响有时会更加显著,因此如何从算法上消除由此带来的点击率预估偏差,是一个非常重要的实际问题。
2. 关注(attention)阶段。这一阶段指的是受众从物理上接触到广告到意识上注意到它的过程。对广告而言,曝光并不一定意味着关注。有几个重要原则。首先,尽量不要打断用户的任务。这一点是上下文相关的广告投送的原理基础,也是当今讨论原生广告产品的出发点之一。当用户明确辨识出某个固定不变的广告位,并且不再认为它与自己当浏览网页的任务有关联时,他会下意识地屏蔽其中的内容。其次,明确传达向用户推送广告的原因,这一点是受众定向广告创意优化的重要方向。另外,内容符合用户的兴趣或需求,这是行为定向的原理基础。
3. 理解(comprehension)阶段。用户关注了广告内容并不意味着一定能够理解广告传达的信息。理解阶段有哪些原则呢? 首先,广告内容要在用户能理解的具体兴趣范围内,这说明了真正精准的受众定向有多么必要。其次,要注意设定与关注程度相匹配的理解门槛。对于互联网广告,由于用户的关注程度非常低,我们应该集中强调一个主要诉求以吸引用户的注意力。
4. 接受(acceptance)阶段。受众理解了广告传达的信息,并不一定表示他认可这些信息。广告的上下文环境对于广告的接受程度有着很大的影响,同一个品牌广告出现在某游戏社区上和门户网站首页上,用户会倾向于认为后者更具说服力,这也就是优质媒体的品牌价值。在定向广告越来越普遍的今天,如何让合适的广告出现在合适的媒体上,即广告安全(Ad Safety)问题,正在引起大家越来越多的关注。
5. 保持(retention)阶段。对于不仅仅追求短期转化的广告商,当然希望广告传达的信息给用户留下长久的记忆,以影响他长时间的选择,因此品牌广告商在创意设计上花了大量的精力提高此阶段效果。我们想想那些充满艺术性或浪漫气质的电视汽车广告,可以对此有直观的认识。
6. 决策(decision) 阶段。成功广告的最终作用是带来用户的转化行为,虽然这一阶段已经离开了广告的业务范围,但好的广告还是能够为转化率的提高做好铺垫。特别是对于电商或团购业务, 在创意上强调哪些信息以打动那些价格敏感的消费者是有相当的学问的。
定性地说,越靠前的阶段,其效果的改善对点击率的贡献越大;而越靠后的阶段,其效果的改善对转化率的贡献越大。但是以上各个阶段的划分绝非孤立的和绝对的,而某一项具体的广告策略或技术也往往会对几个阶段的效果同时发生影响。虽然这样的有关广告有效性模型的讨论多见于传统广告的研究中, 然而其规律显然也对在线广告的产品方向有很强的指导作用。
参考文档
1 计算广告学
2 https://www.cnblogs.com/94julia/p/4608096.html更多相关内容 -
WiFi广告强推原理
2018-11-22 10:42:40WiFi广告推送原理就是利用微信公众号里微信连WiFi设备广告接口,向指定微信用户发送广告。目前绝大部分智能手机都在使用微信,广告魔盒硬件核心部分是探针,盒子只要打开电源就会采集到周边正在使用wifi上网的手机...本文地址:http://tongxinmao.com/Article/Detail/id/412
WiFi广告强推的基本技术原理和一些相关问题
WiFi广告推送原理就是利用微信公众号里微信连WiFi设备广告接口,向指定微信用户发送广告。目前绝大部分智能手机都在使用微信,广告魔盒硬件核心部分是探针,盒子只要打开电源就会采集到周边正在使用wifi上网的手机mac地址和wifi名称,并且将此参数推送给微信服务器指定接口就可以想目标手机用户弹出自己定义的广告。
这里需要先来简单介绍一下微信连wifi功能:
微信连Wi-Fi:(2017年8月正式推出)
微信连Wi-Fi是微信推出的快速连接Wi-Fi热点的功能。商户启用后,其顾客仅需通过微信“扫一扫”二维码等方式,即可快速连接商户提供的Wi-Fi免费上网。连接成功后,用户微信主界面顶部会出现“正在连接Wi-Fi”的状态提示,用户点击该提示,即可查看商户公众号、优惠活动以及使用商户提供的在线功能和服务。该广告是通过微信,调用手机portal,让手机自动弹出广告的(广告内容和形式是在微信公众号里自己定义的)
微信连wifi弹出广告本质原理就是用户在商家扫码时,会自动将自己的手机mac地址和所连路由器ssid(即wifi名称)上传给微信服务器,微信识别后就会自动想目标手机去弹出商家设定号的广告。当然,正常情况下,不可能有那么多人来店里来扫码上网,也没有办法通过正常途径去想指定用户弹出广告。
WIIF广告就是利用以上原理应运而生。虽然没有这么多人来店里扫我们指定二维码,但是我们可以带着盒子主动出击,去采集周边用户的手机mac地址和wifi名称,逆向的去向手机用户推送广告,也就达到了话最小的成本去实现我们足量广告宣传效果啦。
了解了以上广告实现的基本原理,我们也就解答了用户很多困惑。
一、 微信连wifi的广告实现是借助微信连wifi的功能接口来实现的。所以想要实现广告推送,是需要用户申请公众号的。只有通过企业认证的订阅号或者服务号,才能开通微信连WiFi设备广告接口。没有公众号的朋友们也不用担心,用个体工商营业执照或企业营业执照都可以申请公众号,一个营业执照可以申请5个公众号,并且通过法人认证或对公帐号转款的方式认证是可以省去300元认证费用的。没有营业执照的也可以花很低的费用在网上买到公众号来发送广告的。
二、 广告发送数量限制。
目前,微信为了防止商家过度发送广告保护微信用户使用体验,对每个公众号每天推送的广告数量是有限制的。目前每个公众号每天发送的数量限制是200条,超过部分手机用户是收不到的。当然,即使超过也不用担心封号的。只要不再公众号的介绍内容里填入违规内容,一般是不会封号的。当然,或许有些客户推广的内容可能会有些敏感(你懂得),我们可以将广告内容填入到自己的广告网页里去进行宣传。这样一般不会影响到公众号的正常使用。当然,小编在这里还是奉劝大家遵纪守法,为了赚钱不折手段还是不提倡哦。
当然,有些朋友会说,一个公众号一天才能发送200条广告,太少了。小编只想说天下哪来的一本万利的事呢,及时有可能我们也没有那么好运气。我们可以算一笔账,算上购买WIFI广告机的费用,加上10个公众号,总共也就不到2000元(自己注册公众号只需要花几百元买盒子费用),每天就可以免费推送2000条广告。1个广告魔盒和10个公众号花的成本是一次行投入的,而且非常低。但是我们每个月可以免费想接近6万用户发送广告,而且这种广告形式是强行弹出查看的,可以算一下这种广告传达效果如果通过常规途径我们得话多少成本呢。综合来看,通过广告魔盒推送广告目前还是产出投入比非常高的一种模式了。
三、 苹果手机为什么收不到这种广告呢。
其实苹果收不到广告的原因来自两方面,第一个原因通俗来讲就是是苹果和微信闹矛盾了,目前苹果系统已经全面停止了微信连wifi接口在苹果手机上的功能。所以,苹果系统上就没有办法弹出微信连wifi的广告。
第二个原因是,苹果手机暴露出来的mac地址是伪装地址,我们采集到的苹果mac地址基本上都是动态的。
以上两个原因导致利用微信连wifi接口弹出广告在苹果手机上无法实现。当然,就算苹果手机上无法弹出广告,安卓手机还是占大多数嘛,我们向这类用户发送广告都发送不完,何必在手机类型上去追求这100%呢。
四、 手机弹出广告所需要的条件
条件一:目标广告必须是手机上登录了微信(不需要打开微信页面)。毕竟广告是通过微信去向用户发送的嘛。
条件二:目标手机需要连接wifi。需要强调的是用户连接的wifi是用户自己家里、办公室或其他地方的任意wifi,广告魔盒在用户周围有效覆盖距离时,就会通过路由器采集到用户的手机信息。还有就是如果通过云平台后期推送时,目标用户的wifi环境还在原来采集的wifi下才可以收到的。所以,我们建议用户在流动性人口多的地方如商场、酒店附近就采用时时推送的方式,在写字楼这些固定场所不但可以时时推送,还可以在后期多次通过云平台想采集到的手机推送广告,达到事半功倍的效果。
五、 WIFI广告机怎么采集到手机参数,发送距离能达到多少的问题
WIFI广告机通过于周边wifi路由器通过握手协议来获取到该路由器下所有连wifi设备的相关参数的。这里主要包括ssid(即wifi名称)和设备mac地址。可以理解为正在连wifi上网的手机就是在马路行驶的小汽车,mac地址就是该汽车的车牌好,ssid就是正在形式的这条马路名称。这些信息都是我们在走在附近就能看到的,我们只需要记下来就好了。
当然,信息采集过程中有个非常重要的技术问题,就是数据精确配对问题。这里需要掌握关键的核心算法,这就是有些广告魔盒总是发送广告只有一小小部分用户收到广告的原因了。采集过程中,盒子获取参数是一个个信息分别获取的,拿的一大堆数据需要一些聪明的算法去组成准确的配对,这样的数据才是正确有效的。幸运的是,我们目前早已经掌握采集配对算法,目前成功配对率基本上能达到95%以上。
另一个关键问题是,采集来的数据有可能不只是手机数据,很有可能将非手机设备信息采集来,如果向这部分设备推送广告就会浪费掉我们公众号有限的广告机会。一种办法是通过macinfo列表自动过滤掉采集来的非手机信息。Macinfo列表里添加了目前各个手机厂商公布的常见手机机型前6位mac地址,通过这个列表数据对比,我们就很容易判断采集来的手机机型,并且将非手机信息直接屏蔽掉。带来的问题就是部分小众手机机型没有在macinfo列表里的,会采集不到。用户可以将没有采集到的手机反馈给我们,我们手动将此品牌机型加入macinfo列表里就可以了。在这方面我们的工作已经做得很好,基本上用户见到的手机都是可以收集到的。
关于采集距离的问题我想也有必要讲一讲,盒子是通过于周边wifi路由器通过握手协议来获取到该路由器下所有连wifi设备的相关参数的。对采集距离影响最大的因素来自于盒子所处环境周边wifi信号强弱。因为盒子就是个采集器,并不对外发出信号。当然,盒子的功率大写的确会有一定影响,会影响到对周围wifi信号捕捉的敏感度,但是整体影响不超过30%。这是我们通过大量实验对比得来的。普通硬件采集距离理想环境下也就是二三百米的范围(实际情况下很难有这种理想环境,哪去找空旷没有信号干扰的方有wifi的),还有些人在宣传能够达到1公里,或2公里的。我想稍微懂点通信原理知识的是不干这样吹牛的。
六、 使用WIFI广告机的法律问题。
部分用户担心广告魔盒是不是伪基站,违法不违法。其实不需要太过于担心的。WIFI广告机推送广告是通过微信向微信用户推送广告,原理和伪基站是完全不一样的。
“伪基站”即假基站,设备一般由主机和笔记本电脑或手机组成,通过短信群发器、短信发信机等相关设备能够搜取以其为中心、一定半径范围内的手机卡信息,利用2G移动通信的缺陷,通过伪装成运营商的基站,冒用他人手机号码强行向用户手机发送诈骗、广告推销等短信息。使用伪基站是严重违法的,并且目前国家正在严厉打击。
而广告魔盒通过微信连wfii去推送广告不属于该范畴,当然如果发送违法广告无论通过什么方式推送也是违法啦!
关于无需公众号广告机的基本原理介绍
近期,很多客户都在咨询一种无需公众号就能直接弹出网页广告的广告设备。为了满足用户需求,我们最近也研发出这个机型,供用户自行选择。在这里,将此次广告机原理向大家做个简单介绍,消除大家的认识误区。
我们将无需公众号谈广告机型命名为广告入侵机,其技术原理如下:
1. 对当前环境的WiFi信道1 ~ 信道13进行轮流扫描,利用KRACK漏洞干扰当前环境下手机的正常上网,甚至使其掉线。
2. 当前环境下的手机因为掉线重新自动连接原WiFi,或者因为无法正常上网手动连接原WiFi时,利用Portal技术弹出网页广告。
优点:
1、 不需要依赖微信去想用户弹出广告,可以直接让目标用户手机上弹出网页广告。
2、 苹果和安卓都可以弹出广告,甚至目标wifi下连接的电脑、笔记本都可能弹出广告。
缺点:
1、广告入侵机是利用周边路由器KRACK漏洞干扰当前环境下手机的正常上网的方式达到广告目的。现在很多路路由器厂家已经将此漏洞升级补上,导致大多数网络根本就无法达到广告弹出效果。
2、要成功入侵周边的网络,需要指导目标wifi的上网密码,或者用户路由器没有设置密码,对于大部分用户获取周边wifi密码还是非常有难度的。
3、使用该款机型推送广告,法律风险是非常大的。
KRACK漏洞攻击对原WiFi具有一定的破坏性与入侵性,如果不小心涉及公共WiFi,按照2017年6月1日施行的《中华人民共和国网络安全法》,存在较高的法律风险。而且这种直接弹出广告的方式,让很多用户都会感到一定恐慌,可能报警或投诉。
以上是对广告入侵机的原理介绍,供用户选择时参考。
WIFI探针:
https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-18176579149.10.6a8133d62RRxsa&id=563427747666
-
计算广告——读书笔记(一)
2019-04-02 20:38:381. 广告有效性原理 2. 互联网广告的技术特点 3. 计算广告的核心问题 3.1 广告收入的分解 3.2 结算方式与ECMP估计关系 4. 在线广告相关行业协会 5. 问题 三、在线广告产品概览 1. 商业产...目录
工作以来,业内一些经典书籍如《推荐系统实践》(项亮著)、《计算广告》(刘鹏著)、《推荐系统与深度学习》(黄昕著)等,一直没有认真读完。这段时间趁着换工作之余,重新读了下这几本书,并做了读书笔记。
由于《推荐系统实践》和《推荐系统与深度学习》在之前读过一些,我又是看过一部分书籍或电影,很难坚持读完的人,所以就先从《计算广告》开始读起。这本书涉及不少术语,我也会标注出来,尽可能按照自己的理解去解读。本篇从产品角度对广告业务进行介绍。
一、在线广告综述
以人群为投放目标、以产品为导向的技术性投放模式,是大数据(big data)在实践中唯一形成规模化营收的落地行业。在线广告不等同于搜索或推荐,首先是一项商业活动,广告主、媒体和用户利益博弈,然后涉及互联网环境下技术优化(用户画像、ctr预估等)。
1. 大数据和广告关系
A类问题:随着数据采样率下降,解决问题的收益会快速下降,这是典型的大数据问题。如个性化推荐(personalized recommendation)和计算广告(computational advertising)。
B类问题:随着数据采样率上升,解决问题的收益有所提高,达到一定规模,收益趋于稳定。如文本主题模型(topic model)。
C类问题:随着数据采样率下降,解决问题收益并没有明显下降。如统计报表等。
2. 广告定义和目的
一切付费的信息、产品或服务的传播渠道,都是广告。
出资人、媒体和受众这三者利益博弈关系是广告活动永远的主线,广告的根本目的是广告主通过媒体达到低成本的用户接触。可以用投入产出比(Return On Investment, ROI)来评价。
3. 在线广告创意类型
横幅广告(banner ad):嵌入在页面中相对固定位置的版面。
文字链广告(textual ad):一段链接到广告主落地页文字,在搜索广告(百度)和展示广告广泛采用。
富媒体广告(rich media ad):利用视觉冲击较强的表现形式(弹窗、对联、开屏等),在不占用固定版面位置情况下,向用户侵入式投送广告素材。
视频广告(video ad):视频流播放插入(前插片、后插片、暂停等)广告,腾讯视频、抖音等,除了ctr,还可以用用户观看时长评价。
社交广告(social ad):在社交环境下嵌入的广告,如微信朋友圈等。
移动广告(mobile ad):移动设备app中广告,常见形式有横幅、开屏、插屏、积分墙或推荐墙等。
邮件定向营销广告(E-mail Direct Marketing, EDM):电子邮件方式向目标用户传递推广信息的一种网络营销手段。
4. 在线广告简史
展示广告(display advertising)
合约广告(agreement-based advertising),采用合同方式确定某一广告位在一段时间内为某特定广告主所得。
定向广告(targeted advertising)两个需求:
受众定向(audience targeting),标定用户年龄、性别或其他标签;
广告投放(ad serving),广告投放由直接嵌入变为实时响应前端请求;
竞价广告(auction-based advertising),基于竞价机制和精准人群定向,分化广告网络(ad Network,ADN)和交易终端(Trading Desk,TD)。
定制化需求催生实时竞价(Real Time Bidding,RTB),把广告展示的上下文页面url和客户的用户标识等信息传给需求方,分化出需求方平台(Demand Side Platform,DSP)和广告交易平台(ad Exchange,ADX)。
另外,将内容与广告以某种方式统一决策或排序广告产品——原生广告(Native ad)也很火爆,如头条feed流。
5. 泛广告商业产品
团购:按照效果付费的泛广告产品,其特殊性在于广告主除了付推广费外,还向用户让利以获得转化。
游戏联运:根据用户游戏内消费在推广渠道和游戏开发商之间分成的商业活动,按照效果付费。如QQ游戏大厅,应用宝等。
固定位导航:网址导航站位置入口,按时间付费的固定位模式。
返利购买:采用折扣或积分的方式激励用户购买。
注意:当一个公司普通广告和上述多种泛广告产品出现争夺广告位或其他入口资源,合理方式是通过竞价来决策。
二、计算广告基础
可衡量的效果以及相应的计算优化是在线广告区别线下广告的主要特点,千次展示期望收入(expected Cost Per Mille,eCPM)正是计算广告中最为核心的量化指标之一。eCPM又可分解为点击率和点击价值的乘积。
1. 广告有效性原理
用三段式信息传播模型来解剖广告从产生用户接触开始是如何产生最终效果的。
曝光(exposure):位置为王
关注(attention):行为定向
理解(comprehension):强调诉求
接受(acceptance):优质媒体品牌
保持(retention):不仅仅追求短期转化,给用户保留长久记忆。
决策(decision):用户转化
越靠前阶段,其效果的改善对点击率贡献越大;而越靠后阶段,其效果改善对转化率的贡献越大。
2. 互联网广告的技术特点
技术和计算向导:精细的受众定向
效果的可衡量性:展示和点击日志可以直接记录广告效果,并可以利用这些日志优化广告效果
创意和投放方式的标准化:驱动力是受众定向和程序购买
媒体概念多样化:越接近转化的媒体上广告带来的流量一定可以达到越高的ROI,不过离引导潜在用户广告目的越远。
数据驱动的投放决策
3. 计算广告的核心问题
计算广告的核心问题,是为一系列用户与环境组合找到最合适的广告投放策略以及优化整体广告活动的利润(Find the best match between a given user in a given context and a suitable advertisement)。另外,广告优化是一组展示上的效果,用户或上下文唯一标识也不一定能拿的到。
3.1 广告收入的分解
点击与展示的比率成为点击率(Click Through Rate,CTR);
落地页成功(landing page)打开次数与点击次数比例成为达到率;
从落地页进一步完成下单等操作,转化次数与达到次数的比例成为转化率(Conversion Rate,CVR)
按按照媒体网站和广告主网站上行为段对回报r进行分解:
a,u,c分别代表广告、用户和环境,
表示点击率,
表示点击价值(click value),即单次点击为广告产品带来的收益。前一部分描述的是发生在媒体上的行为,后一部分描述的是发生在广告主网站上的行为。在对多个检索候选进行排序时,是根据eCPM还是CTR排序也是区分广告产品和用户产品的重要策略特征。
在电商中,点击价值可以分解为达到率、转化率和客单价的乘积。
3.2 结算方式与ECMP估计关系
市场上主要的几种广告计费模式:
CPM结算,按照千次展示结算,常用于互联网品牌广告。
CPC结算,按点击结算,常用于效果广告。
CPS(cost per sale)/CPA(cost per action)/ROI,按照销售订单数、转化行为数或投入产出比结算,常用于垂直广告网络(vertical ad network)。
CPT(cost per time)结算,针对大品牌广告主特定的广告活动,将某个广告位以独占方式交给某广告主,并按独占的时间段收取费用的方式。
4. 在线广告相关行业协会
交互广告局(Interactive Advertising Bureau,IAB,http://www.iab.net),是站在供给方的长远利益上来研究和影响市场。IAB 的典型会员是 Google、Facebook、Yahoo!、Microsoft 这样的广告供给方以及 AudienceScience、MediaMath 这样的广告技术公司。制定了几个重要的规范:
- 横幅广告创意尺寸标准
- 视频广告标准 VAST(digital video ad serving template)
- 通用实时竞价接口标准 OpenRTB
美国广告代理协会(American Association of Advertising Agencies,4A)并不是一个专门从事互联网广告的组织,而是线上线下各种广告,特别是品牌广告的代理商在美国的行业协会。4A 公司的典型代表有奥美(Ogilvy&Mather)、智威汤逊(JWT)、麦肯(McCann)等。
美国国家广告商协会(Association of National Advertisers,ANA)是一个广告主的协会,也是最彻底地代表需求方利益的组织。会员多是 AT&T、宝洁(P&G)以及 NBA 等这些拥有大量广告预算的广告主。
5. 问题
1.CPA/ROI 的结算方式看似对广告主有利,实际也催生了一些变形的推广方式。请考察你接触到的 CPA/ROI 渠道,并研究其与 CPM 或 CPC 渠道的关键差异。
最主要还是转化行为大多为用户在广告商(需求方)站内发生,因此无法进行准确的估计和优化。广告主甚至可以故意扣单来低成本赚取大量曝光。
2.对广告产品而言,优化利润与优化 ROI 有什么区别?
如果仅仅是优化ROI并不一定能带来“大量的潜在用户”,其实还是品牌/效果那个问题。
3.在社交网络中发生的传播营销过程与典型的展示、点击、转化流程有很大不同,请对此建立一个合理的模型,并分析其中的关键量化指标。
社交网络中的广告,可以有互动,可以被转发
曝光、关注:曝光量,阅读量
理解、接受:交互量(点赞、转发)
保持、决策:转化三、在线广告产品概览
1. 商业产品的设计原则
优化商业目标,并在运营过程中有一些需要注意的关键点。
- 产品策略:竞价中机制设计、冷启动数据探索、受众定向的标签体系
- 关注数据:商业产品的目标是确定和可优化的,让运营和产品优化形成闭环。
- 产品便捷性
2. 需求方层级组织与接口
广告主、广告(推广)计划(campaign)、广告(推广)组(ad goup)、广告创意(creative),投放规模大的广告凭条以API接口,否则界面。
3. 供给方管理接口
添加、删除广告位以及查看各广告位的运营数据是主要的功能需求。
四、合约广告
包括按 CPM 计费的展示量合约广告和按 CPT 结算的广告位合约。
1. 广告位合约
按CPT结算广告位合约:强曝光属性带来品牌冲击,或横幅位置长期独占购买有利于形成橱窗购买。
按照广告位轮播售卖,常见于中国门户网站的品牌广告中。
2. 受众定向
按展示量结算合约广告产品的基础是按照受众售卖
2.1 受众定向方法
地域定向(geo-targeting):广告主业务有区域性,上下文,查表;
人口属性定向(demographical targeting):年龄、性别、教育程度、收入水平等;
频道定向(channel targeting):内容分类体系将库存按照频道划分;
上下文定向(contextual targeting):根据网页的具体内容来匹配相关广告,上下文定向粒度是关键词、主题或根据广告主需求确定的分类;
行为定向(behaviorial targeting):根据用户历史访问行为了解用户兴趣,从而投送广告;
精确位置定向(hyper-local targeting)
重定向(retargeting):对某个广告主过去一段时间的访客投放广告以提升效果;
新客推荐定向(look-alike targeting):根据广告主提供的种子访客信息,结合广告平台更丰富数据,为广告主找到行为上相似的潜在客户;
团购(group-parchase)
2.2 受众定向标签体系
分类法制定一个层次标签体系,上层标签是下层的父节点,结构化标签体系。
不存在明确父子关系的半结构化或非结构化标签体系。
当标签作为广告投放直接标识,往往采用结构化标签体系;当标签仅仅是投放系统需要的中间变量,则没必要选择结构化标签。
3. 展示量合约
CPM虽然是比较传统交易模式,但已经反映互联网广告计算驱动的本质:分析得到用户和上下文的属性,并由服务端根据这些属性及广告库情况动态决定广告候选。
3.1 流量预测
广告里一般的流量预测问题,可以描述成对流量 t(u,b)这个函数的估计,其中第一个参数 u 是给定的人群标签或人群标签的组合,第二个参数 b 是出价。在展示量合约中,由于没有竞价,可以看成是上述问题在 b→∞情形下的特例。
3.2 流量塑性
流量塑形的典型场景是综合性门户网站上售卖的展示量合约广告。
3.3 在线分配
各个合约要求的人群很可能大量交叠,如何设计分配策略,使得各个合约都尽可能被满足,将其简化为一个二部图(bipartite graph)匹配的问题。二部图的一方是表示广告库存的供给节点,每个节点代表的是所有人群标签都相同的广告流量集合;二部图的另一方是表示广告合约的需求节点,每个节点代表的是一个广告合约的人群标签条件。
4. 问题
1. 除了广告位合约和展示量合约,是否可以设计一种点击量合约的交易模式,它会遇到什么样的挑战?
对于一组广告创意而言,在素材非媒体方提供的前提下,媒体没办法保证点击量;而素材基本上不可能由媒体提供,故不可能有点击量合约。
2. 在展示量合约中售卖的受众往往有监测上的要求,那么对于行为定向这样的不易监测的用户标签而言,有什么产品思路提高其市场接受程度?
五、搜索与竞价广告
广告竞价标定的物:上下文页面中的关键词,用户行为加工的兴趣标签,广告位。
1. 搜索广告的产品形态
搜索广告竞价的标的物是竞价关键词(bid term),用户输入的查询(query)通过与关键词相匹配来确定是否可以触发该条广告。
- 搜索广告变现能力,即eCPM远高于一般的展示广告;
- 搜索广告的受众定向标签,即是上下文的搜索查询。eCPM 由一般情形下的 r(a,u,c)退化成了 r(a,c);
- 搜索广告的展示形式与自然结果的展示形式非常接近,往往仅仅在底色和文字链接中有不太引人注目的提示;
- 从搜索广告发展起来的竞价交易模式已经逐渐发展成为互联网广告最主流的交易模式;
2. 搜索广告产品新形势
- 超越文字链的创意
- 弱相关广告形式
- 原生化探索
3. 搜索广告产品策略
搜索广告的整个决策过程可以分为查询扩展、检索、排序、放置、定价等几个阶段。查询扩展是搜索广告独有的策略,目的是给广告主自动地拓展相关的查询词,扩大采买流量;广告检索和将候选广告根据 eCPM 排序是广告系统较为通用的核心流程,而定价是竞价广告非常核心的策略。
在搜索广告中,排序的依据,即 eCPM,可以简单地表示成 r(a,c)=µ(a,c)·bidCPC(a)。
3.1 查询匹配
精确匹配
不对广告主提供的关键词做任何形式的扩展,保证忠实按照广告主意图精准执行。
短语匹配
当用户的查询完全包含广告主关键词及关键词(包括关键词的同义词)的插入或颠倒形态时,就认为匹配成功,可以触发相应的广告候选。
广泛匹配
当用户的查询词与广告主的关键词高度相关时,即使广告主并未提交这些查询词,也可能被匹配。
否定匹配
同时向广告主提供否定匹配的功能,即明确指出哪些词是不能被匹配的,这样可以灵活地关停一些低效的流量。
3.2 广告放置
广告候选完成排序以后,需要分别确定北区数(North Foot Print,NFP,或 Average Show Number,ASN)和东区的广告条数,这个环节称为广告放置(ad placement),最关键的是进入北区的条件。从两各方面考虑:一是该广告相关性是否足够;二是该广告的 RPM (千次展示收益,Revenue per Mille,RPM)是否足够。前者是为了确保用户体验,后者是为了高效地利用展示位置
搜索广告的决策一般来说不太考虑用户 u 的影响,但是在确定北区广告条数这个问题上是个例外,这就是个性化的广告放置。
4. 产品案例
Google AdWords
CPM->CPC->eCPM
淘宝直通车
在一些高商业价值的垂直搜索引擎(如电商、房产、汽车、应用下载)之中,利用搜索广告的产品体系进行变现是需要最优先考虑的流量变现方式。
5. 位置拍卖与竞价设计
假设有一组广告位可以被占用,将这些广告位按照其经验价值排名,分别记为 s=1,2,···,S(对横幅广告而言,这里的 S 一般为 1)。在某次广告请求中,有一组广告 a=1,2,···,A 出价参与拍卖,每个广告的出价记为 ba,系统将前 S 个高出价的广告
依次放到前面排序好的 S 个广告位上,这样的问题称为位置拍卖(position auction)。根据前文的讨论,当某个广告 a 被放在 s 位置上时,其期望收益即 eCPM 为。这里我们作了一些假设,比如,点击率 µ仅与位置 s 有关,而点击价值 ν 仅与广告 a 有关。
5.1 定价问题
整个竞价系统处于纳什均衡(Nash equilibrium)状态,即每个广告主都通过出价得到最符合自己利益的位置。其表达式如下:
指的是排在 s 位置上的广告的点击价值,并非 s 位置带来的点击价值,而
指的是市场向排在 s 位置上的广告收取的费用,即定价,也就是广告主的单次投入。这一均衡状态的意义很容易理解:对于最终位置排名竞价结果中的每一条广告,其收益都比排在其他位置上要高。
常见的定价策略有GSP(Generalized Second Price)方案和VCG(Vickrey-Clarke-Groves)定价策略。
广义第二高价(GSP),指的是在只有一个位置的拍卖中,向赢得该位置的广告主收取其下一位广告主的出价。广义第二高价却有着实现简单、容易向广告主解释等诸多操作中的优点,因此在实际的竞价广告系统中是最主流的定价策略。
VCG,其基本思想是:对于赢得了某个位置的广告主,其所付出的成本应该等于他占据这个位置给其他市场参与者带来的价值损害。
5.2 市场保留价
为了控制广告的质量和保持一定的出售单价,竞价广告市场往往要设置一个赢得拍卖位置的最低价格,这一价格我们称为市场保留价(Market Reserve Price,MRP),俗称“起价”或“底价”。当竞争较充分、广告主深度足够时,MRP 可以设置得比较高;反之则应适当降低。
5.3 价格挤压
在 CPC 结算的广告产品中,eCPM 可以表示成点击率和出价的乘积,即
。但是在竞价的机制设计中,有时会对此公式做一些微调,把它变成下面的形式:
其中的
为一个大于 0 的实数。可以考虑两种极端情况来理解
的作用:当
→∞时,相当于只根据点击率来排序而不考虑出价的作用;反之,当
→0 时,则相当于只根据出价来排序。因此,随着
的增大,相当于我们在挤压出价在整个竞价体系中的作用,因此我们把这个因子叫做价格挤压(squashing)因子。
价格挤压因子的作用主要是能够根据市场情况更主动地影响竞价体系向着需要的方向发展。比如说,如果发现市场上存在大量的出价较高但品质不高的广告主,则可以通过调高来强调质量和用户反馈的影响;如果发现市场的竞价激烈程度不够,则可以通过降低
来鼓励竞争,如果存在短期的财务压力,这样就可以短期使得整体营收有所上升;如果为了鼓励广告主提高广告质量和相关性,则可以通过提高
来降低出价的影响。
6 广告网络
合约式的售卖方式必然无法消耗所有的库存,实际销售中为了控制售卖比例以获得更高的品牌溢价空间,未通过合约售卖的广告流量很多。这部分流量我们称为剩余流量(remnant inventory)。
竞价广告产品关键是,售卖的标的主要是人群,而广告位被淡化了。当流量满足多个广告活动的要求时,简单采用竞价模式而不用考虑量的合约。有下面几个关键特点:
- 竞价方式不向广告主做量的约定,而是根据变现能力,即 eCPM,来决定每次展示分配给哪个广告主;
- 由于是按人群售卖,广告网络会极力淡化媒体和广告位的概念,不适合广告主的品牌类需求;
- 从商业角度,提高市场流动性,改善广告网络运营方现金流;
6.1 广告网络的产品策略
决策过程分为检索、排序、定价等几个阶段。
广告检索
广告与搜索面对的文档其实不同,它往往是一个用布尔表达式表达的投放条件,而不是可以简单看成一个词的集合。
搜索广告检索与搜索基本一致,用常规的倒排索引技术就可以解决。展示广告网络与搜索广告不同,由于用户意图不明确,我们往往要将更多的关键字、兴趣标签同时用于检索过程。
广告排序
竞价广告中排序的准则是 eCPM,而在 CPC 结算的情形下,对 eCPM 的估计转化为对点击率的估计问题。广告网络中的 CTR 预测有两方面的困难:
- 点击数据更加稀疏,而且需要同时考虑上下文和用户量方面的信息,这使得各种新广告、新策略的冷启动问题非常突出;
- 广告网络中由于广告位的差别巨大,点击率的变动范围很大,这使得稳健地估计点击率变得相对困难;
6.2 产品案例
Google Display Network
淘宝客
7. 竞价广告需求方产品
竞价广告需求可以分解为两个基本问题:
- 如何挑选合适目标人群;
- 如何对目标人群给出合适的出价;
7.1 搜索引擎营销
通过竞价采买搜索引擎关键词来做推广,这就是搜索引擎营销,即SEM。在SEM中具体表现是关键词和出价。
7.2 媒体购买平台
面向展示广告网络的一站式采买平台称为媒介采买平台,与之类似的概念还有交易终端(Trading Desk,TD)。难点在于ROI优化。
8. 问题
在网址导航类产品的销售中,往往采取按月线下竞价然后签订广告位合约的模式,这属于合约广告还是竞价广告?
合约广告。虽然竞价售卖,但售卖广告位+时间,非CPC结算,更偏向合约类。
六、程序化交易
询价、出价和竞价在展示时进行,产生了以实时竞价即RTB为核心的程序化交易。由此产生广告交易平台ADX,其主要特征是用RTB的方式实时得到广告候选,并按照出价简单完成投放决策。与ADX对应的采买方,成为需求方平台DSP。
从需求方来看,定制化的用户划分能力使得广告主可以像优化自己的推荐系统那样优化广告购买,唯一的区别是这个推荐系统是放在站外的。出价需求的存在和广告主预算范围内的套利要求 DSP 具备点击率预测、点击价值估计、流量预测、站外推荐等多方面的运算能力。
RTB催化了另一个重要的市场:数据交易平台(data exchange)和数据管理平台 DMP
1. 实时竞价
广告网络封闭式竞价方案是无法规模化和精细化地针对定制化标签进行投放的。
实时竞价流程
预先进行的将 ADX 与 DSP 的用户标识对应起来的 cookie 映射(cookie mapping)过程和线上广告请求时的竞价和投放过程。
cookie映射
cookie 映射。当供给和需求双方都可以得到同样的用户标识时,实时竞价并不是总需要此映射过程。但是,当双方能够得到的用户表示不同,特别是在 Web 环境下根据cookie 投放广告时,需要一个预先的映射过程。cookie 映射一般是由 DSP 在广告主网站上发起,这样做的原因是,一般情况下 DSP 负责的是加工广告主定制受众标签,因而不需要对所有用户都建立对应关系。细分为:
- 从广告主网站向 DSP 服务器发起 cookie 映射请求;
- DSP 与 ADX 服务器之间通信完成 cookie 映射;
广告请求
- 用户浏览媒体网站;
- 媒体网站通过 JavaScript 或 SDK 向 ADX 发起广告请求;
- ADX 向各 DSP 传送 URL 和本域名 cookie,发起询价请求。DSP 根据预先做好的 cookie 映射查出对应的已方 cookie,决策是否参与竞价,如果参与,则返回自己的出价。在等待一个固定的时间片后,ADX 选出出价最高的 DSP 返回给媒体网站;
- 媒体网站从胜出的 DSP 拿到广告创意并展示;
2. 其他程序化交易方式
在实时竞价产生以后,广告交易越来越多地依赖机器间在线的协商而非事先约定或人工操作完成,除了实时竞价外,市场上还有其他的程序化交易方式,如优化和私有市场。
广告交易方式谱系
3. 广告交易平台
广告交易平台,即 ADX,是程序化交易时代的关键产品,它负责将媒体流量以拍卖的方式售卖给 DSP,可以类比于证券市场中的交易所。ADX 一般为 CPM 结算方式,DSP 可以自行精细估计点击率,并实时计算出当前展示的合理 eCPM,将 eCPM 整体的估计都交给需求方是比较合适的市场分工。代表产品是RightMedia和DoubleClick ADX。
4. 需求方平台
与 ADX 相对应,以 RTB 方式购买广告的产品形态就是需求方平台,即 DSP。这一产品的核心特征有两个:一个是 RTB 方式的流量购买,另一个是需要支持需求方定制化的用户划分。
4.1 需求方平台产品策略
DSP广告决策过程包括过检索、排序、定价几个阶段,与广告网络差别是增加了出价阶段。
在各种定制化标签中,重定向和 look-alike(新客推荐)的方法具有一定的普适性。
4.2 出价策略
在 DSP 中,由于每次展示都要按 CPM 向 ADX 报价,因此准确地估计 eCPM非常关键,这也成为 DSP 出价策略的基础。通过历史的观察和预测得到市价的曲线;然后,将一天的预算分配到那些市价较低的流量上。除了在时间轴上找合适的出价区间,也可以将此策略拓展到更多的维度上,如性别等。
4.3 重定向
把那些曾经对广告主服务发生明确兴趣的用户找出来,向他们投放该广告主的广告。重定向主要用于品牌广告和效果广告。分为网站重定向和个性化重定向、搜索重定向。
网站重定向(site retargeting)
将在一段时间内到达过广告主网站的用户作为重定向集合。主要包括:一是广告主网站本身的独立访客量水平,二是这些访客与媒体的重合程度。
个性化重定向(personalized retargeting)
对重定向流量进行深入加工,按照品类和购买阶段等因素进行创意上的深度个性化。可以看做站外推荐。
主要向两个方面挖掘:一是对于处于不同购买阶段的用户,采用合适的创意推动他尽快完成转化行为,这里的购买阶段包括浏览、搜索、加入购物车等;二是对于已经有过一些购买记录的用户,使用推荐技术向其展示相关的商品以提升二次购买率。
搜索重定向(search retargeting)
搜索过与广告主直接相关的关键词的用户群作为重定向集合。
4.4 新客推荐
有可能对自己产品发生兴趣,由广告主根据自己的第一方数据提供一部分种子用户,再由拥有更丰富数据的第二方数据的广告平台分析这些用户网络行为的特征,并根据这些特征找到具有相似特征的拓展人群。这样的标签加工策略称为新客推荐,即 look-alike。
4.5 产品案例
Criteo
InviteMedia
聚效
5. 供给方平台
广告请求是被分配到自运营广告库,还是其他广告网络,或者是 DSP,是根据他们的收益在线动态决定的,这样的方案称为动态分配(dynamicallocation)。对应的产品形态就叫作供给方平台(Supply Side Platform,SSP)。
5.1 供给方平台产品策略
- 从自有广告库中根据当前受众标签检索合适的广告候选,并估计每个广告候选的 eCPM;
- 排序得到 eCPM 最高的广告候选以及相应的 eCPM 值
;
- 同样根据环境信息和受众标签估算出各个合作的广告网络大致的 eCPM;
- 排序得到 eCPM 最高的广告网络以及相应的 eCPM 值
;
- 以 为底价
,通过 RTB 接口向各个合作的 DSP 查询更高变现价值的广告;
5.2 产品案例
Admeld
Rubicon
6. 数据加工和交易
提高定向的精准程度与人群覆盖率,技术远不是唯一重要的因素。那么什么才是决定性的呢?是数据的来源与质量。
6.1 有价值的数据来源
用户标识
Web浏览器cookie,IOS用户标识符IDFA,安卓的Android ID或IMEI。
用户行为
转化(conversion)、预转化(pre-conversion)、搜索广告点击(sponsored search click)、展示广告点击(ad click)、搜索点击(search click)、搜索(search)、分享(share)、页面浏览(page view)、广告浏览(ad view)等在线行为是可以被广泛采集并且对于受众定向或广告决策有明确作用。
人口属性
地理位置
社交关系
6.2 三方数据划分
第一方和第二方分别是指广告主和广告平台,而不直接参与广告交易的其他数据提供方统称为第三方。在广告网络中,主要使用第二方数据指导广告投放;而在实时竞价环境下,不仅第一方数据可以被利用,大量第三方数据的加工和交易也逐渐发展起来。
6.3 数据管理平台
6.4 数据交易平台
6.5 产品案例
BlueKai
AudienceScience
7. 在线广告产品交互关系
从媒体角度,有以下三种帮助变现流量:
- 将广告位托管给广告网络,由广告网络决策广告投放,从赚取分成的媒体 1。
- 将广告位对接到广告交易平台,以实时竞价的方式变现的媒体 2;
- 将广告位托管给 SSP,这样可以同时对接多个广告网络和 PMP 接口,并按照动态分配的逻辑选择变现最高的需求方的媒体 3;
七、移动互联与原生广告
主要介绍将内容与广告决策深度融合的原生广告产品。
1. 原生广告的相关产品
1.1 信息流广告
Twitter、Facebook、微博和QQ空间等社交网络以及Yahoo、头条、抖音等非社交媒体
1.2 搜索广告
搜索广告与内容的混合方式有两种,一种是将广告在固定的位置上展现,另一种是将广告与内容混合排列在一起。当然,在实际的搜索引擎中,广告与内容也是来源于不同的服务,前者按照 eCPM 排序,后者按照相关性排序,两者混合的规则也是一些固定的逻辑,并没有实现按同一准则的统一排序。
1.3 软文广告
内容本身就是为了委婉地宣传某种产品而生产的,很多网站的内容营销实际上指的就是这种软文广告。
1.4 联盟
2. 移动广告的现状和挑战
2.1 移动广告特点
移动广告带来新的机会有:
- 情境广告的可能性;
- 大量潜在的本地化广告主;
2.2 移动广告的创意形式
移动展示广告主要的创意形式有横幅、插屏、开屏、锁屏、推荐墙、积分墙等。
2.3 移动广告的挑战
移动广告前景广阔,但也遇到不少挑战:
- 应用生态造成的行为数据割裂;
- 许多 PC 时代广告主移动化程度还不够,无法充分消化广告带来的流量;
3. 原生广告平台
3.1 表现原生和意图原生
一种诉求是将广告的展示风格和样式变得与内容相一致,从而做到产品形式上的“原生”;另一种诉求是将广告的投放决策逻辑与内容生产相一致,从而做到用户意图上的“原生”。我们把这两种原生分别称为表现原生与意图原生。
社交网络信息流广告侧重于表现的原生性,而搜索广告在表现和意图两个方面都是原生的。
3.2 植入式原生广告
一是要判断用户当前的意图,二是要确定根据用户的意图提供什么信息。
3.3 产品案例
InMobi
OutBrain
4. 原生广告和程序化广告
搜索广告和原生广告没有程序化交易场景,关键问题就是原生广告的触发是否根据用户意图进行。在明确提供用户意图的原生广告中,完全开放地进行 RTB,很难控制付费结果的相关性。
八、在线广告产品实践
从广告和泛广告变现角度,流量、流量和品牌属性。
1. 媒体实战
1.1 变现方式和产品决策
品牌广告->CPT和CPM+竞价广告(品牌)
竞价广告->垂直广告网络和水平广告网络(垂直媒体)
水平广告网络->合作广告网络和自营广告网络(流量)
1.2 数据支持方案
广告网络->自建定向受众平台、委托DMP建立受众定向平台、用SSP统一优化收益
2. 广告主实战
推广目的:品牌和效果
3. 数据提供方实践
数据->评估->变现(直接运营和售卖数据)
-
Android 移动广告sdk的原理
2018-02-09 17:43:12详细讲解一下android广告SDK在app里面到底会做什么以及应该做什么,知道了这些的话,就可以更好的优化自己的广告获取更多的收入,甚至可以根据这些步骤自己开发一款自己的广告SDK,用于制作自己的广告投放系统。...详细讲解一下android广告SDK在app里面到底会做什么以及应该做什么,知道了这些的话,就可以更好的优化自己的广告获取更多的收入,甚至可以根据这些步骤自己开发一款自己的广告SDK,用于制作自己的广告投放系统。
很多开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会选择到百度联盟或者Google Admob这些广告服务提供商注册开发者账号,在自己的APP里面加上几行广告位代码,集成他们的广告SDK包。然后谋事在人,成事在天,只有每天看报表查查收益。
也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这样做也不是没有代价的,一是包的体积会增加不少,对下载成功率影响很大,二是市面上的广告SDK也良莠不齐,有些SDK在可能在后台会做一些“高级”工作,轻则导致用户流失重则导致开发账号被禁。
下面讲解原理附赠全套源码,文末还有福利,介绍一种不用开发和对接就可以管理自己广告资源的方法。
1 SDK工作流程
一般情况下移动广告SDK的大致工作流程如下:
如上图所示,其实广告SDK充当了一个中间代理角色,它负责App的事件处理,向服务器发送广告请求,渲染广告创意,上报广告展示事件等等,开发者不需要自己和广告服务器进行交互,不需要自己渲染广告位,不需要自己处理事件,极大的简化了开发的复杂度,下面我们详细讲解每一个步骤:
1.1 广告位展示机会
移动广告位有多种多样的展示形式,应用使用的不同时机可以展示不同形式的广告,一般常用的广告展示机会是用户打开App是加载启动页广告,玩游戏暂停的时候进入插屏,在页面顶部或者底部加载横幅广告等。广告位设计的原则是清楚的展示广告创意信息,并且不至于影响用户体验。最近原生广告比较流行,原因就是原生广告可以和应用本身内容的上下文保持一致不会显得非常突兀。
1.2 系统软硬件信息获取
SDK获取适当系统信息有助于精准投放广告以及广告反作弊和广告计费,比如获取用户手机型号,系统软件版本,IP,MAC,IMEI等等,有些SDK会获取用户的隐私信息,比如获取用户联系人通讯录,账号信息,手机号等等,这些我们是不提倡的。
获取这些适当的信息需要增加一些系统权限:
<uses-permission
android:name="android.permission.INTERNET"/><uses-permission
android:name="android.permission.READ_PHONE_STATE"/><uses-permission
android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission
android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission
android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission
android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>下面是获得一些系统软硬件系统的代码:
public class DeviceInfoUtil {
private Activity activity;
public DeviceInfoUtil(Activity activity) {
this.activity = activity;
}
private String getIP() {
try {
Context context =
activity.getApplicationContext();NetworkInfo info =
((ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE)).getActiveNetworkInfo();
if (info != null &&
info.isConnected()) {if (info.getType() ==
ConnectivityManager.TYPE_MOBILE) {//当前使用2G/3G/4G网络for
(Enumeration<NetworkInterface> en =
NetworkInterface.getNetworkInterfaces(); en.hasMoreElements(); ) {NetworkInterface
intf = en.nextElement();for
(Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
enumIpAddr.hasMoreElements(); ) {InetAddress
inetAddress = enumIpAddr.nextElement();if
(!inetAddress.isLoopbackAddress() && inetAddress instanceof
Inet4Address) {return
inetAddress.getHostAddress();}
}
}
} else if (info.getType()
== ConnectivityManager.TYPE_WIFI) {WifiManager wifiManager
= (WifiManager) context.getSystemService(Context.WIFI_SERVICE);WifiInfo wifiInfo =
wifiManager.getConnectionInfo();String ipAddress =
intIP2StringIP(wifiInfo.getIpAddress());return ipAddress;
}
}
} catch (Exception e) {
return "";
}
return "";
}
private String getAppversion() {
PackageManager pm =
activity.getApplicationContext().getPackageManager();try {
PackageInfo pi =
pm.getPackageInfo(activity.getPackageName(), 0);String appVersion =
pi.versionName;return appVersion;
} catch (Exception e) {
return "1.0";
}
}
private String intIP2StringIP(int ip) {
return (ip & 0xFF) + "." +
((ip >> 8) &
0xFF) + "." +((ip >> 16) &
0xFF) + "." +(ip >> 24 &
0xFF);}
private String getCurrentUserAgent() {
try {
String userAgent =
System.getProperty("http.agent");return userAgent;
} catch (Exception e) {
return "";
}
}
private String getPhoneIMEI() {
try {
TelephonyManager mTm =
(TelephonyManager)
activity.getApplicationContext().getSystemService(Context.TELEPHONY_SERVICE);String imei =
mTm.getDeviceId();return imei;
} catch (Exception e) {
return "";
}
}
private String getMacAddress() {
try {
String macAddress = null;
StringBuffer buf = new
StringBuffer();NetworkInterface
networkInterface = null;networkInterface =
NetworkInterface.getByName("eth1");if (networkInterface == null) {
networkInterface =
NetworkInterface.getByName("wlan0");}
if (networkInterface == null) {
return
"02:00:00:00:00:02";}
byte[] addr =
networkInterface.getHardwareAddress();for (byte b : addr) {
buf.append(String.format("%02X:", b));
}
if (buf.length() > 0) {
buf.deleteCharAt(buf.length() - 1);
}
macAddress = buf.toString();
return macAddress;
} catch (Exception e) {
return "";
}
}
private Location getLocation() {
LocationManager locationManager = (LocationManager)
activity.getSystemService(Context.LOCATION_SERVICE);String locationProvider;
//获取所有可用的位置提供器
List<String> providers = locationManager.getProviders(true);
if
(providers.contains(LocationManager.GPS_PROVIDER)) {//如果是GPS
locationProvider =
LocationManager.GPS_PROVIDER;} else if (providers.contains(LocationManager.NETWORK_PROVIDER)) {
//如果是Network
locationProvider =
LocationManager.NETWORK_PROVIDER;} else {
return null;
}
//获取Location
Location location =
locationManager.getLastKnownLocation(locationProvider);if (location != null) {
//不为空,显示地理位置经纬度
return location;
} else {
return null;
}
}
private String getAndroidid() {
try {
return
Settings.System.getString(activity.getContentResolver(),
Settings.System.ANDROID_ID);} catch (Exception e) {
return "";
}
}
private String getCarrier() {
try {
TelephonyManager telManager =
(TelephonyManager) activity.getSystemService(Context.TELEPHONY_SERVICE);String operator =
telManager.getSimOperator();return operator;
} catch (Exception e) {
return "";
}
}
private Integer getNetwork() {
try {
int network = 0;
ConnectivityManager
connectivity = (ConnectivityManager) activity.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
return network;
}
NetworkInfo networkInfo =
connectivity.getActiveNetworkInfo();if (networkInfo != null &&
networkInfo.isConnected()) {if (networkInfo.getType()
== ConnectivityManager.TYPE_WIFI) {network = 1;
} else if
(networkInfo.getType() == ConnectivityManager.TYPE_MOBILE) {String _strSubTypeName
= networkInfo.getSubtypeName();// TD-SCDMA networkType is 17
int networkType =
networkInfo.getSubtype();switch (networkType) {
case
TelephonyManager.NETWORK_TYPE_GPRS:case
TelephonyManager.NETWORK_TYPE_EDGE:case
TelephonyManager.NETWORK_TYPE_CDMA:case
TelephonyManager.NETWORK_TYPE_1xRTT:case
TelephonyManager.NETWORK_TYPE_IDEN: //api<8 : replace by 11network = 2;
break;
case
TelephonyManager.NETWORK_TYPE_UMTS:case
TelephonyManager.NETWORK_TYPE_EVDO_0:case
TelephonyManager.NETWORK_TYPE_EVDO_A:case
TelephonyManager.NETWORK_TYPE_HSDPA:case
TelephonyManager.NETWORK_TYPE_HSUPA:case
TelephonyManager.NETWORK_TYPE_HSPA:case
TelephonyManager.NETWORK_TYPE_EVDO_B:case
TelephonyManager.NETWORK_TYPE_EHRPD:case
TelephonyManager.NETWORK_TYPE_HSPAP:network = 3;
break;
case
TelephonyManager.NETWORK_TYPE_LTE:network = 4;
break;
default:
//中国移动 联通 电信 三种3G制式
if
(_strSubTypeName.equalsIgnoreCase("TD-SCDMA") ||
_strSubTypeName.equalsIgnoreCase("WCDMA") ||
_strSubTypeName.equalsIgnoreCase("CDMA2000")) {network =
3;} else {
network =
0;}
break;
}
}
}
return network;
} catch (Exception e) {
return 0;
}
}
private String getMD5(String s) {
char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'a', 'b', 'c',
'd', 'e', 'f'};try {
byte[] btInput = s.getBytes();
MessageDigest mdInst =
MessageDigest.getInstance("MD5");mdInst.update(btInput);
byte[] md = mdInst.digest();
int j = md.length;
char str[] = new char[j * 2];
int k = 0;
for (int i = 0; i < j; i++)
{byte byte0 = md[i];
str[k++] = hexDigits[byte0
>>> 4 & 0xf];str[k++] = hexDigits[byte0
& 0xf];}
return new String(str);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
private String getPackageList()
{
ArrayList<String> al = new ArrayList<String>();
PackageManager packageManager= activity.getPackageManager();
List<PackageInfo> list=packageManager.getInstalledPackages(0);
for (PackageInfo p:list) {
int
flags=p.applicationInfo.flags;if((flags &
ApplicationInfo.FLAG_SYSTEM)==0) {al.add(p.applicationInfo.packageName);
}
}
StringBuilder sb = new StringBuilder("");
for(String s:al)
{
if(sb.toString().equals(""))
{
sb.append(s);
continue;
}
sb.append(",").append(s);
}
return sb.toString();
}
public String getGaid()
{
String advertisingId ="";
try {
AdvertisingIdClient.AdInfo
adInfo = AdvertisingIdClient.getAdvertisingIdInfo(activity);
advertisingId = adInfo.getId();
return advertisingId;
} catch (Exception e) {
return advertisingId;
}
}
private boolean isGooglePlayAvaiable()
{
PackageManager pm = activity.getPackageManager();
boolean app_installed = false;
try {
PackageInfo info =
pm.getPackageInfo("com.android.vending",
PackageManager.GET_ACTIVITIES);String label = (String)
info.applicationInfo.loadLabel(pm);app_installed =
(!TextUtils.isEmpty(label) && label.startsWith("Google
Play"));} catch(PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed;
}
}
1.3 广告请求与检索
在获取了系统相关的信息后SDK就会去广告检索服务器请求广告了,请求的内容包括:
- 全局唯一请求ID
SDK会给每个广告请求生成一个全局唯一请求ID,系统中后续所有的事件的归因都会根据这个全局唯一请求ID来进行。
- 加密Token
为了检查广告请求的有效性,广告系统会为开发者的应用分配一个密钥,SDK会使用特定的算法根据这个密钥算出一个加密Token,服务器在收到广告请求后会根据这个Token反算来验证是否是你的正常的广告请求。
- 系统信息
SDK之前收集的系统软硬件信息。
广告请求示例:
{
"version": "2.0",
"time": "1414764477867",
"token": "2c38ec54777641d9687aa8b65e7fa621",
"reqid": "2c38ec54777641d9687aa8bgrefef343",
"appid": "100002",
"adspotid": "100000433",
"impsize": 1,
"ip": "58.53.67.42",
"ua": "Mozilla/5.0 (iPhone; CPU iPhone OS 9_2 like Mac OS
X) AppleWebKit/601.1.46 (KHTML, like Gecko) Mobile/13C75","lat": 31.167,
"lon": 112.582,
"sw": 1080,
"sh": 1920,
"ppi": 428,
"make": "HUAWEI",
"model": "HUAWEI Y600-U00",
"os": 1,
"osv": "7.1",
"imei": "862033031965161",
"mac": "38:bc:1a:c7:3b:11",
"androidid": "69f2d801e804f908",
"idfa": "E5C21290-B2D4-46D4-B9B7-37B59DD78684",
"carrier": "46000",
"network": 2,
"devicetype": 1,
"res_type": 0,
}
SDK和广告检索服务器请求以及应答格式,可以是基于restful接口通过json传输,也可以使用protobuf自己定义序列化方式,前一种易读易升级,后一种传输编解码效率高,但是可读性和扩展性会差一些。
广告服务器在收到SDK发出的请求后,会根据请求中的软硬件信息,广告主的定向需求等,通过一定的算法选择一个合适的创意返回给SDK,这是广告精准定向与智能大数据算法的范畴。
广告相应的信息中会包含广告素材信息,广告语,跳转链接,展示上报链接,点击上报链接等等信息。
广告响应示例:
{
"code": 200,
"msg": "SUCCESS",
"imp": [
{
"impid":
"60a9b20ce5ec11e5af66a45e60c539c5","win_price": 20,
"adid":
"103204","aduser":
"43435","compid":
"20031","crid":
"100345","image": [
{
"type": 301,
"iurl":
"http://js.snmi.cn/images/zufang1.png"},
{
"type": 101,
"iurl":
"http://js.snmi.cn/images/zufang2.png"}
],
"word": [
{
"type": 1,
"text":
"hello world"},
{
"type": 2,
"text":
"hello shuttle"}
],
"video": [
{
"type": 901,
"duration":
15,"bitrate":
30.8,"vurl":
"http://xxx.com/video.mp4"}
],
"link":
"http://www.google.com/click","deeplink":
"http://www.google.com/click","action": 1,
"adsource": "广告",
"logo":
"http://js.snmi.cn/images/logo.png""imptk":
["http://displayreport1", "http://displayreport2"],"clicktk":
["http://clickreport1", "http://clickreport2"],"playtk":
["http://playvideoreport1", "http://playvideoreport2"],"ext": {
}
}
]
}
1.4 广告位渲染
广告返回结果中已经包含了广告创意的素材信息,对于一些非原生的常规的广告位比如:横幅,开屏,插屏等SDK会负责渲染,而原生的广告的形式需要和App的内容相适应,开发者根据SDK提供的接口自己来渲染。
1.5 广告事件处理与事件上报
广告的返回结果中已经包含了相应的事件上报地址数组,在相应的事件发生的时候SDK会负责请求相应的地址,比如广告点击后SDK就会请求Clicktk中的点击事件上报链接,事件服务器收到请求就会记录一次点击。
2 SDK架构设计
一般情况下SDK的架构如以下类图所示:
SDK中包含了一系列的广告位类,比如BannerAdspot,应用AppActivity创建广告位时,会实例化相应的广告位类,并且实例化广告位的事件监听器并注入监听器,广告位事件监听器的作用是在广告位状态发生变化时可以在应用中做一些必要的处理逻辑,比如打印日志记录,切换广告位的可视状态等。
BayesBanner bayesBanner = new
BayesBanner(this,"10000314","100139","xxxxxxxx",
BayesAdSize.SIZE_300x250);RelativeLayout.LayoutParams rbl = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
rbl.addRule(RelativeLayout.CENTER_HORIZONTAL);
rl.addView(bayesBanner,rbl);
//注入广告监听器
bayesBanner.setListener(new BayesBannerListener() {
@Override
public void onAdReady() {
//开发者可以实现自己的事件逻辑的时机
System.out.println("get Ad Ready");
}
@Override
public void onAdShow() {
System.out.println("get Ad Show");
}
@Override
public void onAdClick() {
System.out.println("get Ad Click");
}
@Override
public void onAdFailed() {
System.out.println("get Ad Failed");
}
@Override
public void onAdShowReportOk() {
System.out.println("get Ad Show Repored OK");
}
@Override
public void onAdShowReportFailed() {
System.out.println("get Ad Show Report failed");
}
@Override
public void onAdClickReportOk() {
System.out.println("get Ad Click Report OK");
}
@Override
public void onAdClickReportFailed() {
System.out.println("get Ad Click Report failed");
}
});
广告位类都会实现Adspot接口,Adspot接口定义了通用的方法。
广告位包含了Adservice类实例,它是SDK中的核心类,它实现了SDK中通用的方法,比如,收集软硬件信息,请求广告,下载图片,下载软件包,上报事件。
在AdService类中所有的网络请求都是在子线程中通过异步方式完成的,不然会导致主线程卡死,同时网络请求是不可靠的,所有网络请求都有超时时间限制,超时会释放系统的资源。
网络请求示例:
private void requestAd(JSONObject jsonObject) {
try {
URL url = new
URL(BayesSdkConfig.postUrl);// 建立http连接
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();// 设置允许输出
conn.setDoOutput(true);
conn.setDoInput(true);
// 设置不用缓存
conn.setUseCaches(false);
// 设置传递方式
conn.setRequestMethod("POST");
// 设置文件字符集:
conn.setRequestProperty("Charset", "UTF-8");
//设置超时时间
conn.setConnectTimeout(1000);
//转换为字节数组
byte[] data =
(jsonObject.toString()).getBytes();// 设置文件长度
conn.setRequestProperty("Content-Length",
String.valueOf(data.length));// 设置文件类型:
conn.setRequestProperty("contentType", "application/json");
// 开始连接请求
conn.connect();
OutputStream out =
conn.getOutputStream();// 写入请求的字符串
out.write((jsonObject.toString()).getBytes());
out.flush();
out.close();
if (conn.getResponseCode() ==
200) {BufferedReader in = null;
String result =
"";in = new BufferedReader(
new
InputStreamReader(conn.getInputStream()));String line;
while ((line =
in.readLine()) != null) {result += line;
}
Message msg = new
Message();msg.what = AD_RECEIVED;
msg.obj = result;
handler.sendMessage(msg);
} else {
System.out.println("无广告返回");
System.out.println(conn.getResponseMessage());
Message msg = new
Message();msg.what =
AD_REQUEST_ERROR;msg.obj =
conn.getResponseMessage();handler.sendMessage(msg);
}
} catch (Exception e) {
Message msg = new Message();
msg.what = AD_REQUEST_ERROR;
msg.obj = "广告请求发生异常";
handler.sendMessage(msg);
}
}
3 点击事件处理
当用户点击广告位后,就会触发点击事件处理的逻辑,后续的处理逻辑一般分为两大类,一种是落地页跳转,一种是软件包下载,通用的方法是使用系统默认的链接打开方式:
Intent intent = new Intent();
intent.setData(Uri.parse(link));
intent.setAction(Intent.ACTION_VIEW);
this.appContext.startActivity(intent);
对于下载类的广告可以通过多线程下载器进行下载,可以支持多线程和断点续传,提高下载的成功率:
mDownloadManager = (DownloadManager)
mContext.getSystemService(DOWNLOAD_SERVICE);// apkDownloadUrl 是 apk 的下载地址
DownloadManager.Request request = new
DownloadManager.Request(Uri.parse(link));// 获取下载队列 id
enqueueId = mDownloadManager.enqueue(request);
BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context
context, Intent intent) {long
downloadCompletedId = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
// 检查是否是自己的下载队列
id, 有可能是其他应用的if (enqueueId !=
downloadCompletedId) {return;
}
DownloadManager.Query query
= new DownloadManager.Query();query.setFilterById(enqueueId);
Cursor c =
mDownloadManager.query(query);if (c.moveToFirst()) {
int columnIndex =
c.getColumnIndex(DownloadManager.COLUMN_STATUS);if
(DownloadManager.STATUS_SUCCESSFUL == c.getInt(columnIndex)) {bs.reportDownloadComplete();
// 获取下载好的 apk 路径
String uriString =
c.getString(c.getColumnIndex(DownloadManager.COLUMN_LOCAL_FILENAME));// 提示用户安装
promptInstall(Uri.parse("file://" + uriString));
}
}
}
};
// 注册广播, 设置只接受下载完成的广播
mContext.registerReceiver(receiver, new IntentFilter(
DownloadManager.ACTION_DOWNLOAD_COMPLETE));
-
计算广告:互联网商业变现的市场与技术
2021-08-23 17:24:38量化的方法使计算广告学成为计算机科学与工程的一个崭新和重要的方向。 前言 所有能够传播信息的商品,其售价都会趋向其边际成本。 商业模式探索 电影的信息传播量很大,边际成本很低,与其售价不符,因此必定... -
android广告SDK原理详解(附源码)
2017-08-16 11:48:49广大的开发者吃糠咽菜开发了一两款APP,获取了一些流量后自然就会想到流量变现,一般情况下大家会...也有一些开发者为了能够提高自己的变现水平,同时接入了好几家的sdk,哪家出的收益高一点我就出哪家的广告,但是这 -
【转载】最全的计算广告资料,广告算法工程师入门
2017-08-23 23:50:36广告有效性原理1.5. 在线广告相关行业协会 2. 计算广告基础2.1. 在线广告的技术特点2.2. 计算广告核心问题2.2.1. 在线广告技术课题2.2.2. 在线广告计费模式 2.3. 计算广告系统架构2.4. 基础知识准备2.4.1. 信息检索... -
移动广告作弊与防作弊原理及解决方案解读
2019-07-24 21:19:10摘要:根据热云数据对虚假流量的深入研究,目前移动广告虚假流量主要通过技术手段不断变更设备信息与内存数据,实现模拟行为,批量生成想要的流量。另外还有设备信息伪装,通过篡改设备ID号或者使用模拟器等进行,并... -
转载 刘鹏老师 计算广告学 人大笔记
2018-05-28 15:59:25广告有效性原理1.5. 在线广告相关行业协会2. 计算广告基础2.1. 在线广告的技术特点2.2. 计算广告核心问题2.2.1. 在线广告技术课题2.2.2. 在线广告计费模式2.3. 计算广告系统架构2.4. 基础知识准备2.4.1. 信息检索... -
计算广告学
2016-02-25 14:42:37广告有效性原理1.5. 在线广告相关行业协会 2. 计算广告基础 2.1. 在线广告的技术特点2.2. 计算广告核心问题 2.2.1. 在线广告技术课题2.2.2. 在线广告计费模式 2.3. 计算广告系统架构2.4. 基础知识准备 -
【计算广告】基本概念及RTB/RTA投放策略介绍
2022-03-23 13:05:50介绍了计算广告领域的基本概念以及RTA,RTB等常用技术。 -
西瓜视频稳定性治理体系建设一:Tailor 原理及实践
2020-12-14 10:00:00Tailor 工具现已开源,本文将通过原理、方案和实践来剖析 Tailor 的相关细节。 背景 稳定性治理一直是个老生常谈的话题,过去我们调查稳定性问题只能依靠堆栈和源码,但很多时候堆栈是远远不够的,对于严重依赖的... -
[转] 文本相似性算法Simhash原理及实践
2017-04-08 18:53:28大规模海量相似性文档的计算局部敏感hash算法simhash的基本原理和实践 -
电路原理于歆杰答案pdf
2021-01-17 14:13:50原理于歆得最的一效益综合种管术以获理技佳的,性工织的作有组通过创造,地实现使功能所需用者可靠,的(或作业值和资源工程是以有效利用提高价值)价为目产品。 点体现了比较,杰答下列是(不正确的分析,杰答逐步... -
计算机处理器基础原理笔记
2019-10-24 20:47:59一、CPU指令电路 1. 计算机每执行一条指令的过程,可以分解成这样几个步骤。 (1)Fetch(取得指令),也就是从PC寄存器里找到对应的指令地址,根据指令地址从内存里把具体的指令,加载到指令寄存器中,然后把PC... -
网络原理知识点汇总
2019-12-03 16:28:14:我公司网站在百度上做了广告,但不知道在百度上做广告对我们网站的访问量是否有影响,那么可以对每个请求中的Referer进行分析,如果Referer为百度的很多,那么说明用户都是通过百度找到我们公司网站的。... -
GBDT的原理和应用
2017-10-23 13:42:54竞价排名广告 的点击率预估(CTR),所以就从头学习了一下原理并涉猎了一些相关的应用场景,写一篇文章总结一下,希望可以表述清楚,读者会有所收获。 概述 DT-Decision Tree决策树,GB是Gradient Boosting,是一种... -
理解直播及其工作原理
2022-01-07 00:10:00这些商业播放器需要测试与HLS、DASH、DRM、广告插入和字幕的兼容性,并(常常)带有用于收集回放信息的扩展API。 视频分析:QoE和QoS 整个世界都在数据上运行,你的直播平台也不例外。视频直播提供商应该使用分析... -
解析HTTPS加密原理
2022-03-14 13:01:35公证机构三、HTTPS加密原理总结(重点) HTTPS简单来说,就是HTTP的兄弟,不同的是,HTTP是明文传输,HTTPS是密文传输,HTTPS在HTTP的基础上,引入了加密层SSL/TLS。 一、背景 HTTP因其明文传输,就导致在传输的过程... -
【用户画像】大数据之用户画像的原理、应用与实现
2021-01-17 17:35:56大数据之用户画像的原理、应用与实现。 -
大数据十大核心原理(互联网上整理)
2021-03-03 17:21:23例如:IBM将使用以数据为中心的设计,目的是降低在超级计算机之间进行大量数据交换的必要性。大数据下,云计算找到了破茧重生的机会,在存储和计算上都体现了数据为核心的理念。大数据和云计算的关系: -
微信小程序+.NET(九) 小程序之简单的广告拦截
2019-08-21 14:58:40微信小程序之简单的广告拦截 导语:我们在web-view内嵌网上的某些网站比如我内嵌的小说网站,会包含某些影响使用和含有诱导链接的垃圾广告,这时我们该怎么处理呢? 首先,要是自己写的网站,就可以自己添加... -
一文带你了解Python爬虫(一)——基本原理介绍
2020-08-04 22:14:53爬虫的出现,可以一定程度上代替手工访问网页,所以,原先我们需要人工取访问互联网信息的操作,现在都可以用爬虫自动化实现,这样可以更高效率地利用好互联网中的有效信息。 四、爬虫分类 1.通用网络爬虫: 又称为... -
谷歌的seo原理是什么
2019-04-18 13:46:30SEO(搜索引擎优化)是通过了解搜索引擎的规则来调整网站,以提高相关搜索中网站的排名。...想要有效利用到搜索引擎或关键字广告,那么对于搜索引擎的基础原理就需要有一定的了解,至于其他的手法则... -
计算机的工作原理
2018-09-13 15:14:58计算机的工作原理 你需要有一定的电学知识,然后就可以去看模拟电路和数字电路相关的书籍了,了解完这两个东西后你就能基本明白计算机是怎么运作起来的了。这里只做简单回答。简单回答的意思是说,这个回答旨在让... -
【推荐架构day5】今日头条算法的基本原理
2020-02-22 16:03:37本文来自今日头条曹欢欢博士的分享。...今日头条委托资深算法架构师曹欢欢博士,公开今日头条的算法原理,以期推动整个行业问诊算法、建言算法;通过让算法透明,来消除各界对算法的误解,并逐步推动整个行业让算... -
常见漏洞及其原理(面试)
2021-12-01 20:02:37盗取用户Cookie、未授权操作、修改DOM、刷浮窗广告、发动XSs蠕虫攻击、劫持用户行为,进一步渗透内网。 XSS攻击如何进行防护 1)将HTML元素内容、属性以及URL请求参数、CSS值进行编码 2)当编码影响业务时,使用白... -
广告监测
2020-10-17 15:38:29广告监测可以跟踪广告投放的真实效果,根据广告数据,从而有针对性地优化营销策略。 广告监测有以下几个主要的目的: 监测和衡量广告投放效果; 通过反作弊手段,识别出各个渠道的虚假数据; 为市场人员提供数据... -
DNSSEC原理
2019-06-09 20:47:21DNSSEC 原理、配置与布署简介 Posted onMay 16, 2011byDuan Haixin 作者:段海新,清华大学信息网络工程研究中心 摘要:DNSSEC是为解决DNS欺骗和缓存污染而设计的一种安全机制。本文概要介绍DNSSEC的背景、工作...