サーバー間: Androidクライアントのセットアップガイド

自社メディエーションは一般公開されません

Audience Networkによる自社入札は、現時点で非公開ベータ版であり、一般公開されません。この状況が変化した時点で、アップデートが提供される予定です。

それまでの間、Facebookとパートナー関係にあるメディエーションプラットフォームのうちのいずれか1つにより、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が落札した場合にはサンプルアプリにより広告が読み込まれますが、その他の場合はオークションサーバーからのエラーメッセージが表示されます。