百度信息流廣告對接最終總結

最近對接了百度信息流廣告,將對接流程記錄以下:html

業務需求:經過用戶點擊廣告, 獲取用戶信息,統計有用戶信息服務器

實現原理:
*.用戶點擊百度app中的廣告
*.百度app記錄手機用戶點擊事件,信息,並將用戶信息傳給百度服務器
*.百度服務器回調廣告主事先在百度監控平臺設置好的url(廣告主本身開發)
*.廣告主url獲取用戶點擊事件,根據請求參數,來匹配用戶的轉換數據(應用激活)
*.廣告主將匹配陳宮的轉換數據拼接後
*.使用callback_rul,將數據回傳到百度app

*.百度後臺會顯示數據上傳成功的界面
*.結束async

 

業務流程以下:ide

 

 

具體接口文檔很清楚,就很少說:函數

接口    文檔地址: 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測試

 

須要注意地方:ui

1.百度推廣後臺回調監測 URL,即feedback url(由廣告主自行開發)編碼

2.廣告主將匹配成功的轉化數據與廣告點擊數據進行拼接,使用callback_url將數據回傳給百度

3.廣告主須要將url,在百度監控後臺設置好(就是廣告主的應用發佈地址)

4.用戶掃描對應的二維碼

5.返回到推薦頁面,輕輕刷一下推薦,而後 往下拉,找到百度測試廣告的連接

6.點擊廣告測試廣告的連接 (7.點擊後,百度會回調個廣告主的的應用,而後,點擊後,百度會回調個廣告主的的應用)

7.而後百度後臺,會提示:數據上傳中,

8.數據上傳成功(=若是一直是數據上傳中,沒有上傳成功,那麼就要檢查應用的配置,代碼的設置)

注意:若是你調用feedback函數,的請求參url錯了,如:sign,沒有進行md5加密,或者沒有sign參數,百度也會顯示回調成功(error_code=0)

這個時候,數據一直是上傳中。須要調整代碼

百度監測中心:

設置url地方:工具中心->轉換追蹤->新建

 

 

 

 

 

 

數據上傳成功後的截圖:

 

 

t調試的時候,elk的記錄

 

 

 

 

 

 

百度推廣回調廣告主代碼邏輯:

 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 uid = qs["uid"];

var raw = request.QueryString.ToString();
return new AdChannelNotice
{
AdId = uid,
Idfa = idfa,
AndroidIdMd5 = "",
ImeiMd5 = imeiMd5,
Os = os,
Raw = raw,
Time = TimestampHelper.FromTimestamp(timestamp)

};

}

private ushort ParseOs(string os)
{
switch (os)
{
case "1": return MobileOs.Ios;
case "2": return MobileOs.Android;
default: return 1;
}
}

 

 

廣告主拼接數據後,將數據md5後給到百度廣告主

代碼邏輯:

public async Task Feedback(ushort channelId, ushort typeId, string raw)
{
var parameter = QueryHelpers.ParseQuery(raw);
if (parameter == null)
{
_logger.Info($"Tuhu.Marketing.RealTime->BaiduAd->Feedback 獲取Feedback參數失敗,raw:{raw},channelId:{channelId},typeId:{typeId}");
return;
}
var callbackUrl = parameter["callback_url"];

var url = BuildCallBackUrl(callbackUrl);

await SendBaiduMessage(channelId, url);
}

private async Task SendBaiduMessage(ushort channelId, string url)
{
_logger.Info($"Tuhu.Marketing.RealTime->BaiduAd->Feedback 百度,請求參數,channelId:{channelId},url:{url}");
var responseMessage = await HttpClient.GetAsync(url);

var details = await responseMessage.Content.ReadAsStringAsync();

if (!responseMessage.IsSuccessStatusCode) throw new Exception($"Tuhu.Marketing.RealTime->BaiduAd->Feedback->error occured when feedback to channel {channelId} , details:{details}");

if (responseMessage.StatusCode == HttpStatusCode.OK)
{
_logger.Info($"Tuhu.Marketing.RealTime->BaiduAd->Feedback 百度,返回成功,Message:{details}");

var jObj = JsonConvert.DeserializeObject<JObject>(details);
var code = jObj.Value<int>("error_code");

if (code != 0) _logger.Error($"Tuhu.Marketing.RealTime->BaiduAd->Feedback 百度,服務器錯誤,Code:{code},Message:{details}");
}
}

private static string BuildCallBackUrl(Microsoft.Extensions.Primitives.StringValues callbackUrl)
{
var url = HttpUtility.UrlDecode(callbackUrl, Encoding.UTF8);
url = url.Replace("{{ATYPE}}", "activate");
url = url.Replace("{{AVALUE}}", "0");
var sign = ToMd5($"{url}{Okey}");
url = $"{url}&sign={sign}";
return url;
}

/// <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.UrlDecode(str, e); } }

相關文章
相關標籤/搜索