Skip to content

Instantly share code, notes, and snippets.

@AKB428
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AKB428/fab792843ed8f6ff69c0 to your computer and use it in GitHub Desktop.
Save AKB428/fab792843ed8f6ff69c0 to your computer and use it in GitHub Desktop.
[Mastering DMP] 04

#4章 オプトアウトに対応する

オプトアウトとは

クッキーや広告識別子を使った行動ターゲティング広告の配信を停止することです。

DNTとは異なり各広告業者(例えばGoogle、Yahoo)のオプトアウトページにアクセスし、オプトアウトリクエストをトラッキングサーバーに送信することで実行されます。

クッキーのトラッキングをオプトアウトで停止するにはサーバー側では専用のオプトアウトクッキーを設定し、そのオプトアウトクッキーを持っているオーディエンスに対してはトラッキング処理、またはトラッキングで集めた情報を元にした広告配信は停止しないといけません。

DNTとは違い、オプトアウトはDMP側で必ず対応する必要があります。

オプトアウトページ設定とオプトアウトリクエスト対応

DMPサーバー側でオプトアウトに対応するには以下が必要です

  • オプトアウトページ(もしくはURLのみ)
  • オプトアウトリクエストのルーティング設定とAP処理

オプトアウトに対応するコントローラーの処理

application/conf/MicroDmpCore.javaを編集する

オプトアウト用のクッキーの定義をする

    private static final String COOKIE_OPT_OUT_KEY = "MICRO_DMP_OPT_OUT";

    // オプトアウトが有効である場合の値(今回はフラグとして扱うので1に設定、APでは0に設定することはない
    private static final String COOKIE_OPT_OUT_VALUE = "1";

オプトアウト用のリクエストを受け付けるメソッドを定義

    /**
     * オプトアウトのリクエストを処理します。
     * Cookieにオプトアウトの設定をします。
     *
     * @return
     */
    public Result optOut(){
        // FIXME 本来はオプトアウトのクッキーの有効期限は無限が好ましい
        response().setCookie(COOKIE_OPT_OUT_KEY, "1", COOKIE_MAX_AFTER_AGE);
        Logger.debug("set optout cookie!");
        return ok();
    }

オプトアウトクッキーを持っているかの判定を行う

    /**
     * リクエストのCookie値を取得しOPTOUTしているオーディエンスかを判定します
     * @return
     */
    public static boolean isOptOut() {
        if(request().cookie(COOKIE_OPT_OUT_KEY) != null) {
            Http.Cookie cookie = request().cookie(COOKIE_OPT_OUT_KEY);
            Logger.debug("OptOut Cookie Value=" + cookie.value());

            if (cookie.value().equals(COOKIE_OPT_OUT_VALUE)) {
                Logger.debug("is OptOut Cookie.");
                return true;
            }
        }

        return false;
    }

pixcelTrackingメソッドにオプトアウト判定メソッド呼び出しを追加

    // pixcel tracking
    // ref https://support.google.com/dfp_premium/answer/1347585?hl=ja
    public Result pixcelTracking() {

        // ブラウザのDNTとDMPのDNT設定が有効の場合トラッキング処理はしない
        if (isDNT()) {
            return ok();
        }

        // ブラウザにオプトアウトのCookieがある場合トラッキング処理はしない
        if(isOptOut()) {
            return ok();
        }

        processingCookieId();

        response().setContentType("image/gif");
        return ok(onePixcelGifBytes);
    }

Playのルーティング設定

conf/routes

GET        /optout              controllers.MicroDmpCore.optOut()

Nginxのルーティング設定

vi /usr/local/etc/nginx/nginx.dev_mdmp.conf

   location /optout {
            proxy_pass http://play-mdmp;
   }

sudo nginx -c /usr/local/etc/nginx/nginx.dev_mdmp.conf -s reload

動作確認

ブラウザで以下のURLにアクセス(本来はオプトアウト専用のページを作り、そこに以下のリンクが貼ってある。)

http://mdmp.com:8080/optout

MICRO_DMP_OPT_OUTのキーが設定されていたらOK

![Imgur](http://i.imgur.com/Mn87O9q.png)

オプトアウトした後に、hotel.comにアクセスした時のデバッグログ

[debug] - application - rawRequestDntFlag=null
[debug] - application - OptOut Cookie Value=1
[debug] - application - is OptOut Cookie.

参考

DDAIというサイトでは日本の主要なターゲティング広告業者を一括でオプトアウトできるようになっています。

オプトアウトは各サービスごとにオプトアウトする必要があり、本来一括でオプトアウトできるはずのDNTが広まっていない現状ではDDAIは一括オプトアウトしたいオーディエンスにとっては有効なソリューションになっています。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment