作为最火的新闻app,今日头条有这很大的活跃用户群和日访问量。大流量决定了今日头条会位商品做广告。

1.如下为今日头条的广告收费方案(来自官方开发文档):

激活数是 APP 广告主衡量转化效果的重要指标之一,为满 今日头条(以下简称头条)广告主 对广告效果的监测需求,本文档介绍如何把从头条广告渠道分发的 APP 激活数回传给头条广告平台, 帮助广告主跟踪转化效果。 对于回调了激活数据的广告计划,头条支持 oCPC(目标激活成本出价)竞价方式,帮助优化转化。回调方案适用于 Android 和 iOS。

2.其数据流示意图:

3.需要了解的一些操作界面示意图:

4.今日头条广告激活联调的流程:以头条用户为例:

1) 头条用户点击广告,下载app此时会通知服务器;服务器会将其激活记录保存到数据库中;

2)用户安装app这是app会调用服务器接口,将该手机的相关唯一信息传递到后台,后台通过匹配该手机的app是否为今日头条广告下载;如果匹配成功,调用今日头条回调函数,通知记为一次激活状态进行扣费。

5.接下来不多说我们进行代码开发分析演示:

首先我们需要明确,本次开发需要提供两个接口:(1)服务器接收头条点击广告信息时的请求接口一;(2)广告app安装应用时需要调用接口通知服务器相关信息,用该信息进行匹配是否为头条界面被点击是下载的应用;匹配成功后服务器调用接口二通知头条广告服务器进行扣费(如果有需要可以设置服务器的扣费级别,在某种级别以上才调用接口二进行扣费)。

1) __参数__形式:
a) iOS 示例
http://xxxx.xxx.com?adid=__AID__&cid=__CID__&idfa=__IDFA__&mac=__MAC__&os=__OS__&timestamp=__TS__&convert_id=__CONVERT_ID__&callback=__CALLBACK_PARAM__
b) 安卓示例
http://xxxx.xxx.com?adid=__AID__&cid=__CID__&imei=__IMEI__&mac=__MAC__&androidid=__ANDROIDID1__&os=__OS__&timestamp=__TS__&convert_id=__CONVERT_ID__&callback=__CALLBACK_PARAM__

2)不多说按以上逻辑进行代码展示(安卓为例):

// 安卓获取头条推送数据
    @RequestMapping(value = "/ttpushAndorid", method = RequestMethod.GET)
    @ResponseBody
    public String ttpushAndroid(String adid, String cid, String imei, String mac, String androidid,
            String os, String timestamp, String convert_id, String callback) {

TouTiao touTiao = new TouTiao(adid, cid, "", mac, os, timestamp, convert_id, callback, imei,
                "0", androidid);
        logger.info("今日头条回馈安卓数据" + touTiao.toString());

touTiaoService.insertSelective(touTiao);

return "success";

}

3)匹配信息,进行今日头条激活回调

/**
     * 客户端返回设备信息
     * 
     * @param code
     * @param responseCommand
     * @return
     */
    @RequestMapping(value = "/deviceInfo", method = RequestMethod.POST)
    @ResponseBody
    public ResponseCommand deviceInfo(@RequestBody String code, ResponseCommand responseCommand,
            HttpServletRequest request) {
        logger.info("调用设备信息接口"+code);
        JSONObject JsonData = JSON.parseObject(code);
        Deviceinfo deviceinfo = JSON.parseObject(JsonData + "", Deviceinfo.class);
        logger.info("手机端推送信息:"+deviceinfo.toString());
        Date date = new Date();
        deviceinfo.setCreatetime(date);
        deviceinfo.setUpdatetime(date);
        deviceinfoService.saveDeviceInfo(deviceinfo);
        // 判断本次注册的用户是否为头条推广路径,吸收的用户
        String imei = new MD5Util().string2MD5(deviceinfo.getImei());
        // 匹配os,idfa,imei来确定是否为头条推广的
        logger.info("匹配os,idfa,imei来确定是否为头条推广的:"+deviceinfo.getOs()+","+deviceinfo.getIdfa()+","+imei+","+deviceinfo.getAndroidid());
        List<TouTiao> touTiaos = touTiaoService.findTouTiaoByOsIdfaImei(deviceinfo.getOs(),
                deviceinfo.getIdfa(), imei, deviceinfo.getAndroidid());
        logger.info("配到的头条推送信息:"+touTiaos.get(0).toString());
        if (touTiaos != null && touTiaos.size() > 0) {
            String toutiaoWay = PropertiesUtil.getValue("WebConfig.properties", "toutiaoWay");
            if ("1".equals(toutiaoWay)) {
                //广告系统用于区别点击的唯一标识 ,来源于接口一的CALLBACK_PARAM
                String callback_param = touTiaos.get(0).getCallbackUrl();
                String muid = "";
                //0–Android;1–iOS
                String os = touTiaos.get(0).getOs();
                //默认为安卓key
                String key = "383e7775-1b52-425c-8066-7478a5abcaf1";
                //安卓:IMEI 号取md5sum 摘要; IOS:IDFA 号原值
                if (os != null && "0".equals(os)) {
                    muid = new MD5Util().string2MD5(touTiaos.get(0).getImei());
                } else {
                    muid = touTiaos.get(0).getIdfa();
                    //IOS的key
                    key = "8da355c8-c7ac-4faf-935f-d7b5b0d258e8";
                }
                //激活效果统计时间
                long conv_time = touTiaos.get(0).getCreatetime().getTime();
                //比如来自 talkingdata的激活回调, 可以填 写 TD
                String url = "http://ad.toutiao.com/track/activate/?callback=" + callback_param
                        + "&muid=" + muid + "&os=" + os + "&source=td&conv_time=" + conv_time;
                //使用 HMAC-SHA1 签名方法对对url进行签名
                String sig = "";
                try {
                    sig = new HmacSHA1Util().HmacSHA1Encrypt(url, key);
                } catch (Exception e) {
                    logger.info("HMAC-SHA1 签名方法对对url进行签名失败");
                    e.printStackTrace();
                }
                //对其进行base64加密
                sig = new Base64Util().getBase64(sig);
                url =url+"&signature=" + sig;
                logger.info("地址展示:"+url);
                try {
                    String rel=HttpUtils.get(url);
                     
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return returnResult(ErrorCode.ERR_CODE_STATUS_TRUE, ErrorCode.ERR_CODE_SUCCESS,
                responseCommand);
    }

注:具体今日头条回调url的生成算法:

signature  生成方法:
1) 参数定义:
key:每个广告主都特有的密钥,只有广告主自己知道。key 的获取方式:广告主在头条广告后台(ad.toutiao.com)转化跟踪工具箱里创建转化之后,系统会自动生成密钥
url:每个调用接口二的 url
例: key = "945948789875"
url="http://ad.toutiao.com/track/activate/?callback=12334_334_434_2323_4334_2343_www.gdt.com&muid=KHK-SD-DFK&os=1&source=td&conv_time=1463414400"
2) 组合参数
sig = hmac.new(str(key), str(url), sha1).digest()
3) 参数加密
sig = base64.urlsafe_b64encode(sig)
url = url +‘&signature=’+ sig
4) 组装回调请求:
加密前 ULR 格式:
http://ad.toutiao.com/track/activate/?callback={callback_param}&muid={muid}&os={os}&source={source}&conv_time={conv_time}
加密之后 URL 格式:
http://ad.toutiao.com/track/activate/?callback={callback_param}&muid={muid}&os={os}&source={source}&conv_time={conv_time}&signature={signature}
例:
http://ad.toutiao.com/track/activate/?callback=12334_334_434_2323_4334_2343_www.gdt.com&muid=KHK-SDDFK&os=1&source=td&conv_time=1463414400”&signature=3ZWd3tXFXIN8rmySDgbYBIn5BAc=

今日头条移动 APP 广告激活数据API对接实践相关推荐

  1. 今日头条移动APP 广告激活数据API对接实践

    自从上班实习之后,就好久没有写博客了,这是自毕业后的第一篇博客,希望自己今后能养成写博客的一个好习惯.最近公司为了加速APP推广,采取在外部平台(如:今日头条)进行广告投放的方式,进行用户引流.因此我 ...

  2. python爬取今日头条手机app广告_今日头条App广告采集器的实现

    应客户需求,要对今日头条App内出现的广告商品进行提取,获取商品名称.价格区间.当前销量.卖家数据等信息.之前他们都是通过人工手动去提取的,效率很低,而且容易遗漏.现在需要通过程序来自动化采集以提高效 ...

  3. python爬取今日头条手机app广告_Scrapy抓手机App数据(今日头条)

    Scrapy第四篇:APP抓取 | 存入MongoDB 咳咳,大家别误会哈,标题不想搞什么大新闻,恰巧是"今日头条"爬虫而已... 以前抓的都是网页端的数据,今天,我们来抓一抓手机 ...

  4. python爬取今日头条手机app广告_python3今日头条App电商数据抓取

    最近有几个同学让我们帮忙抓取今日头条app的数据,有的同学需要头条app 的广告数据,有的同学需要电商资讯的数据,之前已经在博客中发布过头条app的广告数据,这里我就来用电商的数据来给大家讲解. 1. ...

  5. 用天行数据获取今日头条前100条的数据

    用天行数据获取今日头条的前100条数据,保存至excel from datetime import datetimeimport openpyxl import requestsworkbook = ...

  6. 今日头条扣动“搜索广告”板机,步入百度“竞价排名”后尘?

    字节跳动系产品们可算顺风顺水,流量.地位双丰收,但也难掩商业化带来的压力. 在全球化进程受阻下,字节急求一个"变"字.近日,旗下今日头条"搜索广告"的上线,又能 ...

  7. 定制开发体育指数直播APP体育指数数据API调用代码

    如果想要开发这样一个足球指数.篮球体育指数实时展示,展示波胆.让球等诸多指数数据的实时变动,并且能够进行赛中滚盘数据实时展示. 首先需要进行足球指数.篮球指数接口API调用,拉取足球让球.篮球让分等3 ...

  8. 大数据24小时:商汤再融6亿美元;彭蕾卸任蚂蚁金服;今日头条等APP下架

    [数据猿导读]商汤再获6亿美元融资,阿里巴巴领投:彭蕾卸任蚂蚁金服董事长,井贤栋接任:今日头条.网易新闻.凤凰新闻和天天快报四款APP下架 编辑 | sharon 官网 | www.datayuan. ...

  9. AndroidStudio——今日头条(可以实时获取数据的app)

    今日头条包含以下模块: 首页 视频 天气 和 我的 其中 首页用于加载实时的新闻频道及内容,可以实现点击图片查看图片详情,并且可以实现内容的收藏与取消收藏 视频模块暂时未加入任何内容 天气模块可以实现 ...

最新文章

  1. ssh登陆分布式服务器进行编程
  2. onethink封装arclist调用文章列表!
  3. js的BOM对象完全解析
  4. swiper 上滑触发_四种方式快速实现上滑触底加载效果
  5. nyoj473 A^B Problem (高速幂)
  6. 如何利用Callgraph生成函数调用图?
  7. 【面向对象】包可见性和友元可见性
  8. 3.0 面向对象 委托和事件 异常和错误
  9. 查询显卡状态 Tesla M40
  10. 2018百度云ABC智能物联大会发布世界顶级智能边缘产品BIE
  11. Android 快速集成谷歌账户登录
  12. python unicode转字符串_Python: 在Unicode和普通字符串之间转换
  13. html盒子模型包含哪些部分,CSS盒子模型由哪四部分组成?
  14. 拼多多货源代销怎么样,货源怎么找?
  15. vue点击遮罩层禁止关闭dialog弹窗
  16. [USACO 2012 January Gold] Video Game Combos
  17. 腾讯课堂学习资源链接地址
  18. 佳能打印机 android,佳能打印机手机app-PIXMA Print安卓版下载v2.6.3-西西软件下载
  19. 常用Python爬虫库汇总
  20. 2000年-2020年31省市城乡收入差距泰尔指数

热门文章

  1. 人工智能统治围棋?棋士一文不值?
  2. 「Photoshop2021入门教程」给照片添加烟雾效果
  3. ANSYS apdl命令流瞬态热分析案例3--------钢球的淬火过程
  4. nginx 多进程 + io多路复用 实现高并发
  5. MySQL:mysqldump 异常记录
  6. Learning to Track with Object Permanence GRU模块以及损失函数解析
  7. java环境搭好 软件无法运城_Javaweb开发环境搭建常用工具类型
  8. 一个随机摇号的js脚本
  9. SMART Talk
  10. wmts规范_【总结整理】WMS、WMTS、WFS