通常,透過應用程式安裝廣告提高新的行動應用程式的安裝量。為了盡可能提高廣告支出的投資報酬率,建議您不要在已安裝相同應用程式的裝置上放送安裝該應用程式的廣告。在本提案中,我們將這項做法稱為「應用程式安裝廣告篩選功能」。
本提案將介紹 Android 上的 FLEDGE 如何依據保護隱私的方式支援內容相關廣告篩選功能,特別是應用程式安裝廣告篩選功能。如要使用,裝置上的應用程式必須明確選擇使用應用程式安裝廣告篩選功能。選擇廣告時,系統會根據廣告技術已知在裝置上安裝的應用程式清單來篩選廣告候選。系統只會在廣告選擇流程中顯示已安裝的應用程式清單,並且依賴買方平台指出應根據裝置上是否安裝有某個應用程式來篩選特定廣告
設定應用程式安裝廣告篩選功能的步驟如下:
步驟 1:註冊應用程式以使用應用程式安裝廣告篩選功能
若要選擇使用應用程式安裝廣告篩選功能,應用程式開發人員應藉助廣告技術買方 eTLD+1 清單,從其應用程式或廣告技術 SDK 叫用 registerForAdFiltering
應用程式註冊 API。如此一來,列入名單中的買方 (僅限這些買方) 就能根據應用程式的安裝狀態,直接或透過廣告技術的 SDK 篩選廣告。註冊後,應用程式開發人員可完全掌控是否要讓應用程式使用應用程式安裝廣告篩選功能。
void registerForAdFiltering(List<AdTechIdentifier> buyers);
步驟 2:要求篩除應用程式安裝廣告
考慮將廣告用於出價時,買方可以選擇根據應用的安裝狀態標記要篩除的廣告。爲此,請在應用程式的中繼資料中加入應用程式的套件名稱。應用程式安裝廣告篩選要求是填入 FLEDGE 競價程序的廣告資料的一部分。系統會根據這是內容相關廣告還是再行銷廣告,建立不同的廣告資料。
針對內容相關廣告用途 (應用程式安裝廣告篩選功能的主要用途),篩選資料包含在廣告資料中,而買方在 FLEDGE 之外回應內容相關出價時,會向賣方提供這些資料。FLEDGE 預期這些篩選資訊會在內容相關廣告回應中傳回,就像任何其他廣告專用的中繼資料一樣。
針對再行銷廣告用途,FLEDGE 預期篩選資訊會包含在自訂目標對象中。有 2 個機會包含這些資訊:加入目標對象時,以及在更新目標對象程序中擷取新的目標對象資料時
用來篩除應用程式安裝廣告的要求應在 AdData
JSON 物件中如下所示:
{
"render_uri": "https://..",
"metadata": {..},
"filters": {
"app_install": {
"app_package_names": ["app1.package", "app2.package"]
}
}
}
注意事項:您可以一次篩除多個應用程式的應用程式安裝廣告。方法很簡單,只要列出應評估的所有應用程式的套件名稱即可。如果在應用程式安裝清單中發現任一套件,系統就會篩除廣告。
我們目前正致力於啟用內容相關廣告的加密和/或簽署功能,並希望您針對這個主題提出意見回饋。
步驟 3:在選擇廣告期間篩除應用程式安裝廣告
在廣告請求中,買方可以透過篩選資訊將多則廣告傳回賣方,以便篩除已安裝應用程式的廣告。要求賣方將篩選信息做為 adData
欄位中 selectAds
函式設定的一部分傳遞篩選資訊。Android 預期的訊息格式與下方類似。請注意,在內容相關廣告中,系統會將相關廣告資料傳送至函式,因爲裝置上並未安裝該應用程式;而在再行銷廣告中,廣告資料是自訂目標對象的資料。
AdData myAdData = new AdData.Builder()
.setRenderUri(Uri.parse("https://.."))
.setMetadata("{...}")
.setFilters(new AdFilters.Builder()
.setAppInstalledFilter(new AppInstalledFilter.Builder()
.setPackageNames(ImmutableList.of("app1.package", "app2.package"))
.build())
.build())
.build();
AdSelectionConfig myAdSelectionConfig = new AdSelectionConfig.Builder()
.setSeller(AdTechIdentifier.fromString("example-ssp1.com"))
.setDecisionLogicUri(Uri.parse("https://..."))
...
.setContextualAds(ImmutableList.of(new ContextualAd.Builder()
.setBuyer(AdTechIdentifier.fromString("example.com"))
.setReportingUri("https://example.com/reporting")
.setBid(20)
// myAdData could be taken from the JSON above
.setAd(myAdData)
.build()))
.build();
// Invoke ad services API to initiate ad selection workflow.
selectAds(myAdSelectionConfig);
在 selectAds
API 中繼續進行篩選。如果訊息中指定的應用程式與廣告技術買方特定應用程式安裝清單中的應用程式一致,FLEDGE 就會篩除該廣告。可能帶來下列兩種結果:
- 無法在清單中找到應用程式,代表並未安裝和開啟該應用程式。
- 在清單中找到應用程式,表示已安裝並開啟該應用程式。
如果 FLEDGE 偵測到某個應用程式已安裝,則系統會將競價用於執行 scoreAds
的廣告從清單中排除。
使用內容相關廣告時的注意事項
藉助應用程式安裝廣告篩選功能,可讓 FLEDGE API 開始支援內容相關廣告篩選功能。假如競價同時包含內容相關廣告和再行銷廣告,或完全由內容相關廣告組成,您就必須指定幾個條件。
執行
selectAd
競價時,買方可選擇傳遞ContextualAd
物件清單。這些物件會包含廣告買方的 eTLD+1、廣告出價、指向廣告報表邏輯的網址,以及包含實際廣告素材網址的AdData
。請注意,AdData
格式可用於內容相關廣告和再行銷廣告。競價程序開始時,系統會根據使用者看到的應用程式來篩選內容相關廣告和再行銷廣告。接著,系統將決定所有再行銷廣告的出價值,並使用提供的
scoreAds
函式對再行銷廣告和內容相關廣告進行評分。得分最高的廣告即為競價勝出者。請注意,即使沒有再行銷廣告,這項程序仍會運作。如果內容相關廣告為競價勝出者,並且應用程式觸發了曝光報表,FLEDGE 就會從內容相關廣告資料中包含的報表網址,下載並執行名爲
reportWin()
的 JS 函式。這與再行銷廣告為競價勝出者時完成報表的方式類似。JavaScript 報表功能範例:
function reportWin(ad_selection_signals, per_buyer_signals, signals_for_buyer, contextual_signals) { let reporting_address = 'https://reporting.example.com'; return {'status': 0, 'results': {'reporting_uri': reporting_address + '?some_signal=' + per_buyer_signals.some_signal} }; }