Yêu cầu sự đồng ý của người dùng ở Châu Âu

Theo Chính sách về sự đồng ý của người dùng ở Liên minh Châu Âu của Google, bạn phải tiết lộ một số thông tin nhất định cho những người dùng ở Khu vực kinh tế Châu Âu (EEA) và phải có được sự đồng ý của những người dùng đó để sử dụng cookie hoặc phương pháp lưu trữ cục bộ khác (trong trường hợp pháp luật yêu cầu), cũng như để sử dụng dữ liệu cá nhân (chẳng hạn như AdID) nhằm mục đích phân phát quảng cáo. Chính sách này thể hiện các yêu cầu của Chỉ thị về quyền riêng tư và truyền thông điện tử của Liên minh Châu Âu cũng như Quy định chung về bảo vệ dữ liệu (GDPR).

Để hỗ trợ các nhà xuất bản tuân thủ các nghĩa vụ của họ theo chính sách này, Google cung cấp SDK lấy sự đồng ý. SDK lấy sự đồng ý là một thư viện nguồn mở cung cấp các chức năng tiện ích để lấy sự đồng ý từ người dùng. Bạn có thể xem mã nguồn đầy đủ trên GitHub.

Những quảng cáo do Google phân phát có thể được phân loại thành quảng cáo được cá nhân hóa hoặc không được cá nhân hóa, cả hai loại quảng cáo này đều yêu cầu phải có sự đồng ý của người dùng ở Khu vực kinh tế Châu Âu (EEA). Theo mặc định, yêu cầu quảng cáo gửi đến Google sẽ phân phát quảng cáo được cá nhân hóa, với lựa chọn quảng cáo dựa trên dữ liệu đã lấy trước đây của người dùng. Google cũng hỗ trợ định cấu hình các yêu cầu quảng cáo để phân phát quảng cáo không được cá nhân hóa. Tìm hiểu thêm về quảng cáo được cá nhân hóa và quảng cáo không được cá nhân hóa.

Hướng dẫn này mô tả cách sử dụng SDK lấy sự đồng ý để có được sự đồng ý của người dùng. Hướng dẫn này cũng mô tả cách chuyển tiếp sự đồng ý đến SDK quảng cáo trên thiết bị di động của Google sau khi bạn đã có được sự đồng ý.

Điều kiện tiên quyết

Các ứng dụng có thể nhập SDK lấy sự đồng ý bằng cách sử dụng phần phụ thuộc Gradle hướng đến vị trí lưu trữ Maven của Google. Để sử dụng vị trí lưu trữ đó, bạn cần tham chiếu vị trí lưu trữ trong tệp build.gradle ở cấp dự án của ứng dụng. Mở vị trí lưu trữ của bạn và tìm mục allprojects:

Tệp build.gradle cấp dự án mẫu (phần trích dẫn)

allprojects {
    repositories {
        google()
        jcenter()
    }
}

Thêm chỉ thị google() ở trên nếu chưa có.

Tiếp theo, mở tệp build.gradle ở cấp ứng dụng cho ứng dụng của bạn và tìm mục "phần phụ thuộc".

Tệp build.gradle cấp ứng dụng mẫu (phần trích dẫn)

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.android.support:appcompat-v7:26.1.0'
    implementation 'com.google.android.ads.consent:consent-library:1.0.6'
}

Thêm dòng in đậm ở trên để hướng dẫn Gradle tải phiên bản mới nhất của SDK lấy sự đồng ý. Sau khi thực hiện xong, hãy lưu tệp và thực hiện quy trình đồng bộ hóa Gradle.

Trước khi sử dụng bất kỳ phương thức nào khác trong SDK lấy sự đồng ý, bạn nên cập nhật trạng thái đồng ý để đảm bảo rằng SDK lấy sự đồng ý có thông tin mới nhất về các nhà cung cấp công nghệ quảng cáo mà bạn đã chọn trong giao diện người dùng AdMob. Nếu danh sách các nhà cung cấp công nghệ quảng cáo đã thay đổi so với lần gần đây nhất người dùng đồng ý, thì trạng thái đồng ý sẽ đặt lại về trạng thái không xác định.

Trường hợp không sử dụng tính năng dàn xếp

Nếu không sử dụng tính năng dàn xếp, bạn có hai tùy chọn để triển khai SDK lấy sự đồng ý để lấy sự đồng ý.

Một tùy chọn là sử dụng SDK lấy sự đồng ý để trình bày biểu mẫu lấy sự đồng ý do Google hiển thị cho người dùng của bạn. Biểu mẫu lấy sự đồng ý hiển thị một danh sách gồm các nhà cung cấp công nghệ quảng cáo mà bạn đã chọn trong giao diện người dùng AdMob. SDK lấy sự đồng ý lưu trữ ý kiến phản hồi về sự đồng ý của người dùng.

Tùy chọn còn lại là sử dụng SDK lấy sự đồng ý để truy xuất động danh sách đầy đủ các nhà cung cấp công nghệ quảng cáo từ AdMob, như được giải thích trong mục lấy sự đồng ý do nhà xuất bản quản lý. Tuy nhiên, trong trường hợp này, bạn sẽ cần xác định cách tạo sẵn danh sách các nhà cung cấp cho người dùng cũng như trình bày biểu mẫu lấy sự đồng ý của riêng bạn cho người dùng.

Sau khi người dùng đã lựa chọn đồng ý, bạn có thể yêu cầu SDK lấy sự đồng ý lưu trữ lựa chọn đồng ý của người dùng như đã giải thích trong Lưu trữ dữ liệu về sự đồng ý do nhà xuất bản quản lý.

Sau khi lấy sự đồng ý, nếu người dùng đã đồng ý chỉ nhận quảng cáo không được cá nhân hóa, bạn sẽ cần chuyển tiếp sự đồng ý đến SDK quảng cáo trên thiết bị di động của Google.

Trường hợp sử dụng tính năng dàn xếp AdMob

Bạn có thể sử dụng SDK lấy sự đồng ý để truy xuất động danh sách đầy đủ các nhà cung cấp công nghệ quảng cáo từ AdMob, như được giải thích trong mục lấy sự đồng ý do nhà xuất bản quản lý. Bạn sẽ cần xác định thêm các nhà cung cấp công nghệ quảng cáo từ các mạng quảng cáo khác mà bạn cần trình bày cho người dùng để lấy sự đồng ý.

Là một nhà phát triển ứng dụng, bạn sẽ cần lấy sự đồng ý của người dùng cho cả nhà cung cấp công nghệ quảng cáo do SDK lấy sự đồng ý trả về và nhà cung cấp từ các mạng quảng cáo khác. Bạn cũng cần lưu trữ theo cách thủ công các ý kiến phản hồi về sự đồng ý của người dùng và chuyển tiếp sự đồng ý đến SDK quảng cáo trên thiết bị di động của Google nếu người dùng đã đồng ý chỉ nhận quảng cáo không được cá nhân hóa.

Hiện tại, Google không thể lấy và xử lý sự đồng ý cho các mạng dàn xếp, vì vậy, bạn cần lấy và xử lý riêng sự đồng ý cho từng mạng quảng cáo. Chúng tôi đang tích cực làm việc với tất cả các mạng dàn xếp nguồn mở với các phiên bản khác nhau để cung cấp tài liệu cập nhật kèm theo thông tin chi tiết về cách chuyển tiếp sự đồng ý. Tài liệu đã được phát hành cho các mạng dàn xếp sau:

Khi sử dụng SDK lấy sự đồng ý, bạn nên xác định trạng thái về sự đồng ý của người dùng vào mỗi lần khởi chạy ứng dụng. Để thực hiện việc này, hãy gọi requestConsentInfoUpdate() trên bản sao của ConsentInformation.

import com.google.ads.consent.*;

public class MainActivity extends Activity {
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        ...
        ConsentInformation consentInformation = ConsentInformation.getInstance(context);
        String[] publisherIds = {"pub-0123456789012345"};
        consentInformation.requestConsentInfoUpdate(publisherIds, new ConsentInfoUpdateListener() {
            @Override
            public void onConsentInfoUpdated(ConsentStatus consentStatus) {
                 // User's consent status successfully updated.
            }

            @Override
            public void onFailedToUpdateConsentInfo(String errorDescription) {
                 // User's consent status failed to update.
            }
        });
        ...
    }
    ...
}

Lệnh gọi đến requestConsentInfoUpdate() yêu cầu hai đối số:

Nếu đã cập nhật thành công thông tin về sự đồng ý, trạng thái đồng ý đã cập nhật sẽ được cung cấp thông qua phương thức onConsentInfoUpdated() của ConsentInfoUpdateListener. ConsentStatus trả về có thể có các giá trị sau:

Trạng thái đồng ý Định nghĩa
ConsentStatus.PERSONALIZED Người dùng đã đồng ý nhận quảng cáo được cá nhân hóa.
ConsentStatus.NON_PERSONALIZED Người dùng đã đồng ý nhận quảng cáo không được cá nhân hóa.
ConsentStatus.UNKNOWN Người dùng không đồng ý cũng không từ chối nhận quảng cáo được cá nhân hóa hoặc quảng cáo không được cá nhân hóa.

Sau khi đã cập nhật thành công thông tin về sự đồng ý, bạn cũng có thể kiểm tra ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown() để xem liệu người dùng có ở Khu vực kinh tế Châu Âu hay không hay vị trí yêu cầu là không xác định.

Nếu phương thức isRequestLocationInEeaOrUnknown() trả về false, thì tức là người dùng không ở Khu vực kinh tế Châu Âu và bạn không bắt buộc phải lấy sự đồng ý theo Chính sách về sự đồng ý của người dùng ở Liên minh Châu Âu. Bạn có thể tạo các yêu cầu quảng cáo cho SDK quảng cáo trên thiết bị di động của Google.

Nếu phương thức isRequestLocationInEeaOrUnknown() trả về true:

SDK lấy sự đồng ý của Google cung cấp hai cách để lấy sự đồng ý từ người dùng:

Hãy nhớ cung cấp cho người dùng tùy chọn Thay đổi hoặc thu hồi sự đồng ý.

Biểu mẫu lấy sự đồng ý do Google hiển thị là một biểu mẫu có thể định cấu hình toàn màn hình hiển thị trên nội dung ứng dụng của bạn. Bạn có thể định cấu hình biểu mẫu để trình bày cho người dùng các kiểu kết hợp theo các tùy chọn sau:

  • Đồng ý xem quảng cáo được cá nhân hóa
  • Đồng ý xem quảng cáo không được cá nhân hóa
  • Sử dụng phiên bản có trả tiền của ứng dụng thay vì xem quảng cáo

Bạn nên xem xét kỹ nội dung đồng ý: nội dung xuất hiện theo mặc định là một thông báo có thể phù hợp nếu bạn sử dụng Google để kiếm tiền từ ứng dụng; nhưng chúng tôi không thể cung cấp dịch vụ tư vấn pháp lý về văn bản đồng ý thích hợp cho bạn. Để cập nhật văn bản đồng ý của biểu mẫu lấy sự đồng ý do Google hiển thị, hãy sửa đổi tệp consentform.html được bao gồm trong SDK lấy sự đồng ý theo yêu cầu.

Biểu mẫu lấy sự đồng ý do Google hiển thị được định cấu hình và hiển thị bằng cách sử dụng lớp ConsentForm. Mã sau đây minh họa cách tạo một ConsentForm với cả ba tùy chọn đồng ý:

URL privacyUrl = null;
try {
    // TODO: Replace with your app's privacy policy URL.
    privacyUrl = new URL("https://www.your.com/privacyurl");
} catch (MalformedURLException e) {
    e.printStackTrace();
    // Handle error.
}
ConsentForm form = new ConsentForm.Builder(context, privacyUrl)
    .withListener(new ConsentFormListener() {
        @Override
        public void onConsentFormLoaded() {
            // Consent form loaded successfully.
        }

        @Override
        public void onConsentFormOpened() {
            // Consent form was displayed.
        }

        @Override
        public void onConsentFormClosed(
                ConsentStatus consentStatus, Boolean userPrefersAdFree) {
            // Consent form was closed.
        }

        @Override
        public void onConsentFormError(String errorDescription) {
            // Consent form error.
        }
    })
    .withPersonalizedAdsOption()
    .withNonPersonalizedAdsOption()
    .withAdFreeOption()
    .build();

Các phương thức ở trên chuẩn bị biểu mẫu lấy sự đồng ý do Google hiển thị với các tùy chọn sau:

withListener()
Đăng ký trình xử lý cho ConsentForm. Mỗi phương thức có thể ghi đè trong ConsentFormListener tương ứng với một sự kiện trong vòng đời của biểu mẫu lấy sự đồng ý.
Các phương thức có thể ghi đè
onConsentFormLoaded Đã tải thành công biểu mẫu lấy sự đồng ý.
onConsentFormError Không thể tải biểu mẫu lấy sự đồng ý. Thông số errorDescription cung cấp một nội dung mô tả lỗi.
onConsentFormOpened Đã mở biểu mẫu lấy sự đồng ý.
onConsentFormClosed Đã đóng biểu mẫu lấy sự đồng ý. Các thông số của phương thức cung cấp thông tin sau:
  • consentStatus là giá trị ConsentStatus mô tả trạng thái đồng ý đã cập nhật của người dùng.
  • userPrefersAdFree có giá trị là true khi người dùng đã chọn sử dụng phiên bản có trả tiền của ứng dụng thay vì xem quảng cáo.
withPersonalizedAdsOption()
Cho biết rằng biểu mẫu lấy sự đồng ý sẽ hiển thị một tùy chọn quảng cáo được cá nhân hóa.
withNonPersonalizedAdsOption()
Cho biết rằng biểu mẫu lấy sự đồng ý sẽ hiển thị một tùy chọn quảng cáo không được cá nhân hóa.
withAdFreeOption()
Cho biết rằng biểu mẫu lấy đồng ý sẽ hiển thị một tùy chọn ứng dụng không có quảng cáo.

Sau khi bạn đã tạo đối tượng ConsentForm, hãy tải biểu mẫu lấy sự đồng ý bằng cách gọi phương thức load() của ConsentForm, như được hiển thị bên dưới:

form.load();

Để trình bày cho người dùng biểu mẫu lấy sự đồng ý do Google hiển thị, hãy gọi show() trên một bản sao của ConsentForm, như được minh họa dưới đây:

form.show();

Sau khi người dùng chọn một tùy chọn và đóng biểu mẫu, SDK lấy sự đồng ý sẽ lưu lựa chọn của người dùng và kích hoạt sự kiện onConsentFormClosed. Bạn có thể xử lý sự kiện này và chuyển tiếp sự đồng ý đến SDK quảng cáo trên thiết bị di động của Google .

Nếu chọn tự lấy sự đồng ý, bạn có thể sử dụng phương thức getAdProviders() của lớp ConsentInformation để lấy danh sách các nhà cung cấp công nghệ quảng cáo có liên kết với ID nhà xuất bản được sử dụng trong ứng dụng của bạn. Xin lưu ý rằng bạn bắt buộc phải có sự đồng ý để có danh sách đầy đủ các nhà cung cấp công nghệ quảng cáo được định cấu hình cho mã nhà xuất bản của mình.

List<AdProvider> adProviders =
    ConsentInformation.getInstance(context).getAdProviders();

Sau đó, bạn có thể sử dụng danh sách các nhà cung cấp công nghệ quảng cáo để tự lấy sự đồng ý.

Khi nhận được sự đồng ý, hãy ghi lại ConsentStatus tương ứng với ý kiến phản hồi của người dùng bằng cách sử dụng phương thức setConsentStatus() của lớp ConsentInformation.

ConsentInformation.getInstance(context)
    .setConsentStatus(ConsentStatus.PERSONALIZED);

Sau khi báo cáo sự đồng ý với SDK lấy sự đồng ý, bạn có thể chuyển tiếp sự đồng ý đến SDK quảng cáo trên thiết bị di động của Google.

Để cho phép người dùng cập nhật sự đồng ý của họ, bạn chỉ cần lặp lại các bước trong mục Lấy sự đồng ý khi người dùng chọn cập nhật trạng thái đồng ý của họ.

Nếu nhà xuất bản biết rằng người dùng chưa đủ tuổi thành niên, tất cả các yêu cầu quảng cáo đều phải đặt TFUA (Thẻ cho người dùng chưa đủ tuổi thành niên ở Châu Âu). Để đưa thẻ này vào tất cả các yêu cầu quảng cáo được tạo từ ứng dụng của bạn, hãy gọi setTagForUnderAgeOfConsent(true). Tùy chọn cài đặt này có hiệu lực cho tất cả các yêu cầu quảng cáo trong tương lai.

ConsentInformation.getInstance(context).setTagForUnderAgeOfConsent(true);

Sau khi bật tùy chọn cài đặt TFUA, bạn sẽ không thể tải biểu mẫu lấy sự đồng ý do Google hiển thị. Tất cả yêu cầu quảng cáo bao gồm TFUA sẽ trở thành không đủ điều kiện cho hoạt động tiếp thị lại và quảng cáo được cá nhân hóa. TFUA vô hiệu hóa yêu cầu cho nhà cung cấp công nghệ quảng cáo bên thứ ba, chẳng hạn như pixel đo lường quảng cáo và máy chủ quảng cáo bên thứ ba.

Để xóa TFUA khỏi các yêu cầu quảng cáo, hãy gọi setTagForUnderAgeOfConsent(false).

Thử nghiệm

SDK lấy sự đồng ý có nhiều cách hoạt động khác nhau tùy thuộc vào giá trị của ConsentInformation.getInstance(context).isRequestLocationInEeaOrUnknown(). Ví dụ: không thể tải biểu mẫu lấy sự đồng ý nếu người dùng không ở Khu vực kinh tế Châu Âu (EEA).

Để cho phép thử nghiệm ứng dụng của bạn dễ dàng hơn cả bên trong và bên ngoài Khu vực kinh tế Châu Âu (EEA), SDK lấy sự đồng ý hỗ trợ các tùy chọn gỡ lỗi mà bạn có thể đặt trước khi gọi bất kỳ phương thức nào khác trong SDK lấy sự đồng ý.

  1. Làm theo hướng dẫn trong mục cập nhật trạng thái đồng ý để gọi requestConsentInfoUpdate. Sau đó, hãy chạy ứng dụng của bạn. Kiểm tra đầu ra logcat cho nhật ký sau:

    I/ConsentInformation: Use
    ConsentInformation.getInstance(context).addTestDevice("**33BE2250B43518CCDA7DE426D04EE231**")
    to get test ads on this device.
  2. Liệt kê thiết bị của bạn là thiết bị gỡ lỗi bằng cách sử dụng ID quảng cáo từ logcat:

    ConsentInformation.getInstance(context).addTestDevice("33BE2250B43518CCDA7DE426D04EE231");
    
  3. Cuối cùng, hãy gọi setDebugGeography để đặt vị trí địa lý ưa thích của bạn cho mục đích thử nghiệm.

    // Geography appears as in EEA for test devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_EEA);
    // Geography appears as not in EEA for debug devices.
    ConsentInformation.getInstance(context).
        setDebugGeography(DebugGeography.DEBUG_GEOGRAPHY_NOT_EEA);
    

Sau khi hoàn thành các bước này, các lệnh gọi để cập nhật trạng thái đồng ý sẽ tính đến vị trí địa lý gỡ lỗi của bạn.

Hoạt động mặc định của SDK quảng cáo trên thiết bị di động của Google là phân phát quảng cáo được cá nhân hóa. Nếu người dùng đã đồng ý chỉ nhận quảng cáo không được cá nhân hóa, bạn có thể định cấu hình đối tượng AdRequest để chỉ định rằng chỉ nên yêu cầu quảng cáo không được cá nhân hóa. Quảng cáo không được cá nhân hóa luôn được người dùng yêu cầu thông qua mã sau, bất kể người dùng có ở Khu vực kinh tế Châu Âu (EEA) hay không:

Bundle extras = new Bundle();
extras.putString("npa", "1");

AdRequest request = new AdRequest.Builder()
        .addNetworkExtrasBundle(AdMobAdapter.class, extras)
        .build();

Nếu có yêu cầu quảng cáo không được cá nhân hóa, URL yêu cầu quảng cáo hiện sẽ bao gồm &npa=1. Tuy nhiên, xin lưu ý rằng đây là thông tin chi tiết về hoạt động triển khai nội bộ của SDK quảng cáo trên thiết bị di động của Google và có thể thay đổi.

Câu hỏi thường gặp

SDK lấy sự đồng ý hỗ trợ bao nhiêu nhà cung cấp công nghệ quảng cáo?
SDK lấy sự đồng ý không áp đặt giới hạn về số lượng nhà cung cấp công nghệ quảng cáo mà nhà xuất bản chọn cho phép.
Nếu tôi thay đổi lựa chọn trong giao diện người dùng AdMob, danh sách các nhà cung cấp công nghệ quảng cáo mà SDK trả lại có tự động cập nhật không?
Có, nếu bạn thực hiện nội dung thay đổi đối với danh sách các nhà cung cấp công nghệ quảng cáo trong giao diện người dùng AdMob, nội dung thay đổi sẽ truyền đến các máy chủ quảng cáo của Google sau khoảng 1 giờ.