Security, Privacy, AI and CSR information for all Piano products now lives in one place. Explore our Compliance Center.
Audience
English French
English French

Google Ad Manager パフォーマンスデータ インポート

Google Ad Manager パフォーマンスデータ インポート(DFPパフォーマンスインポートとも呼ばれる)との統合により、すべてのGoogle Ad Manager(GAM)のお客様は、ビュー、クリックなどの統計データをDMP分析エンジンにインポートできるようになりました。これにより、例えば、GAMとDMPの両方のデータを使ってユーザーセグメントを作成することができます。こちらは Google Ad ManagerとGoogle Ad Manager 360の両方で機能します。有償機能である Ad Manager Data Transfer レポート(GAMログファイル)が必要です。費用に関する情報は貴社担当のGoogleアカウントマネージャーにお問い合わせください。また、GAMイベントをDMPエンティティに接続するには、DMP用にAd Tag の修正が必要となります。


現在のバージョンの制限事項 アーキテクチャ概要 セットアップ手順 DFPのデータ転送レポート機能の有効化 Pianoサービスアカウントにデータアクセスを許可する DFP6 Ad Networkで最低限の権限で役割を作成 Google Developer Console で JSON API を有効化する DFP6 Ad Network で必須となるカスタムターゲットキーを作成 広告タグの修正: カスタムターゲティング Case 1: Piano セグメント連携が設定されていない(Google Ad Manager Integration) Case 2: 既にPianoとセグメント連携をしている (Google Ad Manager Integration)

現在のバージョンの制限事項

  • インプレッションとクリックデータ(バックフィルのログも含む)のみインポートされます

  • 1つのネットワークで1つのプリフィックス(サイトグループ)を設定できます。

  • DMPはオブジェクト名(line items, orders, ad unitsなど)をインポートしません。代わりにオブジェクトIDをインポートします。

  • データインポートのスケジュールは固定されています。ユーザが設定したスケジュールは今後のバージョンでサポートされる可能性があります。

アーキテクチャ概要

Снимок экрана 2019-10-21 в 15.19.24

セットアップ手順

DFPのデータ転送レポート機能の有効化 Pianoサービスアカウントにデータアクセスを許可する DFP6 Ad Networkで最低限の権限で役割を作成 Google Developer Console で JSON API を有効化する DFP6 Ad Network で必須となるカスタムターゲットキーを作成 Case 1: Piano セグメント連携が設定されていない(Google Ad Manager Integration) Case 2: 既にPianoとセグメント連携をしている (Google Ad Manager Integration)

DFPのデータ転送レポート機能の有効化

ドキュメントより、"データ転送機能の利用を開始するには、アカウント マネージャーから設定フォームを入手してください。
入手したフォームで、レポートに表示するデータ項目を任意に指定していただけます。
アカウントでデータ転送機能全体をご利用いただけるようになったときに、DoubleClick よりお知らせします。
その時点で、Google Cloud Storage からのファイルの取得を開始できます。"

必要とされるアクションは価格とエクスポートするログフィールドの交渉を開始するために、DoubleClickのサポートにメールしてください。

エクスポートされたログにカスタムターゲティングのフィールドを含めるようにしてください。
DFP6とDMPのエンティティを一致させることが不可欠であり、
この連携が依存しているもう一つのフィールドは "TimeUsec2(推奨)" または "TimeUsec" です。
想定される利用ケースに応じて、追加のフィールドもエクスポートする必要があるかもしれません。

GAM パフォーマンス連携に必要なパラメーターの全リスト:

  1. Time

  2. UserId

  3. AdvertiserId

  4. OrderId

  5. LineItemId

  6. CreativeId

  7. AdUnitId

  8. CustomTargeting

  9. TimeUsec2

  10. Product

 

Pianoサービスアカウントにデータアクセスを許可する

ここでは PianoからサービスアカウントID(メールアドレスのようなID)を取得する必要があります。

まずこのドキュメントによると、Googleグループを作成し、そのグループにサービスアカウント (Pianoサービスアカウント)を招待する必要があります。
その後、GAMのサポートにGAMログをエクスポートしたGoogle Cloud Storageのバケットへのアクセスを管理するリクエストをそのGoogleグループ経由でメール送信する必要があります。リクエストには GAM Ad Network IDとGoogleグループ名を含める必要があります。

次に貴社のAd Networkにサービスアカウントを追加する必要があります。また、そのサービスアカウントになり変わる新規ユーザーを作成する必要もあります。
サービスアカウントとユーザの両方に '管理者' ロールと '全てのエンティティ' チームを割り当てて下さい。これができない場合、新規にロール かつ/または チームを作成する必要があります。

アプリケーションを使ってプログラム的にAd ManagerのデータにアクセスできるGoogleアカウントのユーザーです。サービスアカウントではアカウント情報の認証にアカウント キーが必要です。

Google Ad Manager UI では Admin → Global settings → Network settings を開き、“Add a service account user” をクリックします。

https://docs.piano.io/wp-content/uploads/2020/11/1-Ad-Manager-Ad-a-service-account-user.png

フォームのフィールドには以下を入力します

  • Name: Piano DMP performance data

  • Email: <service account id> (通常は 'gserviceaccounts.com' で終わります)

  • Confirm email: 上と同じ <service account id>

  • Role: '管理者' を選択します。できない場合、以下のように新しい role を作成する必要があります。

青い "保存 " ボタンをクリックします。 Admin > Access & authorization > Users から サービスアカウントを確認します。

https://docs.piano.io/wp-content/uploads/2020/11/2-Ad-manager-List-of-users_blurred.png

これでサービスアカウントユーザに招待メールが送られ、Piano チームに承認される必要があります。
つまり、サービスアカウントユーザのメール受信箱には少なくとも2つのメールが送られてきます。
1つはGoogleグループ、もう1つは広告ネットワークのものです。

"チーム" または "役割" が必要な場合、次のセクションに進みます。

DFP6 Ad Networkで最低限の権限で役割を作成

"役割" はユーザに実行を許可するアクションを定義します。
これらのアクションのターゲット、すなわちアクションが影響するオブジェクトのセットが Team によって定義されます。

GAM UI では 管理者 => 役割 を開き、赤い "新しい役割を作成" ボタンをクリックします。

https://docs.piano.io/wp-content/uploads/2020/11/3-Ad-manager-New-role.png

詳しくは User Role をご確認ください。

DMP web-UI で広告主、オーダー、広告申込情報、クリエイティブを表示するために必要となる最小限の権限は以下の通りです。

  • クリエイティブの表示(View creatives)

  • すべてのオーダーと広告申込情報の表示(View my orders and line items)

  • 会社と連絡先の表示(View companies and contacts)

アクセスされる詳細はIDとそれらのエンティティ名のみです。

https://docs.piano.io/wp-content/uploads/2020/11/Ad-manager-New-role-permissions-1.png

"保存" ボタンをクリックします。新しく作成された役割をPiano DMPのサービスアカウントに割り当てることができました。

Google Developer Console で JSON API を有効化する

JSON API は Cloud Storage とプログラムによる疎通が必要となります。データインポートサービスはこれらAPIを中心に構築された Cloud Storage クライアントライブラリを使用します。

API manager web-UI  では ダッシュボード => 一般的な API とサービス の横にある "全て表示" リンクをクリックします。

https://docs.piano.io/wp-content/uploads/2020/11/Google-Cloud-Platform-1-1.png

検索窓から "Cloud Storage JSON API" を検索し、クリックします。

https://docs.piano.io/wp-content/uploads/2020/11/Google-Cloud-Platform-3.png

"有効にする" ボタンをクリックします。

https://docs.piano.io/wp-content/uploads/2020/11/Google-Cloud-Platform-2.png


https://docs.piano.io/wp-content/uploads/2020/11/Google-Cloud-Platform-4.png

この時点で、アクセスが正しく設定されているかを確認するためにPiano チームに連絡することができます。

DFP6 Ad Network で必須となるカスタムターゲットキーを作成

Piano ID をGAM log に保存するには、カスタムターゲティングが必要です。これらのIDはDMPエンティティ(sites、users など)に対応するイベントへリンクするため、Piano DMPに使用されます。

現在、4つのカスタムターゲティングキーが必要です: CxSegments、cxid、cxsiteid、cxprnd

GAM UI で Inventory > Key-values を選択します。

https://docs.piano.io/wp-content/uploads/2020/11/5-Ad-manager-key-values.png

赤い "新しいキー" ボタンをクリックし、新しいキー名と表示名を入力し、青い "保存" ボタンをクリックします(青い "New values" ボタンはクリックしないでください)。

https://docs.piano.io/wp-content/uploads/2020/11/%D0%A1%D0%BD%D0%B8%D0%BC%D0%BE%D0%BA-%D1%8D%D0%BA%D1%80%D0%B0%D0%BD%D0%B0-2021-04-09-%D0%B2-13.38.54.png

作成されたキーは "Predefined"ではなく、"Free-form" の必要があります。

広告タグの修正: カスタムターゲティング

Case 1: Piano セグメント連携が設定されていない(Google Ad Manager Integration)

DMPイベントに対してGAMのインプレッション/クリックを照合するためには、 DMP siteId、prnd、CxenseユーザIDが必要です。
これらはGAMのカスタムターゲティングを介して渡されます(".setTargeting(...)"  が修正されたタグで呼び出されることにご注意ください)。

Source version

(... Google広告スクリプトでロードするコードは省略しています ...) <head> <script type='text/javascript'> googletag.cmd.push(function() { googletag.defineSlot('/42072717/TestUnit', [400, 150], 'div-gpt-ad-1421314147467-0').addService(googletag.pubads()); googletag.enableServices(); }); </script> </head> <body> <!-- the code that places the ad --> <div id='div-gpt-ad-1421314147467-0'> <script type='text/javascript'> googletag.cmd.push(function() { googletag.display('div-gpt-ad-1421314147467-0'); }); </script> </div> </body>

Modified version

(... Google広告スクリプトでロードするコードは省略しています ...) TODO: Piano Insight スクリプトがこのタグを実行しているページにない場合、ユーザのクロスサイトをリンクするためにダミーの分析イベントを送信する必要があります。 <head> <script type='text/javascript'> var cX = cX || {}; cX.callQueue = cX.callQueue || []; cX.callQueue.push(['invoke', function() { googletag.cmd.push(function() { googletag.defineSlot('/42072717/TestUnit', [400, 150], 'div-gpt-ad-1421314147467-0') .addService(googletag.pubads()) .setTargeting("cxprnd", cX.getPageContext().pageViewRandom) .setTargeting("cxid", cX.getUserId()) .setTargeting("cxsiteid", "12345"); //replace '12345' with actual CX site id googletag.enableServices(); }); }]); // Async load of cx.js (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js'; t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); </script> </head> <body> <!-- the code that places the ad --> <div id='div-gpt-ad-1421314147467-0'> <script type='text/javascript'> cX.callQueue.push(['invoke', function() { googletag.cmd.push(function() { googletag.display('div-gpt-ad-1421314147467-0'); }); }]); </script> </div> </body>

Synchronous ad tag

<!DOCTYPE html> <html> <head> <title>Google DFP sync tag</title> <!-- Load the Google script synchronously --> <script type="text/javascript"> (function() { var useSSL = 'https:' == document.location.protocol; var src = (useSSL ? 'https:' : 'http:') + '//www.googletagservices.com/tag/js/gpt.js'; document.write('<scr' + 'ipt src="' + src + '"></scr' + 'ipt>'); })(); </script> <!-- Load the Cxense script synchronously --> <script type="text/javascript"> document.write('<scr' + 'ipt type="text/javascript" src="http' + (location.protocol === 'https:' ? 's://s' : '://') + 'cdn.cxense.com/cx.js"></scr' + 'ipt>'); </script> <!-- Setup the ad slots and targeting --> <script type="text/javascript"> googletag.defineSlot('/42072217/TestUnit', [400, 150], 'div-gpt-ad-14213141474671-0') .addService(googletag.pubads()) .setTargeting("cxprnd", cX.getPageContext().pageViewRandom) .setTargeting("cxid", cX.getUserId()) .setTargeting("cxsiteid", "12345"); //replace '12345' with actual CX site id googletag.pubads().enableSingleRequest(); googletag.pubads().enableSyncRendering(); googletag.enableServices(); </script> </head> <body> <!-- The actual rendering of the ad --> <div id="div-gpt-ad-14213141474671-0" style="width: 400px; height: 150px"> <script type="text/javascript"> googletag.display("div-gpt-ad-14213141474671-0"); </script> </div> </body> </html>

Case 2: 既にPianoとセグメント連携をしている (Google Ad Manager Integration)

Source code with Cxense segments

(... Google広告スクリプトをロードするコードを外しています ...) TODO: Piano Insight スクリプトがこのタグを実行しているページにない場合、ユーザのクロスサイトをリンクするためにダミーの分析イベントを送信する必要があります。 <head> <script type='text/javascript'> var cX = cX || {}; cX.callQueue = cX.callQueue || []; cX.callQueue.push(['invoke', function() { googletag.cmd.push(function() { googletag.defineSlot('/42072717/TestUnit', [400, 150], 'div-gpt-ad-1421314147467-0').addService(googletag.pubads()).setTargeting("CxSegments",cX.getUserSegmentIds({persistedQueryId:'1234567890'})).; googletag.enableServices(); }); }]); // Async load of cx.js (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js'; t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); </script> </head> <body> <!-- the code that places the ad --> <div id='div-gpt-ad-1421314147467-0'> <script type='text/javascript'> cX.callQueue.push(['invoke', function() { googletag.cmd.push(function() { googletag.display('div-gpt-ad-1421314147467-0'); }); }]); </script> </div> </body>

Modified tag with Cxense segments

(... Google広告スクリプトをロードするコードを外しています ...) TODO: Piano Insightのスクリプトがこのタグを実行しているページにない場合、ユーザのクロスサイトをリンクするためにダミーの分析イベントを送信する必要があります。 <head> <script type='text/javascript'> var cX = cX || {}; cX.callQueue = cX.callQueue || []; cX.callQueue.push(['invoke', function() { googletag.cmd.push(function() { googletag.defineSlot('/42072717/TestUnit', [400, 150], 'div-gpt-ad-1421314147467-0').addService(googletag.pubads()).setTargeting("CxSegments",cX.getUserSegmentIds({persistedQueryId:'1234567890'})). .setTargeting("cxprnd", cX.getPageContext().pageViewRandom) .setTargeting("cxid", cX.getUserId()) .setTargeting("cxsiteid", "12345"); //replace '12345' with actual CX site id googletag.enableServices(); }); }]); // Async load of cx.js (function(d,s,e,t){e=d.createElement(s);e.type='text/java'+s;e.async='async'; e.src='http'+('https:'===location.protocol?'s://s':'://')+'cdn.cxense.com/cx.js'; t=d.getElementsByTagName(s)[0];t.parentNode.insertBefore(e,t);})(document,'script'); </script> </head> <body> <!-- the code that places the ad --> <div id='div-gpt-ad-1421314147467-0'> <script type='text/javascript'> cX.callQueue.push(['invoke', function() { googletag.cmd.push(function() { googletag.display('div-gpt-ad-1421314147467-0'); }); }]); </script> </div> </body>

Last updated: