สื่อกลางโฆษณาภายในองค์กรยังไม่พร้อมให้บริการต่อสาธารณะ
ขณะนี้การประมูลภายในองค์กรด้วย Audience Network เป็นเวอร์ชั่นเบต้าแบบปิดและยังไม่พร้อมให้บริการต่อสาธารณะ เราจะแจ้งข้อมูลอัพเดตเพิ่มเติมหากมีการเปลี่ยนแปลง
ในระหว่างนี้ คุณสามารถเข้าถึงการประมูลของ Audience Network ผ่านแพลตฟอร์มสื่อกลางโฆษณาอย่างใดอย่างหนึ่งที่เราเป็นพาร์ทเนอร์ด้วยแทนได้
คู่มือนี้จะอธิบายวิธีที่คุณจะสามารถสร้างแอพไคลเอ็นต์สำหรับ Android ได้ ในคู่มือแบบทีละขั้นตอนด้านล่างนี้ เราจะใช้ตัวอย่างเป็นการส่งคำขอการประมูลราคาไปยังเซิร์ฟเวอร์การประมูลราคาของคุณบนโฆษณาคั่น ตรวจสอบให้แน่ใจว่าคุณคุ้นเคยกับการใช้โฆษณาคั่นบน Audience Network แล้ว นอกจากนี้ การประมูลยังรองรับรูปแบบเนทีฟ, แบนเนอร์, คั่น, วิดีโอในสตรีม และวิดีโอที่มีรางวัลหลังชมจบอีกด้วย เมื่อใช้รูปแบบโฆษณาอื่นๆ นอกเหนือจากรูปแบบคั่น คุณจะสามารถเปลี่ยนการตั้งค่าเซิร์ฟเวอร์ของคุณได้
ในฝั่งไคลเอ็นต์ เราจำเป็นต้องรวบรวมพารามิเตอร์ที่จำเป็นสำหรับคำขอการประมูลราคา และส่งไปยังเซิร์ฟเวอร์การประมูลราคาโดยใช้คำขอ HTTP ต่อไปนี้เป็นตัวอย่างการใช้ใน Android เพื่อสร้างคำขอการประมูลราคาตามรูปแบบที่ระบุไว้ข้างต้น
private static JSONObject getRequest( Context context, String appId, String placementId, String idfa, int coppa, int dnt ) throws JSONException { JSONObject requestObject = new JSONObject(); requestObject.put("app_id", appId); requestObject.put("placement_id", placementId); requestObject.put("bundle", BuildConfig.APPLICATION_ID); requestObject.put("bundle_version", BuildConfig.VERSION_NAME); requestObject.put("ifa", idfa); // coppa and do not track flags requestObject.put("coppa", coppa); requestObject.put("dnt", dnt); requestObject.put( "buyer_tokens", (new JSONObject()) .put("audience_network", getAudienceNetworkBidderToken(context)) ); requestObject.put("test", Settings.isTestMode() ? 1 : 0); return requestObject; }
ต่อไปนี้เป็นตัวอย่างส่วนย่อยของโค้ดของฟังก์ชั่นคงที่ที่ส่งคำขอการประมูลราคาไปยังเซิร์ฟเวอร์ และเรียกใช้เมธอดการเรียกกลับพร้อมการตอบกลับของเซิร์ฟเวอร์
public static void makeRequest( final Context context, final int coppa, final String appId, final String placementId, final AuctionRequestCallback callback ) { getThreadPoolExecutor().submit(new Runnable() { @Override public void run() { try { // Retrieve idfa and limit ad tracking settings NonProductionIDFAUtils.AdIdInfo adInfo = NonProductionIDFAUtils.getAdIdInfo(context); final JSONObject request = getRequest( context, appId, placementId, adInfo.idfa, coppa, adInfo.dnt); if (Settings.getServerAddress() == null) { throw new android.provider.Settings.SettingNotFoundException( "Server address settings not found"); } final URL url = new URL(Settings.getServerAddress()); JsonObjectRequest jsObjRequest = new JsonObjectRequest( Request.Method.POST, Settings.getServerAddress(), request, new Response.Listener<JSONObject>() { @Override public void onResponse(JSONObject response) { try { Log.d("response", response.toString()); String placementId = response.getString("placement_id"); String adFormat = response.getString("ad_format"); String platformName = response.getString("platform_name"); String platformPlacementId = response.getString( "platform_placement_id"); String payload = response.getString("bid_payload"); callback.onSuccess( placementId, adFormat, platformName, platformPlacementId, payload); } catch (JSONException e) { callback.onError(e); } } }, new Response.ErrorListener() { @Override public void onErrorResponse(VolleyError error) { if (error.networkResponse == null) { callback.onError(new Exception("Server response empty!")); } else { if(error.networkResponse.data != null) { callback.onError(new VolleyError( error.networkResponse.statusCode + " " + new String(error.networkResponse.data))); } else { callback.onError(new VolleyError("" + error.networkResponse.statusCode)); } } } } ); getRequestQueue(context).add(jsObjRequest); } catch (Exception e) { // Other errors Log.e("error", e.toString()); callback.onError(e); } } }); }
ในแอพไคลเอ็นต์ เมื่อคำขอ HTTP มีการส่งคืนมา ระบบจะเรียกใช้เมธอดการเรียกกลับที่เราระบุไว้ข้างต้น เราใช้พารามิเตอร์การตอบกลับเพื่อให้สามารถบ่งบอกได้ว่าแพลตฟอร์มใดชนะการประมูลราคา จากนั้นจึงโหลดโฆษณา หากการประมูลราคาสำเร็จ และ Audience Network ชนะการประมูลราคา พารามิเตอร์การตอบกลับจะมีสตริงเพย์โหลดที่เราสามารถใช้โหลดโฆษณาได้ เราสามารถเรียกใช้เมธอด loadAd(...)
ในระดับของรูปแบบโฆษณาที่ถูกต้อง และใส่สตริงเพย์โหลดเป็นราคาประมูลใน LoadAdConfig เพื่อโหลดโฆษณา ต่อไปนี้คือเมธอดการเรียกกลับคำขอการประมูลราคาที่ใช้งาน
// AuctionRequestCallback public void onSuccess( String placementId, String adFormat, String platformName, String platformPlacementId, String payload) { if (platformName.contentEquals(PLATFORM_AUDIENCE_NETWORK)) { if (adFormat.contentEquals(INTERSTITIAL)) { statusLabel.setText(R.string.loading_ad); interstitialAd = new InterstitialAd(MainActivity.this, platformPlacementId); interstitialAd.loadAd( interstitialAd.buildLoadAdConfig() .withAdListener(MainActivity.this) .withBid(payload) .build()); } } } public void onError(Exception e) { Log.e(TAG, e.getMessage()); statusLabel.setText(e.getMessage()); }
ด้วยเหตุนี้ แอพตัวอย่างจะโหลดโฆษณาหาก Audience Network ชนะการประมูลราคา หรือแสดงข้อความแสดงข้อผิดพลาดที่ได้รับจากเซิร์ฟเวอร์การประมูลราคา