最近對接了百度信息流廣告,將對接流程記錄如下: 業務需求:通過用戶點擊廣告, 獲取用戶信息,統計有用戶信息 實現原理:*.用戶點擊百度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);
}
}