Khi bạn đọc tài liệu Hộp cát về quyền riêng tư trên Android, hãy sử dụng nút Bản dùng thử cho nhà phát triển hoặc Beta để chọn phiên bản chương trình bạn đang làm việc, vì hướng dẫn có thể khác nhau.
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 những API này để phân phối 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 một đố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:
- Quản lý đối tượng tuỳ chỉnh
- Thiết lập và chạy lựa chọn quảng cáo trên thiết bị
- 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:
- 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.
- 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.
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 \"*\"
Đư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" />
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" />
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>
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
selectAds
vàreportImpression
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:
- Khởi động đối tượng
CustomAudienceManager
. - 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ượngJoinCustomAudienceRequest
bằng đối tượngCustomAudience
. - Gọi
joinCustomAudience()
không đồng bộ với đối tượngJoinCustomAudienceRequest
cũng như các đối tượngExecutor
vàOutcomeReceiver
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 riêng từng đối tượng CustomAudience
owner
: Tên gói của ứng dụng chủ sở hữu. Giá trị này được ngầm đặt thành tên gói của ứng dụng gọi.buyer
: Giá trị nhận dạng của 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 thuộc đối tượ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ượngAdData
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.- Nếu
JoinCustomAudienceRequest
được khởi tạo bằng các đối số không hợp lệ, thìAdServicesException
sẽ chỉ ra 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à doIllegalStateException
.
- Nếu
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:
- Khởi tạo đối tượng
CustomAudienceManager
. - Khởi tạo
LeaveCustomAudienceRequest
bằngname
vàbuyer
của đối tượng tuỳ chỉnh. Để tìm hiểu thêm về các trường nhập dữ liệu này, vui lòng đọc phần "Tham gia một đối tượng tuỳ chỉnh". - Gọi phương thức
leaveCustomAudience()
không đồng bộ với đối tượngLeaveCustomAudienceRequest
cũng như các đối tượng.Executor
vàOutcomeReceiver
có liên quan.
Kotlin
val customAudienceManager: CustomAudienceManager =
context.getSystemService(CustomAudienceManager::class.java)
// Initialize a LeaveCustomAudienceRequest
val leaveCustomAudienceRequest: LeaveCustomAudienceRequest =
JoinCustomAudienceRequest.Builder()
.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()
.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()
:
- Khởi động một đối tượng
AdSelectionManager
. - Tạo một đối tượng
AdSelectionConfig
. - Gọi phương thức
selectAds()
không đồng bộ với đối tượngAdSelectionConfig
cũng như các đối tượng.Executor
vàOutcomeReceiver
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 chuỗi chứa các tín hiệu do logic đặt giá thầu của người mua cụ thể sử dụng mà JavaScript 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. Thông qua lệnh gọi lại OutcomeReceiver.onResult()
, bạn sẽ nhận lại AdSelectionOutcome
chứa:
- URL hiển thị cho quảng cáo 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 như đối số không hợp lệ, hết thời gian chờ hoặc sử dụng tài nguyên quá mức, thì lệnh gọi lại OutcomeReceiver.onError()
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
cho biết nguyên nhân làIllegalArgumentException
. - Tất cả các lỗi khác nhận được
AdServicesException
với nguyên nhân là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 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:
- Khởi động một đối tượng
AdSelectionManager
. - Tạo đối tượng
ReportImpressionRequest
bằng mã lựa chọn quảng cáo. - Gọi phương thức
reportImpression()
không đồng bộ với đối tượngAdSelectionConfig
cũng như các đối tượng.Executor
vàOutcomeReceiver
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 nhận được
AdServicesException
với nguyên nhân làIllegalStateException
.
- 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ệ,
Điểm cuối của 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ó varad = { '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, buyer
vàname
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 quá trình lựa chọn quảng cáoactivation_time
vàexpiration_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 Unixca_user_bidding_signals
là một chuỗi JSON được chỉ định trong trườnguserBiddingSignals
củaCustomAudience
tại thời điểm tạotrusted_bidding_signals, contextual_signals
vàuser_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ínhrender_url
của quảng cáo dự kiến sẽ không bị thay đổi.bid
: một giá trị số thực biểu thị giá trị giá thầu cho quảng cáo nàystatus
: 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áoad_selection_config
: một đối tượng JSON đại diện cho tham sốAdSelectionConfig
của APIselectAds
. Đị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ố APIsellerSignals
AdSelectionConfig
trusted_scoring_signal
: đọc từ trườngadSelectionSignals
trong tham số APIAdSelectionConfig
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ố APIAdSelectionConfig
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ị điểm số cho quảng cáo nàystatus
: 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 gây ra lỗi xử lý, giá trị này 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ệuscoreAds
render_url
: URL hiển thị của quảng cáo giành chiến thắngbid
: giá thầu được cung cấp cho quảng cáo giành chiến thắngcontextual_signals
: vui lòng xem tài liệugenerateBid
Kết quả:
status: 0
cho thành công và khác 0 cho trạng thái không thành côngresults
: đối tượng JSON chứa:signals_for_buyer
: đối tượng JSON được truyền đến hàmreportWin
reporting_url
: URL được nền tảng sử dụng để thông báo về 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 choscoreAd
signals_for_buyer
: đối tượng JSON doreportResult
trả vềcontextual_signals, custom_audience_signals
: vui lòng xem tài liệugenerateBid
Kết quả:
status: 0
cho thành công và khác 0 cho trạng thái không thành côngresults
: đố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
Kiểm thử
Để 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ượt hiển thị.
Điểm cuối HTTPS
Để kiểm thử 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ị kiểm thử hoặc trình mô phỏng có thể truy cập:
- Điểm cuối của người mua phân phát JavaScript logic đặt giá thầu.
- Một điểm cuối phân phát các tín hiệu đặt giá thầu.
- Điểm cuối của người bán phân phát JavaScript logic quyết định.
- Một điểm cuối phân phát tín hiệu tính điểm.
- Điểm cuối báo cáo lượt hiển thị của người mua giành được quyền mua.
- Điểm cuối báo cáo lượt hiển thị của người bán.
- 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 nền tảng vi dịch vụ đượ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:
- Khởi động một đối tượng
AdSelectionManager
. - Tạo một tham chiếu đến
TestAdSelectionManager
từ đối tượngAdSelectionManager
. - Tạo một đối tượng
AdSelectionConfig
. - Tạo
AddAdSelectionOverrideRequest
với đối tượngAdSelectionConfig
và mộtString
đại diện cho JavaScript mà bạn định dùng để ghi đè. - Gọi phương thức
overrideAdSelectionConfigRemoteInfo()
không đồng bộ bằng đối tượngAddAdSelectionOverrideRequest
cũng như các đối tượngExecutor
vàOutcomeReceiver
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ẽ cho biết 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 TestAdSelectionManager
và
AdSelectionConfig
đượ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
:
- Hãy gọi phương thức
resetAllAdSelectionConfigRemoteOverrides()
không đồng bộ bằng đối tượngOutcomeReceiver
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, các lệnh gọi đế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
- Làm theo các bước để tham gia vào một đối tượng tuỳ chỉnh
- Tạo
AddCustomAudienceOverrideRequest
với người mua và tê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 đè - Gọi phương thức
overrideCustomAudienceRemoteInfo()
không đồng bộ bằng đối tượngAddCustomAudienceOverrideRequest
cũng như các đối tượngExecutor
vàOutcomeReceiver
có liên quan.
Kotlin
val testCustomAudienceManager: TestCustomAudienceManager =
context.getSystemService(CustomAudienceManager::class.java).getTestCustomAudienceManager()
// Join custom audience
// Build the AddCustomAudienceOverrideRequest
val request = AddCustomAudienceOverrideRequest.Builder()
.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()
.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ị biểu thị người mua và tên là các giá trị giống nhau, 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 đượ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 tiếp theo 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ẽ cho biết 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:
- Hãy gọi phương thức
resetAllCustomAudienceOverrides()
không đồng bộ với các đối tượngExecutor
vàOutcomeReceiver
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, các lệnh gọi tiếp theo tới selectAds()
sẽ sử dụng bất kỳ biddingLogicUrl
và trustedBiddingData
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 nền tảng dịch vụ vi mô đượ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.
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.
Chức năng cần kiểm thử
- Thực hiện việc tham gia hoặc 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 chế độ 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. Các giới hạn đã trình bày có thể thay đổi dựa trên ý kiến phản hồi. Để 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 | |
Độ trễ tối đa tại thời điểm kích hoạt CA trong thời gian tạo | 60 ngày | |
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 URI tìm nạp hằng ngày | 400 byte | |
Kích thước tối đa của URI logic đặt giá thầu | 400 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 |
1/giây | |
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 | |
Số CA tối đa được cập nhật trên mỗi công việc | 1000 | |
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) | |
Thời gian chờ kết nối ban đầu | 5 giây | |
Thời gian chờ đọc kết nối | 5 giây | |
Thời gian thực thi tối đa của toàn bộ AdSelection |
10 giây | |
Thời gian thực thi tối đa của giá thầu trên mỗi CA trong AdSelection |
5 giây | |
Thời gian thực thi tối đa để tính điểm trong AdSelection |
5 giây | |
Thời gian thực thi tối đa trên 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) | |
Tốc độ lệnh 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) | |
Hết thời gian kết nối | 5 giây | |
Tổng thời gian thực thi tối đa cho reportImpression |
2 giây | |
Tốc độ lệnh gọi tối đa cho reportImpressions |
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 danh sách quảng cáo | 10 KB chung cho tất cả AdData trong một CA duy nhất 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 đã sử dụng | 10 MB |
Báo cáo lỗi và 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.