ระหว่างเซิร์ฟเวอร์กับเซิร์ฟเวอร์: คู่มือการตั้งค่าไคลเอ็นต์สำหรับ Android

สื่อกลางโฆษณาภายในองค์กรยังไม่พร้อมให้บริการต่อสาธารณะ

ขณะนี้การประมูลภายในองค์กรด้วย Audience Network เป็นเวอร์ชั่นเบต้าแบบปิดและยังไม่พร้อมให้บริการต่อสาธารณะ เราจะแจ้งข้อมูลอัพเดตเพิ่มเติมหากมีการเปลี่ยนแปลง

ในระหว่างนี้ คุณสามารถเข้าถึงการประมูลของ Audience Network ผ่านแพลตฟอร์มสื่อกลางโฆษณาอย่างใดอย่างหนึ่งที่เราเป็นพาร์ทเนอร์ด้วยแทนได้

คู่มือนี้จะอธิบายวิธีที่คุณจะสามารถสร้างแอพไคลเอ็นต์สำหรับ Android ได้ ในคู่มือแบบทีละขั้นตอนด้านล่างนี้ เราจะใช้ตัวอย่างเป็นการส่งคำขอการประมูลราคาไปยังเซิร์ฟเวอร์การประมูลราคาของคุณบนโฆษณาคั่น ตรวจสอบให้แน่ใจว่าคุณคุ้นเคยกับการใช้โฆษณาคั่นบน Audience Network แล้ว นอกจากนี้ การประมูลยังรองรับรูปแบบเนทีฟ, แบนเนอร์, คั่น, วิดีโอในสตรีม และวิดีโอที่มีรางวัลหลังชมจบอีกด้วย เมื่อใช้รูปแบบโฆษณาอื่นๆ นอกเหนือจากรูปแบบคั่น คุณจะสามารถเปลี่ยนการตั้งค่าเซิร์ฟเวอร์ของคุณได้

ขั้นตอนการตั้งค่าฝั่งไคลเอ็นต์สำหรับ Android

ขั้นตอนที่ 1: การส่งคำขอการประมูลราคาจากไคลเอ็นต์สำหรับ Android

ขั้นตอนที่ 2: การโหลดโฆษณาจากการตอบกลับคำขอประมูลบนไคลเอ็นต์สำหรับ Android

ขั้นตอนการตั้งค่าฝั่งไคลเอ็นต์สำหรับ Android

ขั้นตอนที่ 1: การส่งคำขอการประมูลราคาจากไคลเอ็นต์สำหรับ Android

ในฝั่งไคลเอ็นต์ เราจำเป็นต้องรวบรวมพารามิเตอร์ที่จำเป็นสำหรับคำขอการประมูลราคา และส่งไปยังเซิร์ฟเวอร์การประมูลราคาโดยใช้คำขอ 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);
            }
        }
    });
}

ขั้นตอนที่ 2: การโหลดโฆษณาจากการตอบกลับคำขอประมูลบนไคลเอ็นต์สำหรับ Android

ในแอพไคลเอ็นต์ เมื่อคำขอ 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 ชนะการประมูลราคา หรือแสดงข้อความแสดงข้อผิดพลาดที่ได้รับจากเซิร์ฟเวอร์การประมูลราคา

ขั้นตอนถัดไปคืออะไร