Dùng Topics API để quảng cáo dựa trên mối quan tâm

Gửi ý kiến phản hồi

Giới thiệu về Topics API

Đối với quảng cáo trên thiết bị di động, nhà quảng cáo muốn phân phát những quảng cáo phù hợp với mối quan tâm của người dùng. Ví dụ: nếu người dùng quan tâm đến thông tin về nấu ăn, có thể họ sẽ thấy quảng cáo về nấu ăn phù hợp hơn là quảng cáo không liên quan đến mối quan tâm của họ.

Quảng cáo dựa trên mối quan tâm (IBA) là một hình thức quảng cáo được cá nhân hoá, trong đó quảng cáo được chọn cho người dùng dựa trên thông tin về mối quan tâm thu thập được từ các ứng dụng mà người dùng từng tương tác. Quảng cáo này khác với quảng cáo theo ngữ cảnh vốn chỉ dựa trên mối quan tâm bắt nguồn từ nội dung hiện đang xem. Một trong những lợi ích của IBA so với quảng cáo theo ngữ cảnh là IBA giúp các ứng dụng hiển thị quảng cáo phù hợp và hấp dẫn hơn cho người dùng.

Topics API dự đoán các tín hiệu thô về mối quan tâm trên thiết bị dựa trên hoạt động dùng ứng dụng của người dùng. Những tín hiệu này, còn gọi là chủ đề, sẽ được chia sẻ với nhà quảng cáo nhằm hỗ trợ các trường hợp sử dụng IBA mà không cần phải theo dõi từng người dùng trên các ứng dụng.

Khái niệm chính

  • Chủ đề (topic) là chủ đề mà người dùng này quan tâm (mọi người đều có thể đọc được), đồng thời chủ đề này cũng nằm trong cách phân loại chủ đề.
  • Chủ đề sẽ được quan sát qua một phương thức gọi (tức là ứng dụng hoặc SDK bên thứ ba dùng trong ứng dụng) nếu phương thức gọi đó yêu cầu Topics API từ một ứng dụng liên kết với chủ đề này trong suốt 3 khoảng thời gian bắt đầu vừa qua của hệ thống.
  • Thời gian bắt đầu của hệ thống là khoảng thời gian tính toán của chủ đề, chẳng hạn như một tuần.

Cách thức hoạt động

Với đề xuất này, Topics API dự định cung cấp cho phương thức gọi các chủ đề quảng cáo được quan tâm ở dạng thô dựa trên hoạt động dùng ứng dụng của người dùng. Bạn có thể dùng những chủ đề này để bổ sung cho mọi thông tin ngữ cảnh liên quan đến ứng dụng muốn hiển thị quảng cáo và có thể kết hợp chúng để giúp tìm ra quảng cáo phù hợp cho người dùng.

Hãy tham khảo Hướng dẫn dành cho nhà phát triển Topics API để xem các ví dụ về mã minh hoạ cách thiết lập khả năng tìm nạp các chủ đề cho quảng cáo dựa trên mối quan tâm. Lưu ý: API chưa được hoàn tất.

Các chủ đề này được chọn từ một hệ thống phân loại nguồn mở được xác định trước.

Nền tảng này sử dụng mô hình thuật toán phân loại để đưa ra các chủ đề. Việc triển khai Topics API và việc API này sử dụng thuật toán phân loại sẽ là một phần của Dự án nguồn mở Android và được cải thiện theo thời gian.

Để minh hoạ, mã mẫu sau đây sẽ cho thấy cách sử dụng các chủ đề để tìm nạp quảng cáo dựa trên mối quan tâm. Các API được sử dụng ở đây chưa phải là API chính thức.

// Initialize the Topics API.
…
topicsFuture = AdvertisingTopicsClient.getTopics();

// Retrieve Topics and use them in Ad request.
Futures.addCallback(
    topicsFuture,
    new FutureCallback<AdvertisingTopicsInfo>() {
        @Override
        public void onSuccess(@Nullable AdvertisingTopicsInfo topicsInfo) {
            // Sanitize Topics result.
            ...
            // Initialize ad request with Topics obtained.
            AdRequest adRequest = AdRequest.initialize(topicsInfo);
        }

        @Override
        public void onFailure(Throwable t) {
            // Handle error.
            ...
        }
});

Để hiểu rõ hơn cách hoạt động của mô hình thuật toán phân loại, bạn có thể kiểm thử cách các dữ liệu ứng dụng phản ứng trong hệ thống bằng Công cụ phân loại chủ đề của Android.

Truy cập vào Topics API

Các nền tảng công nghệ quảng cáo cần đăng ký để truy cập vào Topics API. Hãy xem bài viết Đăng ký tài khoản Hộp cát về quyền riêng tư để biết thêm thông tin.

Thông tin chi tiết

  • Sau mỗi khoảng thời gian bắt đầu của hệ thống (chẳng hạn như một lần mỗi tuần), 5 chủ đề hàng đầu của người dùng sẽ được tính toán dựa theo thông tin trên thiết bị.

    • Khi Topics API được gọi, nền tảng sẽ kiểm tra xem một chủ đề có được chỉ định cho ứng dụng gọi ra API hay không. Nếu không có chủ đề nào được chỉ định, một chủ đề sẽ được chọn làm chủ đề tiếp theo và chủ đề được chọn đó sẽ được chỉ định cho ứng dụng này trong thời gian bắt đầu còn lại của hệ thống.
      • Với xác suất 95%, một chủ đề sẽ được chọn ngẫu nhiên trong danh sách 5 chủ đề hàng đầu được tính toán cho thời gian bắt đầu của hệ thống.
      • Với xác suất 5%, một chủ đề sẽ được chọn ngẫu nhiên từ cách phân loại.
      • Phương thức gọi có thể chỉ định rằng chúng muốn truy xuất các chủ đề mà không cần sửa đổi trạng thái bằng cách gọi getTopics qua tham số shouldRecordObservation = false. Tức là các chủ đề có thể được trả về, nhưng lệnh gọi sẽ không được đưa vào phép tính toán thời gian bắt đầu của hệ thống hằng tuần, cũng như không cập nhật danh sách các chủ đề được ghi nhận cho phương thức gọi.
    • Lý do mà mỗi ứng dụng nhận được một trong số vài chủ đề là để đảm bảo rằng mỗi ứng dụng sẽ nhận được các chủ đề riêng, khiến ứng dụng khó liên kết chéo đến cùng một người dùng.
      • Ví dụ: có thể ứng dụng A cho người dùng thấy chủ đề T1, nhưng ứng dụng B cho người dùng thấy chủ đề T2. Điều này khiến 2 ứng dụng càng khó xác định rằng thông tin này liên kết với cùng một người dùng.
  • Topics API trả về danh sách gồm tối đa 3 chủ đề, cụ thể là 1 chủ đề cho từng khoảng thời gian trong số 3 khoảng thời gian bắt đầu vừa qua của hệ thống.

    • Bằng cách cung cấp tối đa 3 chủ đề, những ứng dụng ít dùng sẽ có đủ các chủ đề để tìm quảng cáo phù hợp, còn những ứng dụng thường xuyên dùng sẽ nhận được tối đa 1 chủ đề mới mỗi tuần.
    • Thông tin về chủ đề được trả về bao gồm mã nhận dạng chủ đề (int) tương ứng với một mục nhập trong dữ liệu phân loại, một phiên bản phân loại và một phiên bản mô hình thuật toán phân loại.
    • Chỉ những phương thức gọi quan sát thấy người dùng sử dụng một ứng dụng liên kết với chủ đề được đề cập trong 3 khoảng thời gian bắt đầu vừa qua của hệ thống mới có thể nhận được chủ đề này.
    • Mọi chủ đề được trả về cho biết mối quan tâm của người dùng và bạn có thể chọn bất kỳ hoặc mọi chủ đề này để cá nhân hoá quảng cáo trong yêu cầu quảng cáo của mình.
  • Sau khi một chủ đề được chỉ định cho ứng dụng gọi ra Topics API, nền tảng sẽ xác định xem phương thức gọi có thể nhận được chủ đề này hay không.

    • Chỉ những phương thức gọi quan sát thấy người dùng tương tác với một ứng dụng liên kết với chủ đề được đề cập trong vòng 3 khoảng thời gian bắt đầu vừa qua của hệ thống mới có thể nhận được chủ đề này.
    • Nếu trước đây, phương thức gọi không gọi API cho người dùng đó trên ứng dụng về chủ đề đó, thì chủ đề sẽ không có trong danh sách do API trả về.
    • Nếu phương thức gọi không nhận được bất kỳ chủ đề nào trong 3 khoảng thời gian bắt đầu vừa qua của hệ thống, thì Topics API sẽ trả về một danh sách trống.

    Ví dụ: giả sử người dùng đã cài đặt 7 ứng dụng trên thiết bị: A, B, C, D, E, F và G. Giả sử rằng việc phân loại chủ đề cho ứng dụng và SDK công nghệ quảng cáo trong các ứng dụng này như sau:

    Ứng dụng Phân loại chủ đề SDK công nghệ quảng cáo
    A T1, T5 ad-sdk1, ad-sdk2
    B T2 ad-sdk2
    C T3, T6 ad-sdk3, ad-sdk4
    D T1, T4 ad-sdk1
    E T5 ad-sdk4, ad-sdk5
    F T6 ad-sdk2, ad-sdk3, ad-sdk4
    G T7 ad-sdk2
    • Kết thúc tuần 1: Topics API tạo ra 5 chủ đề hàng đầu dành cho người dùng trong khoảng thời gian bắt đầu của hệ thống này.
    Chủ đề hàng đầu Những phương thức gọi có thể tìm hiểu về chủ đề này
    T1 ad-sdk1, ad-sdk2
    T2 ad-sdk2
    T3 ad-sdk3, ad-sdk4
    T4 ad-sdk1
    T5 ad-sdk1, ad-sdk2, ad-sdk4, ad-sdk5
    • Trong tuần 2, nếu một phương thức gọi trong bất kỳ ứng dụng nào gọi API, thì danh sách chủ đề trả về sẽ chỉ bao gồm các chủ đề cho những phương thức gọi có ở cột "Những phương thức gọi có thể tìm hiểu về chủ đề này" cho chủ đề đó đối với ứng dụng đó trong khoảng thời gian bắt đầu đó của hệ thống.
    • Khoảng thời gian nhật ký được dùng khi tính toán chủ đề có sẵn cho từng phương thức gọi là 3 khoảng thời gian bắt đầu của hệ thống (hoặc 3 tuần).
    • Chỉ những chủ đề liên kết với các ứng dụng gọi ra Topics API (trực tiếp hoặc thông qua SDK quảng cáo) mới được sử dụng. Điều này nghĩa là nếu một ứng dụng không bao gồm bất kỳ SDK quảng cáo nào gọi Topics API và không gọi ra API, thì các chủ đề liên kết với ứng dụng đó không đóng góp vào các chủ đề được chia sẻ với ứng dụng hoặc SDK quảng cáo khác.
    • Ứng dụng cũng có thể tuyên bố không chọn Topics API thông qua các tệp kê khai và thành phần XML mới, để không cho phép SDK quảng cáo dùng API cho ứng dụng đó. Các chủ đề liên kết với ứng dụng không được chọn sẽ không đóng góp vào việc tính toán chủ đề hằng tuần. Tài liệu này sẽ được cập nhật để bổ sung thông tin chi tiết về hoạt động triển khai có liên quan.
  • Nếu không có đủ mức dùng ứng dụng cho nền tảng để dự đoán 5 chủ đề, nền tảng có thể cân nhắc các lựa chọn, chẳng hạn như tạo ngẫu nhiên các chủ đề còn lại.

Cách phân loại

  • Trong đề xuất hiện tại, cách phân loại ban đầu sẽ bao gồm số lượng chủ đề từ vài trăm đến vài nghìn. Đề xuất về cách phân loại ban đầu sẽ được chia sẻ ở nội dung cập nhật trong tương lai của tài liệu này.
  • Cách phân loại này sẽ do con người chọn lọc, do đó, các chủ đề nhạy cảm sẽ không được đưa vào cách phân loại này.
  • Cách phân loại này sẽ được điều chỉnh theo danh mục quảng cáo có thể hiển thị trên ứng dụng dành cho thiết bị di động trên Android.
  • Hệ thống phân loại là nguồn mở và có thể thay đổi. Bạn có thể gửi đề xuất bằng cách sử dụng nút phản hồi ở đầu trang này.

Thuật toán phân loại chủ đề

Các chủ đề được quan tâm bắt nguồn từ mô hình thuật toán phân loại được đào tạo về thông tin được cung cấp công khai về ứng dụng (chẳng hạn như tên ứng dụng, thông tin mô tả và tên gói).

  • Khi mô hình thuật toán phân loại được dùng để tham khảo nhằm tính toán chủ đề trong một khoảng thời gian bắt đầu nhất định của hệ thống, thì tập hợp tín hiệu được sử dụng sẽ giữ nguyên trên thiết bị. Tập hợp các tín hiệu này có thể bao gồm ứng dụng được cài đặt hoặc sử dụng gần đây, sau này có thể được mở rộng để bao gồm các tín hiệu khác.
  • Các mô hình ban đầu sẽ được Google đào tạo, trong đó dữ liệu đào tạo bao gồm cả nhãn do con người chọn lọc cho thông tin cung cấp công khai về ứng dụng. Mô hình này sẽ được cung cấp miễn phí cho các ứng dụng để xem ứng dụng của họ được phân loại vào chủ đề nào.
  • Các mô hình ban đầu sẽ được huấn luyện về thông tin công khai liên quan đến ứng dụng từ một tập hợp giới hạn các cửa hàng ứng dụng, chẳng hạn như Cửa hàng Google Play.
  • Có thể xảy ra trường hợp một ứng dụng ánh xạ đến nhiều chủ đề, không ánh xạ đến chủ đề nào hoặc không được thêm vào nhật ký chủ đề dành cho người dùng. Nếu một ứng dụng ánh xạ đến nhiều chủ đề trong cách phân loại, thì số lượng chủ đề được chọn cho ứng dụng này sẽ giới hạn ở 3 chủ đề hàng đầu.

Quyền kiểm soát của người dùng

  • Thiết kế này nhằm mang lại cho người dùng khả năng xem và xoá các chủ đề liên quan đến hoạt động dùng ứng dụng của họ. Việc triển khai khả năng kiểm soát của người dùng đang diễn ra và sẽ được đưa vào nội dung cập nhật trong tương lai.
  • Nếu người dùng gỡ cài đặt một ứng dụng góp phần vào việc lựa chọn chủ đề được đưa ra trong 3 khoảng thời gian bắt đầu vừa qua của hệ thống, thì chủ đề đó sẽ không bị xoá khỏi danh sách các chủ đề được trả về trong 3 khoảng thời gian bắt đầu vừa qua của hệ thống, nhằm tránh làm lộ thông tin về việc gỡ cài đặt.

Để tạo điều kiện cho quá trình kiểm thử về trải nghiệm người dùng cuối, bạn cũng có thể chạy một ý định trong ứng dụng để xem giao diện người dùng cài đặt cho các Chủ đề tương tự như cách người dùng cuối sẽ nhìn thấy. Bạn có thể xem ví dụ về lệnh gọi bên dưới:

//Button that launches settings UI
private Button mSettingsAppButton;
private static final String RB_SETTING_APP_INTENT = "android.adservices.ui.SETTINGS";

//Does setup for button on screen that will launch settings UI to observe Topics
private void registerLauchSettingsAppButton() {
    mSettingsAppButton.setOnClickListener(
        new View.OnClickListener() {

            @Override
            public void onClick(View view) {
                Context context = getApplicationContext();
                Intent activity2Intent = new Intent(RB_SETTING_APP_INTENT);
                activity2Intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(activity2Intent);
            }
        });
}