Giữa các máy chủ: Hướng dẫn thiết lập máy khách Android

Nền tảng trung gian nội bộ không được cung cấp công khai

Giải pháp đặt giá thầu nội bộ với Audience Network hiện đang ở giai đoạn Beta kín và chưa được cung cấp công khai. Chúng tôi sẽ cung cấp thêm thông tin cập nhật khi có thay đổi.

Thay vào đó, bạn có thể truy cập phương thức Đặt giá thầu trên Audience Network thông qua một trong các nền tảng trung gian mà chúng tôi hợp tác.

Hướng dẫn này mô tả cách bạn có thể xây dựng Ứng dụng khách Android. Trong hướng dẫn từng bước bên dưới, chúng tôi sẽ sử dụng ví dụ về cách gửi Yêu cầu đấu giá đến Máy chủ đấu giá trên quảng cáo chèn giữa. Đảm bảo rằng bạn đã quen sử dụng quảng cáo chèn giữa trên Audience Network. Tính năng đặt giá thầu cũng hỗ trợ các định dạng quảng cáo Tự nhiên, Biểu ngữ, Chèn giữa, Video trong luồng và Video kèm phần thưởng. Khi định sử dụng các định dạng quảng cáo khác với quảng cáo chèn giữa, bạn có thể thay đổi Cài đặt máy chủ.

Điều kiện tiên quyết

Các bước thiết lập phía máy khách Android

Bước 1: Tạo yêu cầu đấu giá từ máy khách Android

Bước 2: Tải quảng cáo từ phản hồi giá thầu trên máy khách Android

Các bước thiết lập phía máy khách Android

Bước 1: Tạo yêu cầu đấu giá từ máy khách Android

Ở phía máy khách, chúng tôi cần thu thập các thông số bắt buộc cho yêu cầu đấu giá và gửi thông số đó đến máy chủ đấu giá bằng cách sử dụng yêu cầu HTTP. Dưới đây là ví dụ về cách triển khai trong Android để tạo yêu cầu đấu giá được chỉ định theo định dạng ở trên:

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;
}

Dưới đây là đoạn mã mẫu của một hàm tĩnh gửi yêu cầu đấu giá đến máy chủ và gọi các phương thức gọi lại với phản hồi của máy chủ:

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);
            }
        }
    });
}

Bước 2: Tải quảng cáo từ phản hồi giá thầu trên máy khách Android

Trên ứng dụng khách, khi yêu cầu HTTP trả về, các phương thức gọi lại mà chúng tôi đã chỉ định ở trên sẽ được gọi. Bằng thông số phản hồi, chúng tôi có thể biết nền tảng nào đã thắng phiên đấu giá và tải quảng cáo. Nếu phiên đấu giá thành công và Audience Network đã thắng phiên đấu giá, thông số phản hồi sẽ chứa chuỗi phần tải dữ liệu để chúng tôi có thể tải quảng cáo từ đó. Chúng tôi có thể gọi phương thức loadAd(...) trên lớp định dạng quảng cáo chính xác và thêm chuỗi phần tải dữ liệu làm giá thầu vào `LoadAdConfig để tải quảng cáo. Dưới đây là phương thức gọi lại yêu cầu đấu giá đã triển khai:

// 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());
}

Kết quả là ứng dụng mẫu sẽ tải quảng cáo nếu Audience Network thắng thầu hoặc hiển thị thông báo lỗi nhận được từ máy chủ đấu giá.