Server-ke-Server: Panduan Pengaturan Klien Android

Mediasi internal tidak tersedia untuk umum

Tawaran internal dengan Audience Network saat ini dalam Beta Tertutup dan tidak tersedia untuk umum. Kami akan memberikan pembaruan lebih lanjut jika ini berubah.

Sebagai alternatif, Anda dapat mengakses Tawaran Audience Network melalui salah satu platform mediasi yang menjadi mitra kami.

Panduan ini menjelaskan cara Anda dapat membuat Aplikasi Klien Android. Dalam panduan langkah demi langkah di bawah ini, kami akan menggunakan contoh pengiriman Permintaan Lelang ke Server Lelang pada iklan interstisial Anda. Pastikan Anda sudah mengetahui cara menggunakan iklan interstisial Audience Network. Penawaran juga mendukung format Native, Spanduk, Interstisial, Video In-Stream, dan Video Berhadiah. Jika Anda menggunakan format iklan selain format interstisial, Anda dapat mengubah Pengaturan Server.

Prasyarat

Langkah Pengaturan Sisi Klien Android

Langkah 1: Membuat permintaan lelang dari klien Android

Langkah 2: Memuat iklan dari tanggapan tawaran di klien Android

Langkah Pengaturan Sisi Klien Android

Langkah 1: Membuat permintaan lelang dari klien Android

Di sisi klien, kita perlu mengumpulkan parameter yang diperlukan untuk permintaan lelang, dan mengirimkan ke server lelang menggunakan permintaan HTTP. Berikut ini contoh implementation di Android untuk membuat permintaan lelang yang ditentukan oleh format di atas:

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

Berikut ini adalah contoh snippet kode dari fungsi statis yang mengirimkan permintaan lelang ke server, dan meminta metode panggilan balik dengan respon server:

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

Langkah 2: Memuat iklan dari tanggapan tawaran pada klien Android

Pada aplikasi klien, ketika permintaan HTTP kembali, metode panggilan balik yang kami tentukan di atas akan dipanggil. Menggunakan parameter tanggapan, kita dapat mengetahui platform mana yang memenangkan lelang, dan memuat iklan. Jika lelang berhasil dan Audience Network memenangkan lelang, parameter tanggapan akan berisi string payload dan dari sini kami dapat memuat iklan. Kita dapat memanggil metode loadAd(...) pada kelas format iklan yang benar dan menyertakan string payload sebagai tawaran dalam `LoadAdConfig untuk memuat iklan. Berikut adalah metode panggilan balik permintaan lelang yang diterapkan:

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

Akibatnya, contoh aplikasi akan memuat iklan jika Audience Network memenangkan tawaran, atau menampilkan pesan kesalahan yang diterima dari server lelang.