EU ユーザーから同意を取得する

コレクションでコンテンツを整理 必要に応じて、コンテンツの保存と分類を行います。

Google の EU ユーザーの同意ポリシーでは、欧州経済領域(EEA)のユーザーに特定の情報を開示し、法律で義務付けられている場合に Cookie やその他のローカル ストレージを使用すること、および個人データ(AdID など)を使用して広告を配信することについて、ユーザーの同意を得る必要があります。このポリシーには、EU の e プライバシー指令と一般データ保護規則(GDPR)の要件が反映されています。

パブリッシャー様がこのポリシーで定められた義務を遂行できるよう、Google は Consent SDK を提供しています。Consent SDK は、ユーザーから同意を取得するためのユーティリティ関数を提供するオープンソース ライブラリです。ソースコードの全文は GitHub

Google が配信する広告は、パーソナライズ広告またはパーソナライズされていない広告に分類できます。いずれも EEA のユーザーの同意が必要です。Google への広告リクエストに対してはデフォルトでパーソナライズド広告が配信され、対象ユーザーから以前に取得したデータに基づいて広告が選ばれます。また、広告リクエストの設定を変えてパーソナライズされていない広告を配信することもできます。 詳しくは、パーソナライズド広告とパーソナライズされていない広告についての説明をご覧ください

このガイドでは、Consent SDK を使用してユーザーの同意を取得する方法を説明します。また、同意を取得した後で Google Mobile Ads SDK に同意を転送する方法についても説明します。

Prerequisites

CocoaPods(推奨)

この SDK を iOS プロジェクトにインポートする最も簡単な方法は、CocoaPods を使用することです。プロジェクトの Podfile を開き、アプリのターゲットに次の行を追加します。

pod 'PersonalizedAdConsent'

次に、コマンドラインから実行します。

pod install --repo-update

CocoaPods を初めてご利用の場合は、CocoaPods の公式ドキュメントで Podfile の作成方法と使用方法をご確認ください。

手動ダウンロード

また、SDK のソースを直接ダウンロードまたはクローンを作成し、次の手順でプロジェクトに含めることもできます。

  1. Finder から PersonalizedAdConsent.xcodeproj ファイルをプロジェクトにドラッグします。

  2. [Build Phases] タブに移動します。[Target Dependencies] で [+] ボタンをクリックし、[PersonalAdConsent] ターゲットを追加します。

  3. プロジェクトを右クリックし、[Add Files to "MyProject"] を選択します。PersonalizedAdConsent.bundle に移動します。[フォルダ参照を作成] をオンにしてください。

    完了すると、[Build Phases] タブの [Copy Bundle Resources] セクションに PersonalizedAdConsent.bundle が表示されます。

Consent SDK の他のメソッドを使用する前に、AdMob UI で選択した広告技術プロバイダに関する最新情報を Consent SDK に保持するように、同意ステータスを更新する必要があります。ユーザーが最後に同意してから広告技術プロバイダのリストが変更された場合、同意ステータスは不明な状態に戻ります。

メディエーションをご利用でない場合

メディエーションを使用していない場合は、同意 SDK を実装して同意を取得する方法が 2 つあります。

1 つは、Consent SDK を使用して、Google 提供の同意フォームをユーザーに提示することです。同意フォームには、 AdMob管理画面で選択した広告技術プロバイダのリストが表示されます。Consent SDK には、ユーザーの同意に関する回答が格納されます。

もう一つのオプションは、パブリッシャー管理の同意収集で説明しているように、Consent SDK を使用して AdMobから広告技術プロバイダの全リストを動的に取得する方法です。ただし、その場合、プロバイダのリストをユーザーに提示する方法を決定し、独自の同意フォームをユーザーに提示する必要があります。

ユーザーの同意に関する設定を行った後、パブリッシャー管理の同意の保存に記載されているように、同意 SDK にユーザーの同意の選択を求めることができます。

ユーザーがパーソナライズされていない広告のみを受信することに同意した場合は、Google Mobile Ads SDK に同意を転送する必要があります。

メディエーションを AdMob 使用する場合

Consent SDK を使用して、 AdMobから広告技術プロバイダの全リストを動的に取得できます。詳しくは、パブリッシャー管理の同意収集をご覧ください。同意を得るために、他の広告ネットワークの追加の広告技術プロバイダをユーザーに提示する必要があります。

アプリ デベロッパーは、Consent SDK から返される広告技術プロバイダと他の広告ネットワークのプロバイダの両方で、ユーザーの同意を得る必要があります。また、ユーザーがパーソナライズされていない広告のみを受信する場合は、ユーザーの同意レスポンスを手動で保存し、Google Mobile Ads SDK に同意を転送する必要があります。

Google では現在のところ、メディエーション ネットワークに関する同意は取得することも処理することもできません。そのため、それぞれの広告ネットワークについて、お客様がご自身で個別に同意を取得、処理していただく必要があります。 実装の詳細は、各メディエーション パートナーの統合ガイドでご確認ください。

同意ステータスの更新

Consent SDK を使用している場合は、すべてのアプリが起動されるときにユーザーの同意ステータスを確認することをおすすめします。これを行うには、PACConsentInformation のインスタンスで requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: を呼び出します。

Swift

import PersonalizedAdConsent
...
class ViewController: UIViewController {

  override func viewDidLoad() {
    super.viewDidLoad()
    PACConsentInformation.sharedInstance.
    requestConsentInfoUpdate(
    forPublisherIdentifiers: ["pub-0123456789012345"])
    {(_ error: Error?) -> Void in
      if let error = error {
        // Consent info update failed.
      } else {
        // Consent info update succeeded. The shared PACConsentInformation
        // instance has been updated.
      }
    }
  }

Objective-C

#import <PersonalizedAdConsent/PersonalizedAdConsent.h>
...
@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

  [PACConsentInformation.sharedInstance
      requestConsentInfoUpdateForPublisherIdentifiers:@[ @"pub-0123456789012345" ]
          completionHandler:^(NSError *_Nullable error) {
            if (error) {
              // Consent info update failed.
            } else {
              // Consent info update succeeded. The shared PACConsentInformation
              // instance has been updated.
            }
          }];
}

requestConsentInfoUpdateForPublisherIdentifiers:completionHandler: の呼び出しには、次の 2 つの引数が必要です。

  • アプリが広告をリクエストするリクエストの有効で、完全に有効なパブリッシャー ID の配列。 パブリッシャー ID を確認する

  • 入力パラメータとして NSError を受け取るブロック。同意の更新リクエストが失敗した際の情報を提供します。

同意情報が正常に更新されると、PACConsentInformation.sharedInstance.consentStatus は更新された同意ステータスを提供します。値は以下のようになります。

同意ステータス 定義
PACConsentStatusPersonalized ユーザーがパーソナライズされた広告について同意しました。
PACConsentStatusNonPersonalized ユーザーがパーソナライズされていない広告について同意しています。
PACConsentStatusUnknown パーソナライズド広告とパーソナライズされていない広告について、ユーザーが同意しなかった、または同意しなかった。

同意情報が正常に更新されたら、PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown で、ユーザーが欧州経済領域にいるか、リクエストのロケーションが不明かどうかを確認することもできます。

requestLocationInEEAOrUnknown プロパティが NO の場合、ユーザーは欧州経済領域に居住していないため、EU ユーザーの同意ポリシーに基づく同意は必要ありません。Google Mobile Ads SDK に広告リクエストを送信できます。

requestLocationInEEAOrUnknown プロパティが YES の場合:

  • PACConsentStatusPACConsentStatusPersonalized または PACConsentStatusNonPersonalized の場合、ユーザーはすでに同意しています。Google Mobile Ads SDK に同意を転送できるようになりました。

  • ユーザーが PACConsentStatusUnknown の同意を得ている場合は、以下の同意取得のセクションで、同意取得のためのユーティリティ メソッドの使用をご確認ください。

Google の Consent SDK。 ユーザーの同意を取得する方法は 2 つあります。

同意を変更または取り消すオプションをユーザーに提供します。

Google 提供の同意フォームは、設定可能なフルスクリーンのフォームであり、アプリ コンテンツの上に重ねて表示されます。フォームは、以下のオプションを組み合わせてユーザーに表示されるように構成できます。

  • パーソナライズド広告の表示に同意
  • パーソナライズされていない広告の表示に関する同意
  • 広告を表示する代わりに有料バージョンのアプリを使用する

同意テキストは慎重にご確認ください。デフォルトでは、Google を使用してアプリを収益化する場合は適切なメッセージが表示されることがありますが、お客様に適した同意テキストに関する法的なアドバイスを提供することはできません。Google によって表示された同意フォームの同意テキストを更新するには、必要に応じて Consent SDK に含まれている consentform.html ファイルを変更します。

Google 提供の同意フォームは、PACConsentForm クラスを使用して設定、表示されます。次のコードは、3 つのフォーム オプションすべてを使用して PACConsentForm を作成する方法を示しています。

Swift

// TODO: Replace with your app's privacy policy url.
guard let privacyUrl = URL(string: "https://www.your.com/privacyurl"),
  let form = PACConsentForm(applicationPrivacyPolicyURL: privacyUrl) else {
    print("incorrect privacy URL.")
    return
}
form.shouldOfferPersonalizedAds = true
form.shouldOfferNonPersonalizedAds = true
form.shouldOfferAdFree = true

Objective-C

// TODO: Replace with your app's privacy policy url.
NSURL *privacyURL = [NSURL URLWithString:@"https://www.your.com/privacyurl"];
PACConsentForm *form = [[PACConsentForm alloc] initWithApplicationPrivacyPolicyURL:privacyURL];
form.shouldOfferPersonalizedAds = YES;
form.shouldOfferNonPersonalizedAds = YES;
form.shouldOfferAdFree = YES;

PACConsentForm のプロパティについて、以下で詳しく説明します。

shouldOfferPersonalizedAds
パーソナライズド広告のオプションを同意フォームに表示するかどうかを指定します。デフォルトは YES です。
shouldOfferNonPersonalizedAds
パーソナライズされていない広告のオプションを同意フォームに表示するかどうかを指定します。デフォルトは YES です。
shouldOfferAdFree
同意フォームに広告を表示しないアプリのオプションを表示するかどうかを指定します。デフォルトは NO です。

PACConsentForm オブジェクトを作成して設定したら、次に示すように、PACConsentFormloadWithCompletionHandler: メソッドを呼び出して同意フォームを読み込みます。

Swift

form.load {(_ error: Error?) -> Void in
  print("Load complete.")
  if let error = error {
    // Handle error.
    print("Error loading form: \(error.localizedDescription)")
  } else {
    // Load successful.
  }
}

Objective-C

[form loadWithCompletionHandler:^(NSError *_Nullable error) {
  NSLog(@"Load complete. Error: %@", error);
  if (error) {
    // Handle error.
  } else {
    // Load successful.
  }
}];

Google 提供の同意フォームをユーザーに提示するには、読み込まれた PACConsentFormpresentFromViewController:dismissCompletion: を呼び出します。以下をご覧ください。

Swift

form.present(from: self) { (error, userPrefersAdFree) in
      if let error = error {
        // Handle error.
      } else if userPrefersAdFree {
        // User prefers to use a paid version of the app.
      } else {
        // Check the user's consent choice.
        let status =
             PACConsentInformation.sharedInstance.consentStatus
      }
    }

Objective-C

 [form presentFromViewController:self
     dismissCompletion:^(NSError *_Nullable error, BOOL userPrefersAdFree) {
       if (error) {
         // Handle error.
       } else if (userPrefersAdFree) {
         // The user prefers to use a paid version of the app.
       } else {
         // Check the user's consent choice.
         PACConsentStatus status =
             PACConsentInformation.sharedInstance.consentStatus;
       }
     }];

presentFromViewController:dismissCompletion: の呼び出しには、次の 2 つの引数が必要です。

  • プレゼンテーションの送信元である UIViewController

  • NSErrorBOOL を入力パラメータとして受け取るブロック。同意フォームの表示中にエラーが発生した場合、NSError から情報が提供されます。ユーザーが広告を見る代わりに有料バージョンのアプリを使用することを選択した場合、userPrefersAdFree BOOL の値は YES になります。

ユーザーがオプションを選択してフォームを閉じると、同意 SDK によってユーザーの選択が保存され、dismissCompletion: ブロックが呼び出されます。ユーザーの選択を読み、Google Mobile Ads SDK に同意を転送できます。

パブリッシャー管理の同意の取得

自分で同意を取得する場合は、PACConsentInformation クラスの adProviders プロパティを使用して、アプリで使用するパブリッシャー ID に関連付けられた広告技術プロバイダを取得できます。パブリッシャー ID 用に設定された広告技術プロバイダの全リストについては、同意が必要です。

PACConsentInformationadProviders プロパティにアクセスする前に、同意ステータスの更新の説明に沿って、ユーザーの同意ステータスが正常に更新されるのを待つ必要があります。

Swift

let adProviders = PACConsentInformation.sharedInstance.adProviders

Objective-C

NSArray *adProviders = PACConsentInformation.sharedInstance.adProviders;

そのうえで、広告プロバイダのリストを使用して、自分で同意を取得できます。

同意を得たら、PACConsentInformation クラスの status プロパティを使用して、ユーザーのレスポンスに対応する PACConsentStatus を記録します。

Swift

PACConsentInformation.sharedInstance.consentStatus = .personalized

Objective-C

PACConsentInformation.sharedInstance.consentStatus = PACConsentStatusPersonalized;

Consent SDK に同意をレポートしたら、Google Mobile Ads SDK に同意を転送できます。

ユーザーが同意を更新できるようにするには、同意ステータスの更新を選択した場合に、同意を取得するセクションの手順を繰り返します。

ユーザーが同意年齢に満たないことをパブリッシャーが認識している場合は、すべての広告リクエストで TFUA(ヨーロッパの同意年齢に満たないユーザー向けのタグ)を設定する必要があります。アプリから送信されるすべての広告リクエストにこのタグを含めるには、 tagForUnderAgeOfConsent プロパティを YES に設定します。この設定は、今後のすべての広告リクエストで有効になります。

Swift

PACConsentInformation.sharedInstance.isTaggedForUnderAgeOfConsent = true

Objective-C

PACConsentInformation.sharedInstance.tagForUnderAgeOfConsent = YES;

TFUA の設定が有効になると、Google 提供の同意フォームの読み込みに失敗します。TFUA を含むすべての広告リクエストは、パーソナライズド広告やリマーケティングの対象外となります。TFUA では、広告測定ピクセルや第三者広告サーバーなどを扱う第三者広告技術プロバイダへのリクエストが無効になります。

TFUA を広告リクエストから削除するには、 tagForUnderAgeOfConsent プロパティを NO に設定します。

テスト

Consent SDK の動作は、 PACConsentInformation.sharedInstance.requestLocationInEEAOrUnknown たとえば、ユーザーが EEA にお住まいでない場合、同意フォームの読み込みに失敗します。

EEA 内外でアプリのテストを容易に行えるよう、同意 SDK では、同意 SDK の他のメソッドを呼び出す前に設定できるデバッグ オプションをサポートしています。

  1. デバイスの広告 ID を取得する広告 ID を記録するには、次のコードを使用します。

    #import <AdSupport/AdSupport.h>
    // ...
    
    NSLog(@"Advertising ID: %@",
          ASIdentifierManager.sharedManager.advertisingIdentifier.UUIDString);

    次に、コンソールをチェックして取得します。

    Advertising ID: 41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339
  2. コンソールの広告 ID を使用して、デバイスをテストデバイスとして指定します。

    PACConsentInformation.sharedInstance.debugIdentifiers =
        @[ @"41E538F6-9C98-4EF2-B3EE-D7BD8CAF8339" ];
  3. 最後に、テスト用に debugGeography を目的の地域に設定します。

    // Geography appears as in EEA for debug devices.
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyEEA;
    // Geography appears as not in EEA for debug devices.
    PACConsentInformation.sharedInstance.debugGeography = PACDebugGeographyNotEEA;

上記の手順を完了すると、同意ステータスの更新の呼び出しで、デバッグ対象地域が考慮されます。

ここで示すコードは、Google Mobile Ads SDK のどのバージョンでも使用できます。また、同意の取得に Consent SDK を使ったかどうかにかかわらず使用できます。

Google Mobile Ads SDK のデフォルトの動作では、パーソナライズド広告が配信されます。 パーソナライズされていない広告の配信に限ってユーザーが同意した場合には、GADRequest オブジェクトを設定し、パーソナライズされていない広告だけをリクエストするように指定できます。次のコードでは、ユーザーが欧州経済領域にいるかどうかにかかわらず、パーソナライズされていない広告がリクエストされます。

Swift

let request = GADRequest()
let extras = GADExtras()
extras.additionalParameters = ["npa": "1"]
request.register(extras)

Objective-C

GADRequest *request = [GADRequest request];
GADExtras *extras = [[GADExtras alloc] init];
extras.additionalParameters = @{@"npa": @"1"};
[request registerAdNetworkExtras:extras];

現在のところ、パーソナライズされていない広告をリクエストした場合、その広告リクエストの URL には &npa=1 が含まれます。ただし、この情報は Google Mobile Ads SDK に関する内部の実装情報であり、変更される可能性があります。

アプリの測定開始を遅らせる(省略可)

デフォルトでは、Google Mobile Ads SDK はアプリの測定を初期化し、アプリが起動すると直ちにユーザーレベルのイベントデータを Google に送信します。 この初期化動作により、コードを追加変更することなく AdMob ユーザー指標を有効にできます。

ただし、これらのイベントを送信する前にアプリでユーザーの同意が必要な場合は、明示的に Mobile Ads SDK を初期化するか広告を読み込むまで、アプリの測定を遅らせることができます。

アプリの測定を遅らせるには、ブール値が YESGADDelayAppMeasurementInit キーをアプリの Info.plist に追加します。この変更は、次のようにプログラムで行うことができます。

<key>GADDelayAppMeasurementInit</key>
<true/>

または、プロパティ リスト エディタで編集します。

よくある質問

Consent SDK がサポートしている広告技術プロバイダはいくつですか?
Consent SDK では、パブリッシャーが有効にできる広告技術プロバイダの数に制限はありません。
UI で選択内容を変更すると、SDK から返される広告技術プロバイダのリストは自動的に更新されますか? AdMob
はい。AdMob UI で広告技術プロバイダのリストを変更した場合、その変更は約 1 時間後に Google の広告サーバーに反映されます。