Hướng dẫn dành cho nhà phát triển FLEDGE trên Android

Stay organized with collections Save and categorize content based on your preferences.

FLEDGE trên Android bao gồm Custom Audience API (API Đối tượng tuỳ chỉnh) và Ad Selection API (API Lựa chọn quảng cáo). Các nhà quảng cáo và nền tảng công nghệ quảng cáo có thể sử dụng các API này để phân phát quảng cáo tuỳ chỉnh dựa trên hoạt động tương tác trước đây với ứng dụng nhằm giới hạn việc chia sẻ giá trị nhận dạng giữa các ứng dụng đồng thời giới hạn việc chia sẻ thông tin tương tác của người dùng ứng dụng với các bên thứ ba.

API đối tượng tuỳ chỉnh tập trung vào bản tóm tắt "đối tượng tuỳ chỉnh", đại diện cho một nhóm người dùng có ý định chung. Nhà quảng cáo có thể đăng ký người dùng với đối tượng tuỳ chỉnh và liên kết quảng cáo có liên quan với đối tượng đó. Thông tin này được lưu trữ trên máy và có thể dùng để thông báo giá thầu của nhà quảng cáo, lọc quảng cáo và hiển thị quảng cáo.

API lựa chọn quảng cáo cung cấp một khung cho phép nhiều nhà phát triển tiến hành một phiên đấu giá cục bộ cho đối tượng tuỳ chỉnh. Để đạt được điều này, hệ thống sẽ xem xét các quảng cáo liên quan được liên kết với đối tượng tuỳ chỉnh, đồng thời thực hiện việc xử lý bổ sung đối với các quảng cáo mà một nền tảng công nghệ quảng cáo đưa trở lại thiết bị.

Nền tảng công nghệ quảng cáo có thể tích hợp các API này để triển khai hoạt động tái tiếp thị bảo vệ quyền riêng tư của người dùng. Chúng tôi dự định hỗ trợ thêm nhiều trường hợp sử dụng, bao gồm cả quảng cáo cài đặt ứng dụng, dự kiến sẽ phát hành trong tương lai. Vui lòng tìm hiểu thêm về FLEDGE trên Android trong phần đề xuất thiết kế.

Hướng dẫn dành cho nhà phát triển này mô tả cách làm việc với FLEDGE trên Android để thực hiện những việc sau:

  1. Quản lý đối tượng tuỳ chỉnh
  2. Thiết lập và chạy lựa chọn quảng cáo trên thiết bị
  3. Báo cáo số lượt hiển thị quảng cáo

Trước khi bắt đầu

Trước khi bắt đầu, hãy hoàn thành các bước sau:

  1. Thiết lập môi trường phát triển của bạn cho Hộp cát về quyền riêng tư trên Android.
  2. Cài đặt ảnh hệ thống trên một thiết bị được hỗ trợ hoặc thiết lập một trình mô phỏng bao gồm chức năng hỗ trợ cho Hộp cát về quyền riêng tư trên Android.
  3. Trong dòng lệnh, hãy bật quyền truy cập vào API FLEDGE (được tắt theo mặc định) bằng lệnh adb sau.

      adb shell device_config put adservices ppapi_app_allow_list \"*\"
    
  4. Đưa quyền ACCESS_ADSERVICES_CUSTOM_AUDIENCE vào tệp kê khai ứng dụng:

      <uses-permission android:name="android.permission.ACCESS_ADSERVICES_CUSTOM_AUDIENCE" />
    
  5. Tham chiếu một cấu hình dịch vụ quảng cáo trong phần tử <application> của tệp kê khai:

      <property android:name="android.adservices.AD_SERVICES_CONFIG"
                android:resource="@xml/ad_services_config" />
    
  6. Chỉ định tài nguyên XML của dịch vụ quảng cáo được tham chiếu trong tệp kê khai, chẳng hạn như res/xml/ad_services_config.xml. Hãy tìm hiểu thêm về việc kiểm soát quyền truy cập vào SDK và dịch vụ quảng cáo.

      <ad-services-config>
        <custom-audiences allowAllToAccess="true" />
      </ad-services-config>
    
  7. Theo mặc định, API Lựa chọn quảng cáo sẽ thực thi các giới hạn về dung lượng bộ nhớ tối đa mà một tập lệnh báo cáo lượt hiển thị hoặc phiên đấu giá có thể phân bổ. Tính năng giới hạn bộ nhớ yêu cầu phiên bản WebView 105.0.5195.58 trở lên. Nền tảng sẽ thực thi quy trình kiểm tra phiên bản và các lệnh gọi đến API selectAdsreportImpression sẽ không thành công nếu quy trình này không được đáp ứng. Có 2 lựa chọn để thiết lập:

    • Lựa chọn 1: Chạy lệnh adb sau để tắt tính năng kiểm tra này:

      adb device_config put fledge_js_isolate_enforce_max_heap_size false
      
    • Lựa chọn 2: Cài đặt WebView Beta từ Cửa hàng Google Play. Phiên bản này phải bằng hoặc cao hơn phiên bản nêu trên.

Tham gia một đối tượng tuỳ chỉnh

Đối tượng tuỳ chỉnh đại diện cho một nhóm người dùng có cùng ý định hoặc mối quan tâm do một ứng dụng của nhà quảng cáo quyết định. Một ứng dụng hoặc SDK có thể sử dụng đối tượng tuỳ chỉnh để cho biết một đối tượng cụ thể, chẳng hạn như ai đó đã chọn sẵn các mặt hàng trong giỏ hàng. Để tạo hoặc tham gia một đối tượng tuỳ chỉnh một cách không đồng bộ, hãy làm như sau:

  1. Khởi động đối tượng CustomAudienceManager.
  2. Tạo đối tượng CustomAudience bằng cách chỉ định các tham số chính, chẳng hạn như gói của người mua và tên có liên quan. Sau đó, hãy khởi tạo đối tượng JoinCustomAudienceRequest bằng đối tượng CustomAudience.
  3. Gọi joinCustomAudience() không đồng bộ với đối tượng JoinCustomAudienceRequest cũng như các đối tượng. ExecutorOutcomeReceiver có liên quan.

Kotlin

val customAudienceManager: CustomAudienceManager =
    context.getSystemService(CustomAudienceManager::class.java)

// Initialize a custom audience.
val audience = CustomAudience.Builder()
    .setBuyer(buyer)
    .setName(name)
    ...
    .build()

// Initialize a custom audience request.
val joinCustomAudienceRequest: JoinCustomAudienceRequest =
    JoinCustomAudienceRequest.Builder().setCustomAudience(audience).build()

// Request to join a custom audience.
customAudienceManager.joinCustomAudience(joinCustomAudienceRequest,
    executor,
    outcomeReceiver)

Java

CustomAudienceManager customAudienceManager =
    context.getSystemService(CustomAudienceManager.class);

// Initialize a custom audience.
CustomAudience audience = new CustomAudience.Builder()
    .setBuyer(buyer)
    .setName(name)
    ...
    .build();

// Initialize a custom audience request.
JoinCustomAudienceRequest joinCustomAudienceRequest =
    new JoinCustomAudienceRequest.Builder().setCustomAudience(audience).build();

// Request to join a custom audience.
customAudienceManager.joinCustomAudience(joinCustomAudienceRequest,
    executor,
    outcomeReceiver);

Tổ hợp các tham số sau sẽ xác định từng đối tượng CustomAudience duy nhất trên thiết bị:

  • owner: Tên gói ứng dụng của chủ sở hữu. Nếu không xác định thì chế độ mặc định sẽ là tên gói của ứng dụng gọi.
  • buyer: Giá trị nhận dạng cho mạng quảng cáo của người mua quản lý quảng cáo cho đối tượng tuỳ chỉnh này.
  • name: Tên hoặc giá trị nhận dạng tuỳ ý cho đối tượng tuỳ chỉnh.

Việc gọi joinCustomAudience() nhiều lần bằng một bản sao khác của CustomAudience sẽ cập nhật mọi CustomAudience hiện có với owner, buyer phù hợp cũng như name tham số. Để bảo vệ quyền riêng tư, kết quả của API không phân biệt giữa lệnh "tạo" và "cập nhật".

Ngoài ra, CustomAudience phải được tạo bằng các tham số bắt buộc sau:

  • URL cập nhật hằng ngày: Một URL loại HTTPS được truy vấn hằng ngày ở chế độ nền để cập nhật các tín hiệu đặt giá thầu của người dùng tuỳ chỉnh, dữ liệu đặt giá thầu đáng tin cậy, URL hiển thị và siêu dữ liệu cho quảng cáo.
  • URL logic đặt giá thầu: Một URL HTTPS được truy vấn trong quá trình lựa chọn quảng cáo để tìm nạp logic đặt giá thầu JavaScript của người mua. Xem các chữ ký hàm bắt buộc trong JavaScript này.

Các tham số không bắt buộc cho đối tượng CustomAudience có thể bao gồm:

  • Thời gian kích hoạt: Đối tượng tuỳ chỉnh chỉ có thể tham gia vào việc lựa chọn quảng cáo và cập nhật hằng ngày sau thời gian kích hoạt. Điều này, chẳng hạn, có thể có ích khi thu hút người dùng cũ.
  • Thời gian hết hạn: Một khoảng thời gian trong tương lai mà sau đó đối tượng tuỳ chỉnh sẽ bị xoá khỏi thiết bị.
  • Tín hiệu đặt giá thầu của người dùng: Một chuỗi JSON chứa các tín hiệu chẳng hạn như ngôn ngữ ưu tiên của người dùng mà logic đặt giá thầu JavaScript của người mua sử dụng để tạo giá thầu trong quá trình lựa chọn quảng cáo. Định dạng này giúp các nền tảng công nghệ quảng cáo sử dụng lại mã trên nhiều nền tảng và giảm bớt mức tiêu thụ trong các hàm JavaScript.
  • Dữ liệu đặt giá thầu đáng tin cậy: URL HTTPS và danh sách các chuỗi được sử dụng trong quá trình lựa chọn quảng cáo tìm nạp tín hiệu đặt giá thầu từ máy chủ khoá/giá trị đáng tin cậy.
  • Quảng cáo: Danh sách các đối tượng AdData tương ứng với các quảng cáo sẽ tham gia lựa chọn quảng cáo. Mỗi đối tượng AdData bao gồm:
    • URL hiển thị: URL HTTPS được truy vấn để hiển thị quảng cáo cuối cùng.
    • Siêu dữ liệu: Đối tượng JSON được chuyển đổi tuần tự dưới dạng một chuỗi chứa thông tin mà người mua sẽ đặt giá thầu theo logic trong quá trình lựa chọn quảng cáo.

Dưới đây là ví dụ về một lệnh tạo đối tượng CustomAudience:

Kotlin

// Minimal initialization of a CustomAudience object
val customAudience: CustomAudience = CustomAudience.Builder()
    .setBuyer(AdTechIdentifier.fromString("my.buyer.domain.name"))
    .setName("example-custom-audience-name")
    .setDailyUpdateUrl(Uri.parse("https://DAILY_UPDATE_URL"))
    .setBiddingLogicUrl(Uri.parse("https://BIDDING_LOGIC_URL"))
    .build()

Java

// Minimal initialization of a CustomAudience object
CustomAudience customAudience = CustomAudience.Builder()
    .setBuyer(AdTechIdentifier.fromString("my.buyer.domain.name"))
    .setName("example-custom-audience-name")
    .setDailyUpdateUrl(Uri.parse("https://DAILY_UPDATE_URL"))
    .setBiddingLogicUrl(Uri.parse("https://BIDDING_LOGIC_URL"))
    .build();

Xử lý kết quả joinCustomAudience()

Phương thức joinCustomAudience() không đồng bộ sử dụng đối tượng OutcomeReceiver để báo hiệu kết quả của lệnh gọi API.

  • Lệnh gọi lại onResult() biểu thị đối tượng tuỳ chỉnh đã được tạo hoặc cập nhật thành công.
  • Lệnh gọi lại onError() biểu thị hai điều kiện có thể xảy ra.

Sau đây là ví dụ về cách xử lý kết quả của joinCustomAudience():

Kotlin

var callback: OutcomeReceiver<Void, AdServicesException> =
    object : OutcomeReceiver<Void, AdServicesException> {
    override fun onResult(result: Void) {
        Log.i("CustomAudience", "Completed joinCustomAudience")
    }

    override fun onError(error: AdServicesException) {
        // Handle error
        Log.e("CustomAudience", "Error executing joinCustomAudience", error)
    }
};

Java

OutcomeReceiver callback = new OutcomeReceiver<Void, AdServicesException>() {
    @Override
    public void onResult(@NonNull Void result) {
        Log.i("CustomAudience", "Completed joinCustomAudience");
    }

    @Override
    public void onError(@NonNull AdServicesException error) {
        // Handle error
        Log.e("CustomAudience", "Error executing joinCustomAudience", error);
    }
};

Rời khỏi một đối tượng tuỳ chỉnh

Nếu người dùng không còn đáp ứng các tiêu chí kinh doanh cho một đối tượng tuỳ chỉnh nhất định, thì ứng dụng hoặc SDK có thể gọi leaveCustomAudience() để xoá đối tượng tuỳ chỉnh khỏi thiết bị. Để xoá CustomAudience dựa trên các tham số riêng biệt, hãy làm như sau:

  1. Khởi động đối tượng CustomAudienceManager.
  2. Khởi động LeaveCustomAudienceRequest bằng owner, buyer của đối tượng tuỳ chỉnh và name. Để tìm hiểu thêm về các trường nhập dữ liệu này, vui lòng đọc bài viết "Tham gia đối tượng tuỳ chỉnh."
  3. Gọi phương thức leaveCustomAudience() không đồng bộ với đối tượng LeaveCustomAudienceRequest cũng như các đối tượng. ExecutorOutcomeReceiver có liên quan.

Kotlin

val customAudienceManager: CustomAudienceManager =
    context.getSystemService(CustomAudienceManager::class.java)

// Initialize a LeaveCustomAudienceRequest
val leaveCustomAudienceRequest: LeaveCustomAudienceRequest =
    JoinCustomAudienceRequest.Builder()
        .setOwnerPackageName(owner)
        .setBuyer(buyer)
        .setName(name)
        .build()

// Request to leave a custom audience
customAudienceManager.leaveCustomAudience(
    leaveCustomAudienceRequest,
    executor,
    outcomeReceiver)

Java

CustomAudienceManager customAudienceManager =
    context.getSystemService(CustomAudienceManager.class);

// Initialize a LeaveCustomAudienceRequest
LeaveCustomAudienceRequest leaveCustomAudienceRequest =
    new JoinCustomAudienceRequest.Builder()
        .setOwner(owner)
        .setBuyer(buyer)
        .setName(name)
        .build();

// Request to leave a custom audience
customAudienceManager.leaveCustomAudience(
    leaveCustomAudienceRequest,
    executor,
    outcomeReceiver);

Tương tự như việc gọi joinCustomAudience(), OutcomeReceiver sẽ ra tín hiệu kết thúc lệnh gọi API. Để bảo vệ quyền riêng tư, kết quả lỗi sẽ không phân biệt giữa lỗi nội bộ và đối số không hợp lệ. Lệnh gọi lại onResult() được gọi khi lệnh gọi API đã hoàn tất, cho dù đối tượng tuỳ chỉnh phù hợp có được xoá thành công hay không.

Chạy lựa chọn quảng cáo

Để chọn quảng cáo bằng FLEDGE, hãy gọi phương thức selectAds():

  1. Khởi động một đối tượng AdSelectionManager.
  2. Tạo một đối tượng AdSelectionConfig.
  3. Gọi phương thức selectAds() không đồng bộ với đối tượng AdSelectionConfig cũng như các đối tượng. ExecutorOutcomeReceiver có liên quan.

Kotlin

val adSelectionManager: AdSelectionManager =
    context.getSystemService(AdSelectionManager::class.java)

// Initialize AdSelectionConfig
val adSelectionConfig: AdSelectionConfig =
        AdSelectionConfig.Builder()
                .setSeller(seller)
                .setDecisionLogicUrl(decisionLogicUrl)
                .setCustomAudienceBuyers(customAudienceBuyers)
                .setAdSelectionSignals(adSelectionSignals)
                .setSellerSignals(sellerSignals)
                .setPerBuyerSignals(perBuyerSignals)
                .build()

// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
    adSelectionConfig,
    executor,
    outcomeReceiver)

Java

AdSelectionManager adSelectionManager =
    context.getSystemService(AdSelectionManager.class);

// Initialize AdSelectionConfig
AdSelectionConfig adSelectionConfig =
        new AdSelectionConfig.Builder()
                .setSeller(seller)
                .setDecisionLogicUrl(decisionLogicUrl)
                .setCustomAudienceBuyers(customAudienceBuyers)
                .setAdSelectionSignals(adSelectionSignals)
                .setSellerSignals(sellerSignals)
                .setPerBuyerSignals(perBuyerSignals)
                .build();

// Run ad selection with AdSelectionConfig
adSelectionManager.selectAds(
    adSelectionConfig,
    executor,
    outcomeReceiver);

Phương thức selectAds() yêu cầu đầu vào AdSelectionConfig, trong đó bạn phải chỉ định các tham số bắt buộc sau:

  • Người bán: Giá trị nhận dạng cho mạng quảng cáo người bán bắt đầu lựa chọn quảng cáo.
  • URL logic quyết định: Một URL HTTPS được truy vấn để lấy logic JavaScript của mạng quảng cáo người bán. Xem các chữ ký hàm bắt buộc trong JavaScript này.
  • Người mua đối tượng tuỳ chỉnh: Danh sách đầy đủ các giá trị nhận dạng cho mạng quảng cáo của người mua được người bán cho phép tham gia vào quá trình lựa chọn quảng cáo. Các giá trị nhận dạng người mua này tương ứng với CustomAudience.getbuyer() trong số các đối tượng tuỳ chỉnh tham gia.

Bạn có thể chỉ định các tham số sau đây để lựa chọn quảng cáo được tuỳ chỉnh nhiều hơn:

  • Tín hiệu lựa chọn quảng cáo: Đối tượng JSON được chuyển đổi tuần tự dưới dạng một chuỗi chứa các tín hiệu do logic đặt giá thầu JavaScript của người mua tìm nạp từ CustomAudience.getBiddingLogicUrl().
  • Tín hiệu người bán: Đối tượng JSON được chuyển đổi tuần tự dưới dạng một chuỗi chứa các tín hiệu do logic quyết định JavaScript tìm nạp của người bán thu thập được từ AdSelectionConfig.getDecisionLogicUrl().
  • Tín hiệu trên mỗi người mua: Bản đồ các đối tượng JSON được chuyển đổi tuần tự dưới dạng một chuỗi chứa các tín hiệu do logic đặt giá thầu JavaScript của người mua cụ thể tìm nạp từ CustomAudience.getBiddingLogicUrl(), được xác định bằng các trường đối tượng tuỳ chỉnh tham gia của người mua.

Sau khi bạn chọn một quảng cáo thì kết quả, giá thầu và tín hiệu sẽ được giữ lại trong máy để báo cáo sau này. Từ lệnh gọi lại ResultReceiver.onResult(), bạn sẽ nhận lại được một AdSelectionResult chứa:

  • URL hiển thị cho quảng cáo giành chiến thắng, được lấy từ AdData.getRenderUrl().
  • Mã nhận dạng lựa chọn quảng cáo dành riêng cho người dùng thiết bị. Mã này được dùng để báo cáo số lượt hiển thị quảng cáo.

Nếu bạn không thể hoàn tất việc lựa chọn quảng cáo vì những lý do chẳng hạn như đối số không hợp lệ, thời gian chờ hoặc mức tiêu thụ tài nguyên quá mức, lệnh gọi lại OutcomeReceiver.onError() sẽ cung cấp AdServicesException với các hành vi dưới đây:

  • Nếu lựa chọn quảng cáo được khởi tạo bằng các đối số không hợp lệ, AdServicesException sẽ cho biết nguyên nhân là IllegalArgumentException.
  • Tất cả các lỗi khác sẽ nhận được AdServicesException với nguyên nhân là do IllegalStateException.

Báo cáo số lượt hiển thị quảng cáo

Sau khi đã chọn một quảng cáo giành chiến thắng trong quy trình lựa chọn quảng cáo, bạn có thể báo cáo lượt hiển thị trở lại nền tảng bên mua và bên bán tham gia bằng phương thức AdSelectionManager.reportImpression(). Để báo cáo một lượt hiển thị quảng cáo, hãy làm như sau:

  1. Khởi động một đối tượng AdSelectionManager.
  2. Tạo đối tượng ReportImpressionRequest bằng mã lựa chọn quảng cáo.
  3. Gọi phương thức reportImpression() không đồng bộ với đối tượng AdSelectionConfig cũng như các đối tượng. ExecutorOutcomeReceiver có liên quan.

Java

AdSelectionManager adSelectionManager =
    context.getSystemService(AdSelectionManager.class);

// Initialize a ReportImpressionRequest
ReportImpressionRequest adSelectionConfig =
        new ReportImpressionRequest.Builder()
                .setAdSelectionId(adSelectionId)
                .setAdSelectionConfig(adSelectionConfig);
                .build();

// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportImpression(
    reportImpressionRequest,
    executor,
    outcomeReceiver);

Kotlin

val adSelectionManager = context.getSystemService(AdSelectionManager::class.java)

// Initialize a ReportImpressionRequest
val adSelectionConfig: ReportImpressionRequest =
    ReportImpressionRequest.Builder()
        .setAdSelectionId(adSelectionId)
        .setAdSelectionConfig(adSelectionConfig);
        .build()

// Request to report the impression with the ReportImpressionRequest
adSelectionManager.reportImpression(
    reportImpressionRequest,
    executor,
    outcomeReceiver)

Khởi động ReportImpressionRequest bằng các tham số bắt buộc sau:

  • Mã lựa chọn quảng cáo: Mã nhận dạng duy nhất cho một người dùng thiết bị xác định một lựa chọn quảng cáo thành công.
  • Cấu hình lựa chọn quảng cáo: Cấu hình tương tự dùng trong lệnh gọi selectAds() được xác định theo mã lựa chọn quảng cáo đã cung cấp.

Phương thức reportImpression() không đồng bộ sử dụng đối tượng OutcomeReceiver để báo hiệu kết quả của lệnh gọi API.

  • Lệnh gọi lại onResult() cho biết liệu lựa chọn quảng cáo đã hoàn tất hay chưa.
  • Lệnh gọi lại onError() cho biết các điều kiện có thể xảy ra sau đây:
    • Nếu lệnh gọi được khởi tạo bằng một đối số đầu vào không hợp lệ, AdServicesException sẽ cho biết nguyên nhân là IllegalArgumentException.
    • Tất cả các lỗi khác sẽ nhận được AdServicesException với nguyên nhân là do IllegalStateException.

Điểm cuối báo cáo lượt hiển thị

API lượt hiển thị báo cáo sẽ gửi yêu cầu HTTPS GET đến các điểm cuối do nền tảng bên bán và bên mua thắng cuộc cung cấp:

Điểm cuối trên nền tảng bên mua:

  • API sẽ sử dụng URL logic đặt giá thầu được chỉ định trong đối tượng tuỳ chỉnh để tìm nạp logic đặt giá thầu JavaScript của người mua.
  • Gọi hàm JavaScript reportResult(). Hàm này dự kiến sẽ trả về URL báo cáo lượt hiển thị của người mua.

Điểm cuối trên nền tảng bên bán:

  • Sử dụng URL logic quyết định được chỉ định trong đối tượng AdSelectionConfig để tìm nạp logic quyết định JavaScript của người bán.
  • Gọi hàm JavaScript reportWin(). Hàm này dự kiến sẽ trả về URL báo cáo lượt hiển thị của người mua.

Báo cáo lượt hiển thị với nỗ lực cao nhất

reportImpression() được thiết kế để mang lại khả năng hoàn thành báo cáo tốt nhất.

Cập nhật hằng ngày ở chế độ nền

Khi tạo một đối tượng tuỳ chỉnh, ứng dụng hoặc SDK của bạn có thể khởi động siêu dữ liệu đối tượng tuỳ chỉnh. Ngoài ra, nền tảng có thể cập nhật các siêu dữ liệu đối tượng tuỳ chỉnh sau đây bằng quy trình cập nhật hằng ngày ở chế độ nền.

  • Tín hiệu đặt giá thầu của người dùng
  • Dữ liệu đặt giá thầu đáng tin cậy
  • Danh sách AdData

Quá trình này truy vấn URL cập nhật hằng ngày được xác định trong đối tượng tuỳ chỉnh và URL có thể trả về phản hồi JSON.

  • Phản hồi JSON có thể chứa bất kỳ trường siêu dữ liệu nào được hỗ trợ cần được cập nhật.
  • Mỗi trường JSON sẽ được xác thực một cách độc lập. Ứng dụng sẽ bỏ qua mọi trường không đúng định dạng, điều này dẫn đến việc không cập nhật trường cụ thể đó trong phản hồi.
  • Phản hồi HTTP trống hoặc đối tượng JSON trống “{}” sẽ dẫn đến việc không cập nhật siêu dữ liệu.
  • Kích thước của thông báo phản hồi phải được giới hạn trong 10 KB.
  • Bạn cần phải có tất cả các URI để sử dụng HTTPS.
  • trusted_bidding_uri phải chia sẻ cùng một ETLD+1 với người mua.

Ví dụ: phản hồi JSON cho tính năng cập nhật hằng ngày ở chế độ nền

{
    "user_bidding_signals" : { ... },  // Valid JSON object
    "trusted_bidding_data" : {
        "trusted_bidding_uri" : 'example-dsp1-key-value-service.com',
        "trusted_bidding_keys" : [ 'campaign123', 'campaign456', ... ]
    },
    'ads' : [
        {
            "render_uri" : 'www.example-dsp1.com/.../campaign123.html',
            'metadata' : { ... }  // Valid JSON object
        },
        {
            "render_uri" : 'www.example-dsp1.com/.../campaign456.html',
            'metadata' : { ... }  // Valid JSON object
        },
        ...
    ]
}

JavaScript cho lựa chọn quảng cáo

Quy trình lựa chọn quảng cáo phối hợp thực thi JavaScript do người mua và người bán cung cấp.

JavaScript do người mua cung cấp được tìm nạp từ URL logic Đặt giá thầu đã chỉ định trong đối tượng tuỳ chỉnh. JavaScript được trả về phải bao gồm các hàm sau:

JavaScript do người bán cung cấp được tìm nạp từ URL logic quyết định được chỉ định trong tham số AdSelectionConfig cho API lựa chọn quảng cáo. JavaScript được trả về phải bao gồm các hàm sau:

generateBid()

function generateBid(
   ad,
   auction_signals,
   per_buyer_signals,
   trusted_bidding_signals,
   contextual_signals,
   user_signals,
   custom_audience_signals) {
  return {'status': 0, 'ad': ad, 'bid': ad.metadata.result };
}

Tham số đầu vào:

  • ad: một đối tượng JSON có var ad = { 'render_url': url, 'metadata': json_metadata } định dạng như sau;
  • auction_signals, per_buyer_signals: các đối tượng JSON được chỉ định trong đối tượng định cấu hình đấu giá
  • custom_audience_signals: đối tượng JSON do nền tảng tạo ra. Định dạng cho đối tượng JSON này là:

    var custom_audience_signals = {
      "owner":"ca_owner",
      "buyer":"ca_buyer",
      "name":"ca_name",
      "activation_time":"ca_activation_time_epoch_ms",
      "expiration_time":"ca_expiration_time_epoch_ms",
      "user_bidding_signals":"ca_user_bidding_signals"
    }
    

    nơi:

    • owner, buyername là chuỗi được lấy từ các thuộc tính có cùng tên của Đối tượng tuỳ chỉnh tham gia vào lựa chọn quảng cáo
    • activation_timeexpiration_time là thời gian kích hoạt và hết hạn của đối tượng tuỳ chỉnh, được biểu thị bằng giây kể từ Thời gian bắt đầu của hệ thống Unix
    • ca_user_bidding_signals là một chuỗi JSON được chỉ định trong trường userBiddingSignals của CustomAudience tại thời điểm tạo
    • trusted_bidding_signals, contextual_signalsuser_signals là các đối tượng JSON. Hiện tại, chúng được truyền dưới dạng các đối tượng trống và sẽ được đưa vào các bản phát hành trong tương lai. Định dạng của chúng không được nền tảng thực thi và do công nghệ quảng cáo quản lý.

Kết quả:

  • ad: là quảng cáo mà giá thầu đề cập. Tập lệnh được phép trả về bản sao của quảng cáo đã nhận được cùng với siêu dữ liệu khác. Thuộc tính render_url của quảng cáo dự kiến sẽ không bị thay đổi.
  • bid: một giá trị số thực đại diện giá trị giá thầu cho quảng cáo này
  • status: một giá trị số nguyên có thể là:
    • 0: để thực thi thành công
    • 1: (hoặc bất kỳ giá trị nào khác 0) trong trường hợp có bất kỳ tín hiệu đầu vào nào không hợp lệ. Trong trường hợp giá trị khác 0 được trả về bằng cách tạo giá thầu, quá trình đặt giá thầu sẽ không hợp lệ đối với tất cả quảng cáo dành cho CA

scoreAd()

function scoreAd(
  ad,
  bid,
  ad_selection_config,
  seller_signals,
  trusted_scoring_signals,
  contextual_signal,
  user_signal,
  custom_audience_signal) {
    return {'status': 0, 'score': score };
}

Tham số đầu vào:

  • ad: vui lòng xem tài liệu về generateBid
  • bid: giá trị giá thầu cho quảng cáo
  • ad_selection_config: một đối tượng JSON đại diện cho tham số AdSelectionConfig của API selectAds. Định dạng là:

    var ad_selection_config = {
      'seller': 'seller',
      'decision_logic_url': 'url_of_decision_logic',
      'custom_audience_buyers': ['buyer1', 'buyer2'],
      'auction_signals': auction_signals,
      'per_buyer_signals': per_buyer_signals,
      'contextual_ads': [ad1, ad2]
    }
    
  • seller_signals: Các đối tượng JSON được đọc từ tham số API sellerSignals AdSelectionConfig

  • trusted_scoring_signal: đọc từ trường adSelectionSignals trong tham số API AdSelectionConfig

  • contextual_signals, user_signals: Đối tượng JSON. Hiện tại, chúng được truyền dưới dạng các đối tượng trống và sẽ được đưa vào các bản phát hành trong tương lai. Định dạng của chúng không được nền tảng thực thi và do công nghệ quảng cáo quản lý.

  • per_buyer_signals: Đối tượng JSON được đọc từ bản đồ perBuyerSignal trong tham số API AdSelectionConfig sử dụng làm khoá cho người mua Đối tượng tuỳ chỉnh hiện tại. Để trống nếu bản đồ không chứa bất kỳ mục nhập nào cho người mua cụ thể.

Kết quả:

  • score: một giá trị số thực đại diện giá trị giá thầu cho quảng cáo này
  • status: một giá trị số nguyên có thể là:
    • 0: để thực thi thành công
    • 1: trong trường hợp customAudienceSignals không hợp lệ
    • 2: trong trường hợp AdSelectionConfig không hợp lệ
    • 3: trong trường hợp có bất kỳ tín hiệu nào khác không hợp lệ
    • Bất kỳ giá trị nào khác 0 đều sẽ gây ra lỗi xử lý, giá trị này sẽ xác định các trường hợp ngoại lệ được gửi

reportResult()

function reportResult(ad_selection_config, render_url, bid, contextual_signals) {
   return {
      'status': status,
      'results': {'signals_for_buyer': signals_for_buyer, 'reporting_url': reporting_url }
   };
}

Tham số đầu vào:

  • ad_selection_config: vui lòng xem tài liệu scoreAds
  • render_url: URL hiển thị của quảng cáo giành chiến thắng
  • bid: giá thầu được cung cấp cho quảng cáo giành chiến thắng
  • contextual_signals: vui lòng xem tài liệu generateBid

Kết quả:

  • status: 0 cho thành công và khác 0 cho trạng thái không thành công
  • results: đối tượng JSON chứa:
    • signals_for_buyer: đối tượng JSON sẽ được truyền đến hàm reportWin
    • reporting_url: URL được nền tảng sử dụng để thông báo lượt hiển thị cho người mua

reportWin()

function reportWin(
   ad_selection_signals,
   per_buyer_signals,
   signals_for_buyer,
   contextual_signals,
   custom_audience_signals) {
   return {'status': 0, 'results': {'reporting_url': reporting_url } };
}

Tham số đầu vào:

  • ad_selection_signals, per_buyer_signals: vui lòng xem tài liệu scoreAds
  • signals_for_buyer: đối tượng JSON do reportResult trả về
  • contextual_signals, custom_audience_signals: vui lòng xem tài liệu generateBid

Kết quả:

  • status: 0 cho thành công và khác 0 cho trạng thái không thành công
  • results: đối tượng JSON chứa:
    • reporting_url: URL được nền tảng sử dụng để thông báo về lượt hiển thị cho người bán

Thử nghiệm

Để giúp bạn làm quen với FLEDGE, chúng tôi đã tạo các ứng dụng mẫu trong Kotlin và Java, có thể tìm thấy trên GitHub.

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

FLEDGE yêu cầu một số JavaScript trong quá trình lựa chọn quảng cáo và báo cáo số lượt hiển thị. Có hai phương thức để cung cấp JavaScript này trong môi trường thử nghiệm:

  • Chạy máy chủ với các điểm cuối HTTPS bắt buộc trả về JavaScript
  • Ghi đè tính năng tìm nạp từ xa bằng cách cung cấp mã cần thiết từ một nguồn cục bộ

Một trong hai cách tiếp cận đều yêu cầu thiết lập một điểm cuối HTTPS để xử lý báo cáo lần hiển thị.

Điểm cuối HTTPS

Để thử nghiệm lựa chọn quảng cáo và báo cáo lượt hiển thị, bạn cần lập 7 điểm cuối HTTPS mà thiết bị thử nghiệm hoặc trình mô phỏng có thể truy cập:

  1. Điểm cuối của người mua phân phát JavaScript logic đặt giá thầu.
  2. Một điểm cuối phân phát các tín hiệu đặt giá thầu.
  3. Điểm cuối của người bán phân phát JavaScript logic quyết định.
  4. Một điểm cuối phân phát tín hiệu tính điểm.
  5. Điểm cuối báo cáo lượt hiển thị của người mua giành được quyền mua.
  6. Điểm cuối báo cáo lượt hiển thị của người bán.
  7. Một điểm cuối phân phát các bản cập nhật hằng ngày cho đối tượng tuỳ chỉnh.

Để thuận tiện, kho lưu trữ GitHub cung cấp mã JavaScript cơ bản cho mục đích thử nghiệm. Phiên bản này cũng bao gồm các định nghĩa dịch vụ OpenAPI có thể được triển khai cho các nền tảng mô phỏng hoặc microservices được hỗ trợ. Để biết thêm thông tin chi tiết, vui lòng tham khảo phần README của dự án.

Ghi đè tính năng tìm nạp từ xa của JavaScript

Bạn có thể dùng tính năng này để thử nghiệm một cách toàn diện. Để ghi đè tính năng tìm nạp từ xa, ứng dụng của bạn phải chạy ở chế độ gỡ lỗi và bật các tuỳ chọn cho nhà phát triển.

Để bật chế độ gỡ lỗi cho ứng dụng của bạn, hãy thêm dòng sau vào thuộc tính ứng dụng trong AndroidManifest.xml:

<application
  android:debuggable="true">

Để xem ví dụ về cách sử dụng các cơ chế ghi đè này, vui lòng xem ứng dụng mẫu FLEDGE trên GitHub.

Bạn cần thêm JavaScript tuỳ chỉnh của riêng mình để xử lý các quy trình lựa chọn quảng cáo, chẳng hạn như chiến lược đặt giá thầu, cách tính điểm và báo cáo. Bạn có thể tìm thấy các ví dụ cơ bản về mã JavaScript xử lý tất cả các yêu cầu bắt buộc trong kho lưu trữ GitHub. Ứng dụng mẫu FLEDGE mô tả cách đọc mã từ tệp đó và chuẩn bị mã để sử dụng làm cơ chế ghi đè.

Bạn có thể ghi đè tìm nạp JavaScript bên bán và bên mua một cách độc lập, mặc dù bạn cần có một điểm cuối HTTPS để phân phát bất kỳ JavaScript nào mà bạn không cung cấp cơ chế ghi đè. Vui lòng xem phần README để biết thông tin chi tiết về cách thiết lập máy chủ xử lý các trường hợp này.

Bạn chỉ có thể ghi đè phương thức tìm nạp JavaScript cho các đối tượng tuỳ chỉnh thuộc gói của mình.

Ghi đè JavaScript của bên bán

Để thiết lập cơ chế ghi đè JavaScript bên bán, hãy thực hiện như được minh hoạ trong ví dụ về mã bên dưới:

  1. Khởi động một đối tượng AdSelectionManager.
  2. Tạo một tham chiếu đến TestAdSelectionManager từ đối tượng AdSelectionManager.
  3. Tạo một đối tượng AdSelectionConfig.
  4. Tạo AddAdSelectionOverrideRequest với đối tượng AdSelectionConfig và một String đại diện cho JavaScript mà bạn định dùng để ghi đè.
  5. Gọi phương thức overrideAdSelectionConfigRemoteInfo() không đồng bộ bằng đối tượng AddAdSelectionOverrideRequest cũng như các đối tượng ExecutorOutcomeReceiver có liên quan.

Kotlin

val testAdSelectionManager: TestAdSelectionManager =
  context.getSystemService(AdSelectionManager::class.java).getTestAdSelectionManager()

// Initialize AdSelectionConfig =
val adSelectionConfig = new AdSelectionConfig.Builder()
    .setSeller(seller)
    .setDecisionLogicUrl(decisionLogicUrl)
    .setCustomAudienceBuyers(customAudienceBuyers)
    .setAdSelectionSignals(adSelectionSignals)
    .setSellerSignals(sellerSignals)
    .setPerBuyerSignals(perBuyerSignals)
    .build()

// Initialize AddAddSelectionOverrideRequest
val request = AddAdSelectionOverrideRequest.Builder()
    .setAdSelectionConfig(adSelectionConfig)
    .setDecisionLogicJs(decisionLogicJS)
    .build()

// Run the call to override the JavaScript for the given AdSelectionConfig
// Note that this only takes effect in apps marked as debuggable
testAdSelectionManager.overrideAdSelectionConfigRemoteInfo(
    request,
    executor,
    outComeReceiver)

Java

TestAdSelectionManager testAdSelectionManager =
  context.getSystemService(AdSelectionManager.class).getTestAdSelectionManager();

// Initialize AdSelectionConfig =
AdSelectionConfig adSelectionConfig = new AdSelectionConfig.Builder()
    .setSeller(seller)
    .setDecisionLogicUrl(decisionLogicUrl)
    .setCustomAudienceBuyers(customAudienceBuyers)
    .setAdSelectionSignals(adSelectionSignals)
    .setSellerSignals(sellerSignals)
    .setPerBuyerSignals(perBuyerSignals)
    .build();

// Initialize AddAddSelectionOverrideRequest
AddAdSelectionOverrideRequest request = AddAdSelectionOverrideRequest.Builder()
    .setAdSelectionConfig(adSelectionConfig)
    .setDecisionLogicJs(decisionLogicJS)
    .build();

// Run the call to override the JavaScript for the given AdSelectionConfig
// Note that this only takes effect in apps marked as debuggable
testAdSelectionManager.overrideAdSelectionConfigRemoteInfo(
    request,
    executor,
    outComeReceiver);

Vui lòng xem mục Chạy lựa chọn quảng cáo để biết thêm thông tin chi tiết về từng trường trong AdSelectionConfig đại diện. Điểm khác biệt chính là decisionLogicUrl có thể được đặt thành giá trị phần giữ chỗ vì hệ thống sẽ bỏ qua giá trị này.

Để ghi đè JavaScript dùng trong quá trình lựa chọn quảng cáo, decisionLogicJs phải chứa các chữ ký hàm của bên bán thích hợp. Để xem ví dụ về cách đọc tệp JavaScript dưới dạng chuỗi, vui lòng xem ứng dụng mẫu FLEDGE trên kho lưu trữ GitHub.

Phương thức overrideAdSelectionConfigRemoteInfo() không đồng bộ sử dụng đối tượng OutcomeReceiver để báo hiệu kết quả của lệnh gọi API.

Lệnh gọi lại onResult() cho biết thao tác ghi đè đã được áp dụng thành công. Các lệnh gọi trong tương lai đến selectAds() sẽ sử dụng bất kỳ quyết định và logic báo cáo nào mà bạn đã truyền vào làm thông tin ghi đè.

Lệnh gọi lại onError() biểu thị hai điều kiện có thể xảy ra.

  • Nếu bạn cố gắng ghi đè các đối số không hợp lệ, thì AdServiceException sẽ chỉ ra nguyên nhân là IllegalArgumentException.
  • Nếu bạn cố gắng ghi đè một ứng dụng không chạy ở chế độ gỡ lỗi khi đã bật các tuỳ chọn cho nhà phát triển, thì AdServiceException sẽ cho biết nguyên nhân là IllegalStateException.

Đặt lại tuỳ chọn ghi đè bên bán

Phần này giả định bạn đã ghi đè JavaScript bên bán, đồng thời bạn có tham chiếu đến TestAdSelectionManagerAdSelectionConfig được sử dụng trong phần trước.

Để đặt lại thông tin ghi đè cho tất cả các đối tượng AdSelectionConfigs:

  1. Hãy gọi phương thức resetAllAdSelectionConfigRemoteOverrides() không đồng bộ bằng đối tượng OutcomeReceiver có liên quan.

Kotlin

// Resets overrides for all AdSelectionConfigs
testAadSelectionManager.resetAllAdSelectionConfigRemoteOverrides(
  outComeReceiver)

Java

// Resets overrides for all AdSelectionConfigs
testAdSelectionManager.resetAllAdSelectionConfigRemoteOverrides(
    outComeReceiver);

Sau khi bạn đặt lại cơ chế ghi đè bên bán, mọi lệnh gọi trong tương lai đến selectAds() sẽ sử dụng bất kỳ decisionLogicUrl nào được lưu trữ trong AdSelectionConfig để cố tìm nạp JavaScript cần thiết.

Nếu lệnh gọi đến resetAllAdSelectionConfigRemoteOverrides() không thành công, lệnh gọi lại OutComeReceiver.onError() sẽ cung cấp một AdServiceException. Nếu bạn cố gắng xoá nội dung ghi đè khi ứng dụng không chạy ở chế độ gỡ lỗi có bật tuỳ chọn dành cho nhà phát triển, thì AdServiceException sẽ cho biết nguyên nhân là IllegalStateException.

Ghi đè JavaScript bên mua

  1. Làm theo các bước để tham gia vào một đối tượng tuỳ chỉnh
  2. Tạo AddCustomAudienceOverrideRequest với chủ sở hữu, người muatên của đối tượng tuỳ chỉnh mà bạn muốn ghi đè, ngoài logic đặt giá thầu và dữ liệu mà bạn muốn sử dụng làm cơ chế ghi đè
  3. Gọi phương thức overrideCustomAudienceRemoteInfo() không đồng bộ với đối tượng AddCustomAudienceOverrideRequest cũng như các đối tượng ExecutorOutcomeReceiver có liên quan.

Kotlin

val testCustomAudienceManager: TestCustomAudienceManager =
  context.getSystemService(CustomAudienceManager::class.java).getTestCustomAudienceManager()

// Join custom audience

// Build the AddCustomAudienceOverrideRequest
val request = AddCustomAudienceOverrideRequest.Builder()
    .setOwner(owner)
    .setBuyer(buyer)
    .setName(name)
    .setBiddingLogicJs(biddingLogicJS)
    .setTrustedBiddingSignals(trustedBiddingSignals)
    .build()

// Run the call to override JavaScript for the given custom audience
testCustomAudienceManager.overrideCustomAudienceRemoteInfo(
    request,
    executor,
    outComeReceiver)

Java

TestCustomAudienceManager testCustomAudienceManager =
  context.getSystemService(CustomAudienceManager.class).getTestCustomAudienceManager();

// Join custom audience

// Build the AddCustomAudienceOverrideRequest
AddCustomAudienceOverrideRequest request =
    AddCustomAudienceOverrideRequest.Builder()
        .setOwner(owner)
        .setBuyer(buyer)
        .setName(name)
        .setBiddingLogicJs(biddingLogicJS)
        .setTrustedBiddingSignals(trustedBiddingSignals)
        .build();

// Run the call to override JavaScript for the given custom audience
testCustomAudienceManager.overrideCustomAudienceRemoteInfo(
    request,
    executor,
    outComeReceiver);

Giá trị đại diện cho chủ sở hữu, người muatên là các giá trị giống nhau, được dùng để tạo đối tượng tuỳ chỉnh. Tìm hiểu thêm về các trường này.

Ngoài ra, bạn có thể chỉ định hai tham số bổ sung:

  • biddingLogicJs: JavaScript chứa logic của người mua sẽ được sử dụng trong quá trình lựa chọn quảng cáo. Xem các chữ ký hàm bắt buộc trong JavaScript này.
  • trustedBiddingSignals: Các tín hiệu đặt giá thầu sẽ được sử dụng trong quá trình lựa chọn quảng cáo. Đối với mục đích thử nghiệm, đây có thể là một chuỗi trống.

Phương thức overrideCustomAudienceRemoteInfo() không đồng bộ sử dụng đối tượng OutcomeReceiver để cho biết kết quả của lệnh gọi API.

Lệnh gọi lại onResult() cho biết thao tác ghi đè đã được áp dụng thành công. Các lệnh gọi trong tương lai tới selectAds() sẽ sử dụng bất kỳ logic báo cáo và đặt giá thầu nào mà bạn đã truyền vào làm thông tin ghi đè.

Lệnh gọi lại onError() biểu thị hai điều kiện có thể xảy ra.

  • Nếu bạn cố gắng ghi đè các đối số không hợp lệ, thì AdServiceException sẽ chỉ ra nguyên nhân là IllegalArgumentException.
  • Nếu bạn cố gắng ghi đè một ứng dụng không chạy ở chế độ gỡ lỗi khi đã bật các tuỳ chọn cho nhà phát triển, thì AdServiceException sẽ cho biết nguyên nhân là IllegalStateException.

Đặt lại cơ chế ghi đè bên mua

Phần này giả định bạn đã ghi đè JavaScript bên mua, đồng thời bạn có tham chiếu đến TestCustomAudienceManager được sử dụng trong phần trước.

Cách đặt lại cơ chế ghi đè cho tất cả các đối tượng tuỳ chỉnh:

  1. Hãy gọi phương thức resetAllCustomAudienceOverrides() không đồng bộ với các đối tượng ExecutorOutcomeReceiver có liên quan.

Kotlin

// Resets overrides for all custom audiences
testCustomAudienceManager.resetCustomAudienceRemoteInfoOverride(
    executor,
    outComeReceiver)

Java

// Resets overrides for all custom audiences
testCustomAudienceManager.resetCustomAudienceRemoteInfoOverride(
    executor,
    outComeReceiver)

Sau khi bạn đặt lại cơ chế ghi đè bên mua, mọi lệnh gọi trong tương lai tới selectAds() sẽ sử dụng bất kỳ biddingLogicUrltrustedBiddingData nào được lưu trữ trong CustomAudience để cố tìm nạp JavaScript cần thiết.

Nếu lệnh gọi đến resetCustomAudienceRemoteInfoOverride() không thành công, lệnh gọi lại OutComeReceiver.onError() sẽ cung cấp một AdServiceException. Nếu bạn cố gắng xoá nội dung ghi đè khi ứng dụng không chạy ở chế độ gỡ lỗi có bật tuỳ chọn dành cho nhà phát triển, thì AdServiceException sẽ cho biết nguyên nhân là IllegalStateException.

Thiết lập máy chủ báo cáo

Khi sử dụng tính năng ghi đè tìm nạp từ xa, bạn vẫn cần thiết lập một máy chủ mà thiết bị hoặc trình mô phỏng của bạn có thể truy cập để phản hồi các sự kiện báo cáo. Một điểm cuối đơn giản có thể trả về 200 mã phản hồi là đủ để thử nghiệm. Kho lưu trữ GitHub bao gồm các định nghĩa dịch vụ OpenAPI có thể được triển khai cho một nền tảng mô phỏng hoặc microservices được hỗ trợ. Để biết thêm thông tin chi tiết, vui lòng tham khảo tệp README của dự án.

Khi tìm các định nghĩa OpenAPI, hãy tìm tệp reporting-server.json. Tệp này chứa một điểm cuối đơn giản có thể trả về 200 mã, đại diện cho mã phản hồi HTTP. Điểm cuối này được sử dụng trong selectAds() và báo hiệu cho FLEDGE về việc báo cáo lượt hiển thị đã hoàn tất thành công.

Hàm để thử nghiệm

  • Thực hiện việc tham gia/rời khỏi và thiết lập đối tượng tuỳ chỉnh dựa trên các thao tác trước đó của người dùng.
  • Thực hiện việc bắt đầu lựa chọn quảng cáo trên thiết bị thông qua JavaScript được lưu trữ từ xa.
  • Quan sát cách ứng dụng liên kết với các tuỳ chọn cài đặt đối tượng tuỳ chỉnh có thể ảnh hưởng đến kết quả chọn quảng cáo.
  • Thực hiện việc báo cáo hiển thị sau khi lựa chọn quảng cáo.

Các điểm hạn chế

Bảng sau đây liệt kê các giới hạn đối với việc xử lý FLEDGE. Để biết các tính năng đang được phát triển, hãy đọc ghi chú phát hành.

Thành phần Mô tả giới hạn Giá trị giới hạn
Đối tượng tuỳ chỉnh (CA) Số lượng quảng cáo tối đa cho mỗi CA 100
Số CA tối đa trong mỗi ứng dụng 1000
Số lượng ứng dụng tối đa có thể tạo một CA 1000
Thời gian hết hạn tối đa của một CA trong thời gian kích hoạt 60 ngày
Số CA tối đa trên thiết bị 4000
Kích thước tối đa của tên CA 200 byte
Kích thước tối đa của dữ liệu đặt giá thầu đáng tin cậy 10 KB
Kích thước tối đa của các tín hiệu đặt giá thầu của người dùng 10 KB
Cước gọi tối đa cho leaveCustomAudience trên mỗi người mua 1/giây
Cước gọi tối đa cho joinCustomAudience trên mỗi người mua TBD (Chưa xác định)
Tìm nạp trong nền CA Hết thời gian kết nối 5 giây
Hết thời gian chờ đọc HTTP 30 giây
Tổng kích thước tải xuống tối đa 10 KB
Thời lượng tối đa của một lần lặp tìm nạp 5 phút
Lựa chọn quảng cáo Số người mua tối đa TBD (Chưa xác định)
Số CA tối đa trên mỗi người mua TBD (Chưa xác định)
Số quảng cáo tối đa trong một phiên đấu giá TBD (Chưa xác định)
Hết thời gian kết nối 5 giây
Thời gian thực thi tối đa của `AdSelection` tổng thể 2 giây
Thời gian thực thi tối đa của giá thầu trên mỗi CA trong `AdSelection` 1 giây
Thời gian thực thi tối đa để tính điểm trong `AdSelection` 1 giây
Thời gian thực thi tối đa cho mỗi người mua trong `AdSelection` TBD (Chưa xác định)
Kích thước tối đa của tín hiệu lựa chọn quảng cáo/người bán/mỗi người mua TBD (Chưa xác định)
Kích thước tối đa của tập lệnh người bán/người mua TBD (Chưa xác định)
Cước gọi tối đa cho `selectAds` 1 QPS (số lần truy vấn mỗi giây)
Báo cáo lượt hiển thị Khoảng thời gian tối thiểu trước khi xoá lựa chọn quảng cáo khỏi dữ liệu lưu trữ 24 giờ
Số lựa chọn quảng cáo được lưu trữ tối đa TBD (Chưa xác định)
Kích thước tối đa của URL đầu ra trong báo cáo TBD (Chưa xác định)
Thời gian tối đa để báo cáo lượt hiển thị TBD (Chưa xác định)
Số lần thử lại tối đa cho các lệnh gọi thông báo TBD (Chưa xác định)
Cước gọi tối đa cho `reportImpression` 1 QPS (số lần truy vấn mỗi giây)
Quảng cáo Kích thước tối đa của quảng cáo 10 KB đối với CA/TBD cho ngữ cảnh
URL Độ dài tối đa của chuỗi URL bất kỳ được lấy làm dữ liệu đầu vào TBD (Chưa xác định)
JavaScript Thời gian thực thi tối đa 1 giây để đặt giá thầu và tính điểm cho báo cáo lượt hiển thị
Bộ nhớ tối đa được sử dụng TBD (Chưa xác định)

Báo cáo lỗi và các vấn đề

Phản hồi của bạn có vai trò quan trọng trong Hộp cát về quyền riêng tư trên Android! Hãy cho chúng tôi biết mọi vấn đề bạn hoặc ý tưởng để cải thiện Hộp cát về quyền riêng tư trên Android.