解決伺服器至伺服器的出價整合問題

內部中介服務尚未對公眾開放

Audience Network 的內部出價功能目前為不公開測試版,尚未對公眾開放。如有任何變更,我們將會公佈進一步消息。

您可以考慮改為透過與我們合作的其中一個中介服務平台使用 Audience Network 出價功能。

完成伺服器至伺服出價整合後,您應在實體裝置上以正式版廣告完成測試應用程式出價整合。若您遇到一些 http 錯誤或「無出價」問題,此部分將幫助您解決實施方面的疑難。

必要條件

本文部分

使用 cURL 為出價要求除錯

出價要求中的 HTTP 錯誤代碼和解決方案

解決無出價問題

使用 cURL 為出價要求除錯

您可以使用 cURL 指令來為出價要求除錯;此指令讓您能夠在自己的終端機傳送出價要求並接收出價回應。

第 1 步:出價要求中的插頁廣告 JSON 裝載

  • YOUR_PLACEMENT_ID 換成您的版位編號。
  • YOUR_BUSINESS_ID 換成您的企業編號。
  • YOUR_DEVICE_ID 換成您的裝置編號。
  • YOUR_BIDDER_TOKEN 換成 Audience Network SDK 所產生的出價者憑證
  • YOUR_PLATFORM_ID 換成中介服務合作夥伴平台編號,即 Facebook 應用程式編號。
  • 若您想要用不同的廣告格式進行測試,請參閱支援的廣告格式
  • 將下方的 JSON 裝載儲存為 bid_request.json
{
"id": "vwxfKskkMobzQQ1e7M70",
"imp": [
{
"id": "FB Ad Impression",
"tagid": "YOUR_PLACEMENT_ID",
"instl": 1,
"banner": {
"h": 0,
"w": 0,
"linearity": 0
}
}
],
"app": {
"publisher": {
"id": "YOUR_BUSINESS_ID"
}
},
"device": {
"ua": "Dalvik\/2.1.0 (Linux; U; Android 8.1.0; Android SDK built for x86 Build\/OSM1.180201.000)",
"ifa": "YOUR_DEVICE_ID",
"dnt": 0,
"ip": "125.123.255.123"
},
"user": {
"buyeruid": "YOUR_BIDDER_TOKEN"
},
"regs": {
"coppa": 0
},
"at": 1,
"tmax": 500,
"test": 1,
"ext": {
"platformid": "YOUR_PLATFORM_ID"
}
}

第 2 步:使用 cURL 指令傳送出價要求

  • 開啟您的 Terminal
  • 前往您儲存 bid_request.json 的目錄位置,格式為 cd ~/{FILE_PATH}
curl -X POST -H "Content-Type: application/json" -d @bid_request.json https://an.facebook.com/placementbid.ortb

第 3 步:若出價要求有效,可查收出價回應。

{
"id": "Auction ID",
"seatbid": [
{
"bid": [
{
"id": "Bid Response ID",
"impid": "FB Ad Impression",
"price": 99.99,
"adm": "{\"type\":\"ID\",\"bid_id\":\"BID ID\",\"placement_id\":\"Placement ID\",\"resolved_placement_id\":\"Resolved Placement ID\",\"sdk_version\":\"SDK Version\",\"device_id\":\"Device ID\",\"template\":102,\"payload\":null}",
"nurl": "https://www.facebook.com/audiencenetwork/nurl/?partner=partner_id&app=app_id&placement=placement_id&auction=auction_id&impression=impression_id&request=request_id&bid=bid_id&ortb_loss_code=0&clearing_price=${AUCTION_PRICE}",
"lurl": "https://www.facebook.com/audiencenetwork/nurl/?partner=partner_id&app=app_id&placement=placement_id&auction=auction_id&impression=impression_id&request=request_id&bid=bid_id&ortb_loss_code=${AUCTION_LOSS}&clearing_price=${AUCTION_PRICE}"
}
]
}
],
"bidid": "Bid ID",
"cur": "USD"
}

第 4 步:若您收不到上述出價回應,請查看 HTTP 回應標題中的 x-fb-an-errors

用於顯示 HTTP 回應標題的 cURL 指令。

url -X POST -H "Content-Type: application/json" -v @bid_request.json https://an.facebook.com/placementbid.ortb
...
> Content-Type: application/json
>
* Connection state changed (MAX_CONCURRENT_STREAMS updated)!
< HTTP/2 400
< x-fb-an-request-id: fb_an_request_id
...
< x-fb-an-errors: Value cannot be null: value given: null
...

請參閱出價要求中的 HTTP 錯誤說明和解決方案,以修復您的出價要求。

出價要求中的 HTTP 錯誤說明和解決方案

測試出價的執行情況時,您或會在傳送出價要求時收到多種可能錯誤代碼的其中一種。以下說明這些錯誤代碼和解決方案。

400 回應:無效參數錯誤

錯誤訊息 說明 解決方法

user.buyeruid 中的出價者憑證無效

user.buyeruid 中的出價者憑證無效。

如何產生有效的出價者憑證:

  • Android:BidderTokenProvider.getBidderToken(context);

  • iOS:[FBAdSettings bidderToken];

ipaddress 必須為有效的 IP 位址

在出價要求裝載的 device 物件中,您應為 ip(v4)或 ipv6 欄位提供有效的 IP 位址。

正確範例:

  • ip(v4):255.255.255.0

  • ipv6:2001:0db8:85a3:0000:0000:8a2e:0370:7334

錯誤範例:(切勿輸入不完整的 IP)

  • ip(v4):255.255.255

  • ipv6:2001:0db8:85a3:0000:0000:8a2e

需要有效的 placementid

imp.tagid 欄位中,您應提供有效的 Audience Network 版位編號。

請從企業管理平台找出您的版位編號。選擇「管理資產」並在 Android 或 iOS 平台的廣告空間下找出版位編號。

應用程式要求中未設定發佈商編號。

要求中未設定 app.publisher.id 欄位。

請從企業管理平台設定找出您的發佈商編號。在左側選單中選擇「應用程式」並找出您的應用程式編號,以此作為您的發佈商編號

所有 placementid 必須屬於相同的 appid

如此訊息所示,出價要求中的所有 Audience Network 版位編號應屬於相同的應用程式編號。

請在企業管理平台中檢查出價要求中的所有版位編號是否屬於相同的應用程式編號。選擇「管理資產」並在 Android 或 iOS 平台的廣告空間下找出版位編號。

值未包含必填且不可留空的 shape 欄位

您的出價要求欠缺必填值。

必填值:

  1. id

  2. impimp.tagidimp.id

  3. app.publisherapp.publisher.id

  4. device

  5. extext.platformid

  6. at -- 必須提供列舉(1, 2)值

必須提供 adformat,adformat 和 placementid 的數量必須相同

請提供非空白且有效的 adformat。

支援的廣告格式:

  • 原生廣告格式:{'id': ${AUCTION_ID}, "native": { "h": -1, "w": -1 }, 'tagid': ${PLACEMENT_ID}}

  • 原生橫幅廣告格式:{'id': ${AUCTION_ID}, "native": { "h": -1, "w": -1 }, 'tagid': ${PLACEMENT_ID}}

  • 插頁廣告格式:{'id': ${AUCTION_ID}, "banner": { "h": 0, "w": 0 }, 'tagid': ${PLACEMENT_ID}, 'instl': 1}

  • 獎勵式影片格式:{'id': ${AUCTION_ID}, "video": { "h": 0, "w": 0, 'ext': { 'videotype': 'rewarded' } }, 'tagid': ${PLACEMENT_ID}}

  • 橫幅廣告格式(高度 50):{'id': ${AUCTION_ID}, "banner": { "h": 50, "w": -1 }, 'tagid': ${PLACEMENT_ID}}

  • 橫幅廣告格式(高度 250):{'id': ${AUCTION_ID}, "banner": { "h": 250, "w": -1 }, 'tagid': ${PLACEMENT_ID}}

  • 插播影片廣告格式:{'id': ${AUCTION_ID}, "video": { "h": 0, "w": 0, 'linearity': 1 }, 'tagid': ${PLACEMENT_ID}}

如欲了解更多詳細資訊,請參閱支援的廣告格式

橫幅廣告、原生廣告和影片廣告的物件互斥,但其中一個為必要項目

上述廣告格式有不同的物件:nativebannervideo。我們的端點需要使用這 3 個物件其中之一,但請注意這些物件性質互斥。

請參閱上文支援的廣告格式解決方案。

400 回應:未授權錯誤

錯誤訊息 說明 解決方法

無應用程式與網域和企業編號相符

若您在 app.publisher.id 欄位中使用了企業編號,這代表我們的後端無法按網域和企業找出應用程式。

如果您一直遇到此錯誤,請在 app.publisher.id 欄位中使用應用程式編號。

應用程式未獲授權使用應用程式出價功能

app.publisher.id 中的應用程式編號不在出價的許可名單中,或者應用程式還有待審查。

請聯絡我們,以申請將您的應用程式加入許可名單,或等待應用程式獲批。

平台未獲授權使用應用程式出價功能

ext.platformid 中的平台編號不在出價的許可名單中。請確保您的應用程式編號在許可名單中,而且並非有待審查。

解決方案:

  1. 如果您是發佈商,您的應用程式編號與平台編號相同。

  2. 如果您是合作夥伴,您的發佈商將在 ext.platformid(合作夥伴應用程式編號)和 app.publisher.id(發佈商應用程式編號)中填入不同的值。

請聯絡我們,以申請將您的應用程式加入許可名單,或等待應用程式獲批。

意外錯誤

原因:

  1. 應用程式/用戶被限速。

  2. 應用程式被拒絕。

  3. 安裝程式不獲信任。

  4. 要求屬欺詐性質。

解決方案:

  1. 請減少廣告重新載入頻率。

  2. 請聯絡我們,以檢查您的應用程式狀態。

  3. 請確保您是從信任的應用程式商店安裝應用程式。

  4. 如果您一直遇到此錯誤,請聯絡我們。

204 回應:空白錯誤訊息

錯誤訊息 說明 解決方法

出價回應 x-fb-an-errors 的錯誤標題為空白

原因:

  1. dnt: 1(不追蹤)的情況下,Facebook 不會出價。

  2. 插頁廣告格式欠缺 imp.instl

  3. Facebook 選擇不參與此次競投。

解決方案:

  1. 用戶必須在裝置中啟用廣告追蹤,然後用戶端應在出價要求中傳遞 dnt: 0(不追蹤),隨後 Facebook 便會出價。

  2. 請確保您的 imp.instl 欄位為 1,以就插頁廣告出價。

若持續收到 204 回應,請聯絡我們。

解決無出價問題

  • 確保您有擷取並記錄 x-fb-an-errors HTTP 標題,以幫助您了解錯誤原因。
  • 確保有在運行應用程式的裝置上安裝 Facebook 應用程式,並且以自己的真實用戶帳戶登入 Facebook。使用虛假或測試用 Facebook 用戶帳戶均有違 Facebook 的政策,並會導致帳戶被停用。
  • 確保透過在 Android 上呼叫 com.facebook.ads.BidderTokenProvider.getBidderToken() 和在 iOS 上呼叫 [FBAdSettings bidderToken],以從 Audience Network SDK 獲得出價者憑證,並將傳回的字串傳送到出價要求的 buyeruid 欄位。
  • 確保您有向出價要求的 ifa 欄位傳送正確的裝置編號(Android:AdvertisingIdClient.getAdvertisingIdInfo(context).getId();iOS:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString])。
  • 確保您的裝置未啟用不追蹤設定,然後在出價要求中傳遞 dnt: 0(不追蹤)。