自社メディエーションは一般公開されません
Audience Networkによる自社入札は、現時点で非公開ベータ版であり、一般公開されません。この状況が変化した時点で、アップデートが提供される予定です。
それまでの間、Facebookとパートナー関係にあるメディエーションプラットフォームのうちのいずれか1つにより、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が落札した場合にはサンプルアプリにより広告が読み込まれますが、その他の場合はオークションサーバーからのエラーメッセージが表示されます。