สร้างคำตอบ

หลังจากที่แอปพลิเคชันประมวลผลคำขอราคาเสนอจาก Google แล้ว แอปพลิเคชันจะต้องสร้างและส่งการตอบกลับ คู่มือนี้จะอธิบายวิธีเขียนโค้ดแอปพลิเคชันเพื่อสร้างการตอบกลับ

สร้างข้อความ BidResponse

หากต้องการส่งราคาเสนอ แอปพลิเคชันการเสนอราคาของคุณต้องตอบกลับคำขอราคาเสนอด้วย BidResponse ที่มี Bid ในรูปแบบที่คุณกำหนดค่าไว้ หากใช้รูปแบบ JSON การตอบกลับต้องตั้งค่าส่วนหัว Content-Type เป็น application/json; charset=utf-8 และรวม BidResponse JSON ไว้ในเนื้อหา หากใช้รูปแบบ Protobuf แอปพลิเคชันของคุณต้องตั้งค่าส่วนหัว Content-Type เป็น application/octet-stream และรวม BidResponse ที่เรียงลำดับแล้วไว้ในเนื้อหา

หากต้องการสร้างและจัดรูปแบบ BidResponse สำหรับรูปแบบ Protobuf คุณต้องสร้างและใช้ไลบรารี Protobuf โดยอิงตาม openrtb.proto และ openrtb-adx.proto ซึ่งใช้ช่อง BidResponse ของ OpenRTB มาตรฐานและส่วนขยาย Google ใน Protobuf ตามลำดับ ซึ่งดูได้ในโปรโตและข้อมูลอ้างอิง

หากไม่ต้องการเสนอราคาสำหรับการแสดงผล คุณต้องส่งการตอบกลับ HTTP 204 ที่ว่างเปล่ากลับมา แอปพลิเคชันของคุณต้องส่งการตอบกลับไปยังทุก BidRequest การหมดเวลาและการตอบกลับที่แยกวิเคราะห์ไม่ได้จะถือว่าเป็นข้อผิดพลาด และ Google จะควบคุมผู้เสนอราคาที่มีอัตราข้อผิดพลาดสูง

รหัสครีเอทีฟโฆษณา

BidResponse ของคุณจะระบุครีเอทีฟโฆษณาผ่านช่อง BidResponse.seatbid.bid.crid (จำกัด 128 ไบต์) แม้แต่ครีเอทีฟโฆษณาที่คล้ายกันก็ต้องมีค่าที่ไม่ซ้ำกันสำหรับช่องนี้ หากมีลักษณะที่แตกต่างกันอย่างเห็นได้ชัด ซึ่งรวมถึงแต่ไม่จำกัดเพียงขนาด, URL ที่ประกาศ, แอตทริบิวต์ครีเอทีฟโฆษณา และประเภทผู้ให้บริการ กล่าวคือ คุณต้องกำหนดรหัสครีเอทีฟโฆษณาที่แตกต่างกันให้กับโฆษณา 2 รายการที่มีลักษณะดังนี้

  • มีลักษณะหรือพฤติกรรมที่แตกต่างออกไป
  • แสดงผลเป็นรูปภาพต่างๆ
  • แสดงผลด้วยวิธีที่แตกต่างกัน (เช่น โฆษณาหนึ่งประกอบด้วยรูปภาพ ส่วนอีกโฆษณาหนึ่งเป็นวิดีโอ)

ขณะออกแบบแอปพลิเคชัน คุณควรตัดสินใจเลือกวิธีสร้างตัวระบุอย่างเป็นระบบซึ่งเหมาะสมกับประเภทครีเอทีฟโฆษณาที่คุณวางแผนจะส่ง

แอตทริบิวต์โฆษณา

Google ขอแนะนำให้ประกาศแอตทริบิวต์ครีเอทีฟโฆษณาเพื่ออธิบายลักษณะของโฆษณาและการกำหนดเป้าหมายโดยใช้ทั้ง BidResponse.seatbid.bid.apis และ BidResponse.seatbid.bid.attr ร่วมกัน หรือใช้ส่วนขยาย BidResponse.seatbid.bid.ext.attribute ข้อมูลต่อไปนี้อธิบายวิธีประกาศแอตทริบิวต์

  • VPAID
    ตั้งค่า BidResponse.seatbid.bid.apis เป็น VPAID_1 หรือ VPAID_2 สำหรับรูปแบบ JSON คุณสามารถตั้งค่าเป็น 1 หรือ 2 ตามลำดับ
  • MRAID
    ตั้งค่า BidResponse.seatbid.bid.apis เป็น MRAID_1 หรือ 3 สำหรับรูปแบบ JSON
  • SIZELESS
    ตั้งค่า BidResponse.seatbid.bid.attr เป็น RESPONSIVE หรือ 18 สำหรับรูปแบบ JSON
  • PLAYABLE
    ซึ่งระบุได้โดยการตั้งค่า BidResponse.seatbid.bid.attr เป็น USER_INTERACTIVE หรือ 13 สำหรับรูปแบบ JSON

ดูคำอธิบายเกี่ยวกับวิธีรับความคิดเห็นเกี่ยวกับพร็อพเพอร์ตี้ที่ตรวจพบของครีเอทีฟโฆษณาได้ที่แหล่งข้อมูลครีเอทีฟโฆษณา

ช่องการเสนอราคาแบบเปิด

การเสนอราคาตอบที่ส่งโดยผู้เสนอราคาของ Exchange และเครือข่ายที่เข้าร่วมการเสนอราคาแบบเปิดจะคล้ายกับการเสนอราคาตอบของ Authorized Buyers ที่เข้าร่วมการเสนอราคาแบบเรียลไทม์มาตรฐาน ลูกค้าการเสนอราคาแบบเปิดสามารถระบุช่องเพิ่มเติมได้จำนวนเล็กน้อย และช่องที่มีอยู่บางช่องอาจมีการใช้งานทางเลือก ซึ่งรวมถึงแอปต่อไปนี้ด้วย

ช่อง รายละเอียด
BidResponse.imp.pmp.deals.id

รหัสดีลจากเนมสเปซของ Exchange ที่เชื่อมโยงกับการเสนอราคานี้และรายงานต่อผู้เผยแพร่โฆษณา

BidResponse.seatbid.bid.ext.exchange_deal_type

ประเภทของดีลที่รายงานต่อผู้เผยแพร่โฆษณา ซึ่งส่งผลต่อวิธีจัดการดีลในการประมูล

BidResponse.seatbid.bid.ext.third_party_buyer_token โทเค็นที่ใช้ระบุข้อมูลผู้ซื้อบุคคลที่สามปลายทางหาก Exchange ในฐานะผู้เสนอราคาแบบเปิดเป็นสื่อกลาง ซึ่งได้รับจากผู้ซื้อบุคคลที่สามและต้องส่งไปยัง Google โดยไม่มีการเปลี่ยนแปลงในการเสนอราคาตอบ

คำแนะนำ

  • เปิดใช้การเชื่อมต่อ HTTPS แบบถาวร (หรือที่เรียกว่า "Keep-Alive" หรือ "การใช้การเชื่อมต่อซ้ำ") ในเซิร์ฟเวอร์ ตั้งค่าระยะหมดเวลาเป็นอย่างน้อย 10 วินาที โดยค่าที่สูงกว่าจะเป็นประโยชน์ในหลายกรณี Google จะตรวจสอบเรื่องนี้ในระหว่างการทดสอบเวลาในการตอบสนองเบื้องต้นของแอปพลิเคชัน เนื่องจาก Authorized Buyers จะส่งคำขอในอัตราที่สูงและต้องหลีกเลี่ยงโอเวอร์เฮดของเวลาในการตอบสนองในการสร้างการเชื่อมต่อ TCP แยกต่างหากสำหรับแต่ละคำขอ
  • ใส่ URL ติดตามการแสดงผลที่ไม่บังคับเพื่อติดตามเมื่อการแสดงผลแสดงขึ้นแทนที่จะติดตามเมื่อผู้เสนอราคาชนะ เนื่องจากมีการลดลงระหว่างการชนะและการแสดงผล วิธีนี้จึงให้สถิติการติดตามที่แม่นยำยิ่งขึ้น

  • ตรวจสอบว่าโค้ดของผู้เสนอราคาไม่มีการพึ่งพาช่องที่เลิกใช้งานแล้ว ซึ่งอาจทำให้การเสนอราคาไม่สำเร็จและเกิดข้อผิดพลาด
  • รวม BidResponse.seatbid.bid.w และ BidResponse.seatbid.bid.h ไว้ใน BidResponse BidResponse สำหรับคำขอที่มีขนาดโฆษณาหลายขนาดต้องมีช่องเหล่านี้ ไม่เช่นนั้นระบบจะตัดออกจากการประมูล
  • จำกัดขนาดคำตอบให้ต่ำกว่า 8K การตอบกลับที่มีขนาดใหญ่มากอาจเพิ่มเวลาในการตอบสนองของเครือข่ายและทำให้เกิดการหมดเวลา
  • ทำตามหลักเกณฑ์สำหรับราคาเสนอในพื้นที่โฆษณา iOS ที่ต้องใช้การระบุแหล่งที่มาของ SKAdNetwork

ตัวอย่างการเสนอราคาตอบ

ตัวอย่างต่อไปนี้แสดงตัวอย่างคำขอ Protobuf และ JSON ที่มนุษย์อ่านได้

OpenRTB Protobuf

OpenRTB JSON

สำคัญ: ข้อความ Protobuf ที่แสดงในตัวอย่างจะแสดงเป็นข้อความที่มนุษย์อ่านได้ แต่ข้อความไม่ได้ถูกส่งผ่านสายในลักษณะนั้น เมื่อใช้รูปแบบ Protobuf ของ OpenRTB ระบบจะยอมรับเฉพาะข้อความ BidResponse ที่เรียงลำดับแล้วเท่านั้น

คุณสร้างและจัดเรียงข้อความ BidResponse ได้โดยใช้โค้ด C++ ต่อไปนี้

BidResponse bid_response;
// fill in bid response with bid information
string post_response;
if (bid_response.SerializeToString(&post_response)) {
  // respond to the POST with post_response as the content
} else {
  // return an error to the POST
}

ระบุครีเอทีฟโฆษณา

การเสนอราคาตอบจะระบุครีเอทีฟโฆษณาที่จะแสดงหากราคาเสนอของคุณชนะ ราคาเสนอของคุณต้องมีรูปแบบโฆษณาที่รองรับ (AMP, วิดีโอ, เนทีฟ) รูปแบบใดรูปแบบหนึ่ง ในตัวอย่างนี้ เราจะระบุครีเอทีฟโฆษณาโดยใช้ช่อง html_snippet

หรือจะระบุครีเอทีฟโฆษณาโดยใช้ช่องใดช่องหนึ่งต่อไปนี้ตามรูปแบบโฆษณาก็ได้

  • โฆษณาที่แสดงผลโดย SDK
    • BidResponse.seatbid.bid.ext.sdk_rendered_ad
  • AMP
    • BidResponse.seatbid.bid.amp_ad_url
  • วิดีโอ
    • BidResponse.seatbid.bid.adm
  • เนทีฟ
    • BidResponse.seatbid.bid.adm_native

ระบุโฆษณาที่โฮสต์บนเซิร์ฟเวอร์ของคุณเองโดยใช้ข้อมูลโค้ด HTML ในช่อง BidResponse.seatbid.bid.adm ข้อมูลโค้ดจะอยู่ใน iFrame ที่แทรกในหน้าเว็บ ซึ่งส่งผลให้มีการดึงข้อมูลและแสดงผลโฆษณาเมื่อโหลดหน้าเว็บ คุณต้องสร้างข้อมูลโค้ด HTML เพื่อให้โฆษณา (แบนเนอร์หรือโฆษณาคั่นระหว่างหน้า) แสดงผลอย่างถูกต้องภายใน iFrame และมีขนาดที่เหมาะสมสำหรับช่องโฆษณาที่คุณเสนอราคา

นอกจากนี้ ขนาดโฆษณาที่ประกาศในการเสนอราคาตอบต้องตรงกับชุดค่าผสมขนาดชุดใดชุดหนึ่งในคำขอราคาเสนอในกรณีต่อไปนี้

  • โฆษณาเป็นแบนเนอร์ปกติ (ไม่ใช่วิดีโอ โฆษณาเนทีฟ หรือโฆษณาคั่นระหว่างหน้า)
  • ผู้เสนอราคาได้ประกาศขนาดในการเสนอราคาตอบแล้ว ต้องมีการประกาศขนาดเมื่อใดก็ตามที่มีขนาดมากกว่า 1 ขนาดในคำขอ
  • ทั้งนี้มีข้อยกเว้นสำหรับโฆษณาคั่นระหว่างหน้า สำหรับโฆษณาคั่นระหว่างหน้า ความกว้างต้องมีขนาดอย่างน้อย 50% ของความกว้างหน้าจอ และความสูงต้องมีขนาดอย่างน้อย 40% ของความสูงหน้าจอ

คุณสามารถระบุครีเอทีฟโฆษณา HTML ที่เป็นข้อมูลโค้ดโดยใช้โค้ด HTML ที่ถูกต้องซึ่งแสดงผลอย่างเหมาะสม แต่โปรดคำนึงถึงข้อจำกัดในการระบุช่อง crid ในส่วนสร้างข้อความ BidResponse การใช้งานอย่างหนึ่งคือการใส่ข้อมูลเพิ่มเติมลงในอาร์กิวเมนต์ของ URL ที่ดึงมาจากเซิร์ฟเวอร์ของคุณโดยเป็นส่วนหนึ่งของการแสดงโฆษณา ซึ่งจะช่วยให้คุณส่งข้อมูลที่กำหนดเองเกี่ยวกับการแสดงผลกลับไปยังเซิร์ฟเวอร์ของคุณเองได้

นโยบายส่วนใหญ่สำหรับข้อมูลโค้ด HTML ที่แสดงในการเสนอราคาตอบจะเหมือนกับนโยบายสำหรับโฆษณาของบุคคลที่สาม ดูข้อมูลเพิ่มเติมได้ที่หลักเกณฑ์ของโปรแกรม Authorized Buyers, ข้อกำหนดสำหรับการแสดงโฆษณาของบุคคลที่สาม และประกาศ URL การคลิกผ่านในโฆษณา

ใช้ URL การคลิกผ่านที่สอดคล้องกัน

URL การคลิกผ่านที่คุณระบุในช่อง BidResponse.seatbid.bid.ext.clickurl ต้องเหมือนกับ URL ของหน้า Landing Page ที่ระบุไว้ในครีเอทีฟโฆษณา ตัวอย่างครีเอทีฟโฆษณาในรูปแบบที่รองรับซึ่งสอดคล้องกับช่อง clickurl ที่ตั้งค่าเป็น https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1 มีดังนี้

HTML

<div id="my-app-install-ad"
     style="font-family: sans-serif; border: 1px solid #ddd; padding: 10px;
            display: flex; align-items: center; width: 100%; height: 100%;
            box-sizing: border-box; cursor: pointer;"
     onclick="window.open('https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1', '_blank')">
  <img src="https://example.com/path/to/app_icon.png" alt="App Icon"
       style="width: 60px; height: 60px; margin-right: 10px;
              border-radius: 8px;">
  <div style="flex-grow: 1;">
    <h4 style="margin: 0 0 5px 0; font-size: 16px; color: #1a73e8;">
      My Awesome App
    </h4>
    <p style="margin: 0 0 10px 0; font-size: 14px; color: #5f6368;">
      The best app for doing awesome things! Download now and get started!
    </p>
    <span style="background-color: #1a73e8; color: white; padding: 8px 12px;
                 text-align: center; text-decoration: none;
                 display: inline-block; border-radius: 4px; font-size: 14px;
                 font-weight: bold;">Install</span>
  </div>
</div>

VAST XML

<VAST version="3.0">
  <Ad id="creative_id_789">
    <InLine>
      <AdSystem>MyBidderSystem</AdSystem>
      <AdTitle>My Awesome App Install Video</AdTitle>
      <Description>Install My Awesome App now!</Description>
      <Error>
        <![CDATA[https://tracking.example.com/vast_error?errorcode=[ERRORCODE]]]>
      </Error>
      <Impression>
        <![CDATA[https://tracking.example.com/vast_impression]]>
      </Impression>
      <Creatives>
        <!-- Main Video Creative -->
        <Creative>
          <Linear>
            <Duration>00:00:15</Duration>
            <TrackingEvents>
              <Tracking event="start">
                <![CDATA[https://tracking.example.com/vast_event?label=start]]>
              </Tracking>
              <Tracking event="firstQuartile">
                <![CDATA[https://tracking.example.com/vast_event?label=firstQuartile]]>
              </Tracking>
              <Tracking event="midpoint">
                <![CDATA[https://tracking.example.com/vast_event?label=midpoint]]>
              </Tracking>
              <Tracking event="thirdQuartile">
                <![CDATA[https://tracking.example.com/vast_event?label=thirdQuartile]]>
              </Tracking>
              <Tracking event="complete">
                <![CDATA[https://tracking.example.com/vast_event?label=complete]]>
              </Tracking>
            </TrackingEvents>
            <VideoClicks>
              <ClickThrough id="gplay-video">
                <![CDATA[https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1]]>
              </ClickThrough>
              <ClickTracking id="bidder-tracker-video">
                <![CDATA[https://tracking.example.com/vast_click]]>
              </ClickTracking>
            </VideoClicks>
            <MediaFiles>
              <MediaFile delivery="progressive" type="video/mp4" width="640"
                         height="360" bitrate="800" scalable="true"
                         maintainAspectRatio="true">
                <![CDATA[https://cdn.example.com/myawesomeapp_video.mp4]]>
              </MediaFile>
            </MediaFiles>
          </Linear>
        </Creative>
        <!-- Companion Ad Creative -->
        <Creative>
          <CompanionAds>
            <Companion id="companion1" width="300" height="250"
                       assetWidth="300" assetHeight="250">
              <StaticResource creativeType="image/png">
                <![CDATA[https://cdn.example.com/companion_banner_300x250.png]]>
              </StaticResource>
              <TrackingEvents>
                <Tracking event="creativeView">
                  <![CDATA[https://tracking.example.com/vast_companion_view]]>
                </Tracking>
              </TrackingEvents>
              <CompanionClickThrough>
                <![CDATA[https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1]]>
              </CompanionClickThrough>
              <CompanionClickTracking>
                <![CDATA[https://tracking.example.com/vast_companion_click]]>
              </CompanionClickTracking>
            </Companion>
          </CompanionAds>
        </Creative>
      </Creatives>
    </InLine>
  </Ad>
</VAST>

เนทีฟ

{
  "ver": "1.2",
  "assets": [
    {
      "id": 1,
      "title": {
        "text": "My Awesome App"
      }
    },
    {
      "id": 2,
      "img": {
        "url": "https://example.com/path/to/app_icon.png",
        "w": 60,
        "h": 60
      }
    },
    {
      "id": 3,
      "data": {
        "value":
          "The best app for doing awesome things! Download now and get started!"
      }
    },
    {
      "id": 4,
      "data": {
        "value": "Install"
      }
    }
  ],
  "link": {
    "url": "https://play.google.com/store/apps/details?id=com.example.myawesomeapp&referrer=utm_source%3Dgoogle_ab%26utm_medium%3Dcpc%26utm_campaign%3Dinstall_campaign_1",
    "clicktrackers": [
      "https://tracking.example.com/native_click"
    ]
  },
  "imptrackers": [
    "https://tracking.example.com/native_impression"
  ]
}

ระบุมาโคร

มาโครคือข้อความที่จัดรูปแบบซึ่งฝังอยู่ในช่องการเสนอราคาตอบบางช่องที่มี URL ซึ่งจะถูกแทนที่ด้วยค่าที่เกี่ยวข้อง ณ เวลาที่แสดงโฆษณา ตัวอย่างเช่น หากราคาเสนอที่ชนะของคุณมีมาโคร AUCTION_PRICE ในครีเอทีฟโฆษณาที่เป็นข้อมูลโค้ด HTML ที่รวมอยู่ในการเสนอราคา ระบบจะแทนที่มาโครด้วยค่าที่คุณสามารถถอดรหัสเพื่อระบุจำนวนเงินที่คุณจ่ายสำหรับการแสดงผลในการประมูล

คุณสามารถใส่มาโครในช่องต่อไปนี้

  • BidResponse.seatbid.bid.adm

    ระบบรองรับมาโครสำหรับรูปแบบข้อมูลโค้ด HTML, เนทีฟ, URL ของวิดีโอ และ VAST XML ของวิดีโอ

  • BidResponse.seatbid.bid.adm_native.eventtrackers.url

  • BidResponse.seatbid.bid.adm_native.imptrackers

  • BidResponse.seatbid.bid.ext.amp_ad_url

    ครีเอทีฟโฆษณา AMP รองรับเฉพาะมาโคร WINNING_PRICE และ WINNING_PRICE_ESC ของ Google เท่านั้น

  • BidResponse.seatbid.bid.burl

  • BidResponse.seatbid.bid.ext.impression_tracking_url

    ใช้ตัวเลือกนี้แทน BidResponse.seatbid.bid.burl หากคุณต้องการ URL การเรียกเก็บเงินมากกว่า 1 รายการ

ตัวอย่างเช่น คุณสามารถรวมมาโครเป็นส่วนหนึ่งของข้อมูลโค้ด HTML โดยฝัง ${MACRO} ไว้ใน URL ที่ใช้ดึงข้อมูลครีเอทีฟโฆษณา โดยที่ MACRO เป็นหนึ่งในมาโครที่รองรับซึ่งอธิบายไว้ในข้อกำหนดเฉพาะของ OpenRTB

มาโครของ Google

Google รองรับมาโครเพิ่มเติมจากที่พบในข้อกำหนด OpenRTB โดยมาโครเหล่านี้มีรูปแบบที่แตกต่างกัน และจะปรากฏเป็น %%MACRO%% หากฝังอยู่ใน URL ตารางต่อไปนี้จะอธิบายมาโครเหล่านี้

มาโคร คำอธิบาย
ADVERTISING_IDENTIFIER อนุญาตให้ผู้ซื้อได้รับ IDFA ของ iOS หรือรหัสโฆษณาของ Android ในการแสดงผล ดูรายละเอียดได้ที่การถอดรหัสตัวระบุโฆษณา
CACHEBUSTER การนําเสนอสตริงของจำนวนเต็ม 4 ไบต์แบบสุ่มที่ไม่มีเครื่องหมาย
CLICK_URL_UNESC

URL การคลิกที่ไม่ใช้ Escape สำหรับโฆษณา ในข้อมูลโค้ด เวอร์ชันที่ใช้ Escape ของ URL การคลิกของบุคคลที่สามควรอยู่ต่อจากมาโครโดยตรง

ตัวอย่างเช่น หาก URL การคลิกของบุคคลที่สามคือ http://my.adserver.com/some/path/handleclick?click=clk คุณจะใช้โค้ดต่อไปนี้กับ URL การคลิกของบุคคลที่สามเวอร์ชันที่มีการกำหนดเป็นอักขระหลีกแบบเดี่ยวได้หลังจากเรียกใช้มาโคร

<a href="%%CLICK_URL_UNESC%%http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

เมื่อถึงเวลาแสดงโฆษณา ระบบจะขยายมาโครนี้เป็น

<a href="http://google-click-url?...&ad_url=http%3A%2F%2Fmy.adserver.com%2Fsome%2Fpath%2Fhandleclick%3Fclick%3Dclk"></a>

URL จะลงทะเบียนการคลิกกับ Google ก่อน จากนั้นจึงเปลี่ยนเส้นทางไปยัง URL การคลิกของบุคคลที่สาม

CLICK_URL_ESC

URL การคลิกที่หลีกเลี่ยงสำหรับโฆษณา ใช้ค่านี้แทน CLICK_URL_UNESC หากคุณต้องส่งค่าผ่านทางเซิร์ฟเวอร์อื่น ซึ่งจะมีการเปลี่ยนเส้นทางต่อจากนั้น

ตัวอย่างเช่น คุณสามารถใช้โค้ดต่อไปนี้ในข้อมูลโค้ด HTML

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC%%"></a>

เมื่อถึงเวลาแสดงโฆษณา ระบบจะขยายมาโครนี้เป็น

<a href="http://my.adserver.com/click?google_click_url=http://google-click- url%3F...%26ad_url%3D"></a>

ซึ่งจะลงทะเบียนการคลิกกับ my.adserver.com ซึ่งจะรับผิดชอบในการเปลี่ยนเส้นทางไปยัง URL ที่ส่งในพารามิเตอร์ google_click_url ซึ่งถือว่า my.adserver.com จะยกเลิกการกำหนดอักขระหลีกให้กับพารามิเตอร์ google_click_url

คุณสามารถเพิ่ม URL ที่มีการหลีกอักขระซ้ำซ้อนต่อท้าย %%CLICK_URL_ESC%% ได้ หลังจากที่ my.adserver.com ยกเลิกการกำหนดเป็นอักขระหลีกแล้ว ระบบจะเพิ่ม URL เวอร์ชันที่มีการกำหนดเป็นอักขระหลีกแบบเดี่ยวต่อท้าย google_click_url เมื่อดึงข้อมูล google_click_url ระบบจะยกเลิกการหลีกอักขระอีกครั้งแล้วเปลี่ยนเส้นทาง

CLICK_URL_ESC_ESC

URL ที่กำหนดเป็นอักขระหลีก 2 ครั้งสำหรับโฆษณา ใช้ค่านี้แทน CLICK_URL_UNESC หากคุณต้องส่งค่าผ่านทางเซิร์ฟเวอร์อื่น ซึ่งจะมีการเปลี่ยนเส้นทางต่อจากนั้น

ตัวอย่างเช่น คุณสามารถใช้โค้ดต่อไปนี้ในข้อมูลโค้ด HTML

<a href="http://my.adserver.com/click?google_click_url=%%CLICK_URL_ESC_ESC%%"></a>

เมื่อถึงเวลาแสดงโฆษณา ระบบจะขยายมาโครนี้เป็น

<a href="http://my.otheradserver.com/click?google_click_url=http%3A%2F%2Fmy.adserver.com%2Fclick%3Fgoogle_click_url%3Dhttp%3A%2F%2Fgoogle-click-%20url%253F...%2526ad_url%253D"></a>
SCHEME ขยายเป็น http: หากคำขอราคาเสนอไม่จำเป็นต้องใช้ SSL หรือเป็น https: หากคำขอราคาเสนอจำเป็นต้องใช้ SSL
SITE โดเมน URL ที่ใช้อักขระหลีกของ URL เนื้อหาหรือรหัสที่ไม่ระบุตัวตนสำหรับพื้นที่โฆษณาที่ไม่ระบุตัวตน
SITE_URL เลิกใช้งานแล้ว แทนที่ด้วยมาโคร SITE ซึ่งมีฟังก์ชันการทำงานเหมือนกัน
TZ_OFFSET ออฟเซ็ตเขตเวลา
VERIFICATION

ค่าที่แตกต่างกันสำหรับการผลิตและเมื่อสแกนครีเอทีฟโฆษณาในไปป์ไลน์การตรวจสอบ รูปแบบคือ %%?VERIFICATION:true-val:false-val%% โดยสามารถใช้ค่าใดก็ได้ยกเว้นมาโครสำหรับ true-val และ false-val รวมถึงสตริงว่าง สำหรับการเสนอราคาแบบเปิด เราขอแนะนำให้ Exchange ใช้มาโครนี้ เมื่อใช้แล้ว แพลตฟอร์มฝั่งซื้อก็ไม่จำเป็นต้องทำการเปลี่ยนแปลงใดๆ

ตัวอย่างเช่น หากครีเอทีฟโฆษณามี %%?VERIFICATION:-1:5000%% การแทนที่ข้อความจะเป็น 5000 ในการแสดงโฆษณา และ -1 ในไปป์ไลน์การยืนยัน ซึ่งจะช่วยแยกความแตกต่างระหว่างคําสั่ง ping 2 ชุดนี้

WINNING_PRICE

ราคาการแสดงผลที่เข้ารหัส (ซึ่งจะเป็น CPI ไม่ใช่ CPM) ที่เป็นจำนวนเล็กน้อยมากในสกุลเงินของบัญชี เช่น CPM ที่ชนะซึ่งมีค่าเป็น $5 USD จะเท่ากับ 5,000,000 ไมโคร CPM หรือ 5,000 ไมโคร CPI ค่าที่ถอดรหัสแล้วของ WINNING_PRICE ในกรณีนี้จะเป็น 5,000 ราคาที่ชนะจะระบุด้วย CPI

หากต้องการแยกวิเคราะห์มาโครนี้ คุณจะต้องใช้แอปพลิเคชันที่ถอดรหัสการยืนยันราคา ดูข้อมูลเพิ่มเติมได้ที่หน้าการถอดรหัสการยืนยันราคา

WINNING_PRICE_ESC WINNING_PRICE ของ URL ที่ใช้อักขระหลีก

Google กำหนดให้คุณใช้มาโคร CLICK_URL_UNESC หรือ CLICK_URL_ESC ภายในครีเอทีฟโฆษณาของโฆษณาที่แสดงโดยบุคคลที่สาม Google ใช้มาโคร CLICK_URL สำหรับการติดตามการคลิก

การหลีกเลี่ยง URL ในมาโครใช้รูปแบบต่อไปนี้

  • ระบบจะแทนที่อักขระที่เป็นช่องว่างด้วยเครื่องหมายบวก (+)
  • อักขระที่เป็นตัวอักษรและตัวเลขคละกัน (0-9, a-z, A-Z) และอักขระจากชุด !()*,-./:_~ จะยังคงเหมือนเดิม
  • อักขระอื่นๆ ทั้งหมดจะถูกแทนที่ด้วย %XX โดยที่ XX คือเลขฐาน 16 ที่แสดงถึงอักขระนั้น

ข้อจำกัดและข้อกำหนดของผู้เผยแพร่โฆษณา

คำขอราคาเสนอจะมีข้อมูลเกี่ยวกับประเภทของข้อจำกัดและข้อกำหนดที่ผู้เผยแพร่โฆษณากำหนดไว้สำหรับครีเอทีฟโฆษณาในการประมูล

  • BidRequest.bcat
    • คุณสามารถเปรียบเทียบหมวดหมู่ที่ถูกบล็อกซึ่งระบุโดยช่องนี้กับหมวดหมู่ที่ตรวจพบสำหรับครีเอทีฟโฆษณาที่ส่งโดยใช้ช่อง detectedCategories ของ Real-time Bidding API
  • BidRequest.imp.ext.allowed_vendor_type
  • BidRequest.imp.secure
    • ในทางปฏิบัติ ระบบจะตั้งค่านี้เป็น true เสมอ เนื่องจาก Google กำหนดให้ครีเอทีฟโฆษณาทั้งหมดต้องรองรับ SSL
  • BidRequest.imp.{audio/banner/native/video}
  • BidRequest.imp.{audio/banner/native/video}.api
  • BidRequest.imp.{audio/banner/native/video}.battr
  • BidRequest.imp.{audio/banner/video}.mimes

อย่าเสนอราคาด้วยโฆษณาที่มีฟีเจอร์ที่ถูกจำกัด สำหรับฟีเจอร์ที่อนุญาต เช่น ประเภทผู้ให้บริการ ให้แสดงโฆษณาเฉพาะในกรณีที่ประเภทผู้ให้บริการอยู่ในรายการ allowed_vendor_type ใน BidRequest ราคาเสนอของคุณควรมีเฉพาะรูปแบบโฆษณาที่ระบุไว้ในคำขอราคาเสนอโดยการป้อนข้อมูลในช่องต่างๆ เช่น BidRequest.imp.banner ดูรายละเอียดเพิ่มเติมได้จากความคิดเห็นสำหรับช่องเหล่านี้ในคำจำกัดความของบัฟเฟอร์โปรโตคอล BidRequest

หากมีการแสดงโฆษณาใน BidResponse คุณต้องตั้งค่าฟิลด์ BidResponse.seatbid.bid.attr, BidResponse.seatbid.bid.cat และ BidResponse.seatbid.bid.adomain หรือ BidResponse.seatbid.bid.adm_native.link.url ใน BidResponse ให้ถูกต้อง หากโฆษณามีค่าที่เกี่ยวข้องหลายค่าสำหรับช่องเหล่านี้ คุณต้องระบุทุกค่า ดูรายละเอียดเพิ่มเติมได้จากความคิดเห็นสำหรับฟิลด์เหล่านี้ในคำจำกัดความของบัฟเฟอร์โปรโตคอล BidResponse ระบบจะทิ้งการตอบกลับที่ไม่ได้ตั้งค่าช่องเหล่านี้

Open Measurement

Open Measurement ช่วยให้คุณระบุผู้ให้บริการบุคคลที่สามที่ให้บริการวัดผลและตรวจสอบอิสระสำหรับโฆษณาที่แสดงในสภาพแวดล้อมของแอปบนอุปกรณ์เคลื่อนที่ได้

รูปแบบโฆษณาที่รองรับ ได้แก่ โฆษณาวิดีโอ แบนเนอร์ และโฆษณาคั่นระหว่างหน้า ดูข้อมูลเพิ่มเติมเกี่ยวกับวิธีใช้ Open Measurement ในการตอบกลับราคาเสนอที่มีรูปแบบเหล่านี้ได้ที่บทความในศูนย์ช่วยเหลือเรื่อง Open Measurement SDK

ตัวอย่างการเสนอราคาตอบ

ส่วนต่อไปนี้แสดงตัวอย่างการเสนอราคาตอบสำหรับประเภทโฆษณาต่างๆ

แบนเนอร์ของแอป

OpenRTB Protobuf

OpenRTB JSON

โฆษณาคั่นระหว่างหน้าในแอป

OpenRTB Protobuf

OpenRTB JSON

วิดีโอคั่นระหว่างหน้าในแอป

OpenRTB Protobuf

OpenRTB JSON

แอปที่มาพร้อมเครื่อง

OpenRTB Protobuf

OpenRTB JSON

วิดีโอบนเว็บ

OpenRTB Protobuf

OpenRTB JSON

แบนเนอร์เว็บบนอุปกรณ์เคลื่อนที่สำหรับผู้เสนอราคา Exchange

OpenRTB Protobuf

OpenRTB JSON