Participar da delegação de público-alvo personalizado com a Protected Audience

A API fetchAndJoinCustomAudience permite que os compradores deleguem a participação em um público-alvo personalizado aproveitando a presença no dispositivo de MMPs ou SSPs parceiros.

Informações gerais

Uma visão geral de como isso funciona é que o autor da chamada no dispositivo (seja um SDK de MMP ou SSP) cria um fetchAndJoinCustomAudienceRequest semelhante a este:

Kotlin

/**
 * @param fetchUri The URL to retrieve the CA from.
 * (optional)@param name The name of the CA to join.
 * (optional)@param activationTime The time when the CA will activate.
 * (optional)@param expirationTime The time when the CA will expire,
    must be a time in the future otherwise this will fail
 * (optional)@param userBiddingSignals The user bidding signals used at auction.
*/

val request = FetchAndJoinCustomAudienceRequest.Builder(fetchUri)
    .setName(name)
    .setActivationTime(activationTime)
    .setExpirationTime(expirationTime)
    .setUserBiddingSignals(userBiddingSignals)
    .build()

Java

/**
 * @param fetchUri The URL to retrieve the CA from.
 * (optional)@param name The name of the CA to join.
 * (optional)@param activationTime The time when the CA will activate.
 * (optional)@param expirationTime The time when the CA will expire,
    must be a time in the future otherwise this will fail
 * (optional)@param userBiddingSignals The user bidding signals used at auction.
*/

FetchAndJoinCustomAudienceRequest request =
 new FetchAndJoinCustomAudienceRequest.Builder(fetchUri)
  .setName(name) //Optional
  .setActivationTime(activationTime) //Optional
  .setExpirationTime(expirationTime) //Optional
  .setUserBiddingSignals(userBiddingSignals) //Optional
  .build();

Uma observação importante sobre todos os parâmetros opcionais é que, se eles forem definidos dentro da solicitação de busca, os dados não poderão ser substituídos pelo que for retornado do comprador, proporcionando ao autor da chamada no dispositivo mais controles sobre qual público-alvo personalizado é mantido.

O fetchUri precisa apontar para um endpoint do servidor operado pelo comprador, que vai retornar um objeto JSON de público-alvo personalizado que corresponda ao formato mostrado aqui:

//Return a 200 response with data matching the format of the following in the body
{
  "daily_update_uri": "https://js.example.com/bidding/daily",
  "bidding_logic_uri": "https://js.example.com/bidding",
  "user_bidding_signals": {
    "valid": true,
    "arbitrary": "yes"
  },
  "trusted_bidding_data": {
    "trusted_bidding_uri": "https://js.example.com/bidding/trusted",
    "trusted_bidding_keys": [
      "key1",
      "key2"
    ]
  },
  "ads": [
    {
      "render_uri": "https://js.example.com/render/fetch_and_join_ad1",
      "metadata": {
        "valid": 1
      }
    },
    {
      "render_uri": "https://js.example.com/render/fetch_and_join_ad2",
      "metadata": {
        "valid": 2
      }
    }
  ]
}

Mais informações sobre como isso é resolvido no lado da API podem ser encontradas na Proposta de design para a delegação de ACs.

Testes

Depois de implementar a chamada de busca no código do cliente e configurar um endpoint no lado da DSP para retornar os dados de público-alvo personalizado, é possível testar a delegação de participação em um público-alvo personalizado. Antes de executar o app, será necessário executar o seguinte comando para abrir a interface e ativar o Sandbox de privacidade:

adb shell am start -n com.google.android.adservices.api/com.android.adservices.ui.settings.activities.AdServicesSettingsMainActivity

Quando a interface aparecer, ative o Sandbox de privacidade e execute os seguintes comandos adb para concluir a configuração do dispositivo para testes:

adb shell device_config set_sync_disabled_for_tests persistent
adb shell device_config put adservices ppapi_app_signature_allow_list \"\*\"
adb shell device_config put adservices ppapi_app_allow_list \"\*\"
adb shell device_config put adservices adservice_system_service_enabled true
adb shell device_config put adservices adservice_enabled true
adb shell device_config put adservices adservice_enable_status true
adb shell device_config put adservices global_kill_switch false
adb shell device_config put adservices fledge_js_isolate_enforce_max_heap_size false
adb shell device_config put adservices fledge_custom_audience_service_kill_switch false
adb shell device_config put adservices fledge_select_ads_kill_switch false
adb shell device_config put adservices adid_kill_switch false
adb shell setprop debug.adservices.disable_fledge_enrollment_check true
adb shell device_config put adservices fledge_fetch_custom_audience_enabled true

Depois de executar esses comandos, você poderá começar a fazer chamadas usando a API Fetch.

Para conferir um exemplo desse fluxo, as chamadas de busca foram adicionadas à ramificação da prévia para desenvolvedores do repositório de exemplos do Sandbox de privacidade no GitHub (link em inglês).