欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

百度信息流广告对接总结

程序员文章站 2022-09-01 23:19:29
最近对接了百度信息流广告,将对接流程记录如下: 业务需求:通过用户点击广告, 获取用户信息,统计有用户信息 实现原理:*.用户点击百度app中的广告*.百度app记录手机用户点击事件,信息,并将用户信息传给百度服务器*.百度服务器回调广告主事先在百度监控平台设置好的url(广告主自己开发)*.广告主 ......

最近对接了百度信息流广告,将对接流程记录如下:

业务需求:通过用户点击广告, 获取用户信息,统计有用户信息

实现原理:
*.用户点击百度app中的广告
*.百度app记录手机用户点击事件,信息,并将用户信息传给百度服务器
*.百度服务器回调广告主事先在百度监控平台设置好的url(广告主自己开发)
*.广告主url获取用户点击事件,根据请求参数,来匹配用户的转换数据(应用激活)
*.广告主将匹配陈宫的转换数据拼接后
*.使用callback_rul,将数据回传到百度
*.结束

 

业务流程如下:

百度信息流广告对接总结

 

 

具体接口文档很清楚,就不多说:

接口    文档地址: http://ocpc.baidu.com/developer/ocpc-doc/app/app-interface/readme1.html

回调地址文档:http://ocpc.baidu.com/developer/ocpc-doc/app/app-interface/readme1.html#callbackurl

 

需要注意地方:

1.百度推广后台回调监测 url,即feedback url(由广告主自行开发)

2.广告主将匹配成功的转化数据与广告点击数据进行拼接,使用callback_url将数据回传给百度

3.广告主需要将url,在百度监控后台设置好

4.代码 中的okey需要与百度监控后台对应

百度监测中心:

设置url地方:工具中心->转换追踪->新建

百度信息流广告对接总结

 

 百度信息流广告对接总结

 

 

 百度信息流广告对接总结

 

 

百度推广回调广告主代码逻辑:

 private static string okey = "";

public adchannelnotice notify(ushort behaviortype, httprequest request)
{
var qs = request.query;
var os = parseos(qs["os"]);
var idfa = qs["idfa"];
var imeimd5 = qs["imei_md5"];
var timestamp = qs["ts"];
var id = qs["ip"];

var raw = request.querystring.tostring();
return new adchannelnotice(behaviortype, os, raw, timestamphelper.fromtimestamp(timestamp))
{
idfa = idfa,
androidid = "",
imeimd5 = imeimd5,
};
}

private ushort parseos(string os)
{
switch (os)
{
case "1": return mobileos.ios;
case "2": return mobileos.android;
default: return 1;
}
}

 

 

广告主拼接数据后,将数据md5后给到百度广告主

代码逻辑:

public void feedback(string raw)
{
var parameter = queryhelpers.parsequery(raw);
if (parameter == null) return;
var callbackurl = parameter["callback_url"];
var url = httputility.urldecode(callbackurl, encoding.utf8);
url = url.replace("{{atype}}", "activate");
url = url.replace("{{avalue}}", "0");
var sign = tomd5( $"&sign={url}{okey}");

url = $"{url}{sign}";
httpclient.getasync(url).wait();
}


/// <summary>
/// 字符串加密md5
/// </summary>
/// <param name="str"></param>
/// <returns></returns>
private static string tomd5( string str)
{
stringbuilder sb = new stringbuilder(32);
md5 md5 = new md5cryptoserviceprovider();
byte[] t = md5.computehash(encoding.utf8.getbytes(str));
for (int i = 0; i < t.length; i++)
{
sb.append(t[i].tostring("x2"));
}
return sb.tostring();
}

private static class httputility
{
/// <summary>
/// 对 url 字符串进行编码
/// </summary>
/// <param name="str">字符串</param>
/// <returns>编码结果</returns>
public static string urlencode(string str, encoding e)
{
return system.web.httputility.urlencode(str, e);
}

/// <summary>
/// 将已经为在 url 中传输而编码的字符串转换为解码的字符串
/// </summary>
/// <param name="str">字符串</param>
/// <returns>解码结果</returns>
public static string urldecode(string str, encoding e)
{
return system.web.httputility.urlencode(str, e);
}
}