Android TV 廣告程式庫提供使用者介面,方便使用者控制 Google TV 上的廣告體驗。本指南說明如何將 Android TV 廣告程式庫整合至現有的 PAL Android TV 應用程式。
必要條件
- 完成入門指南
- Android PAL SDK 20.0.1 以上版本
廣告資訊公開與控制選項
Android TV 廣告程式庫提供功能,可在廣告插播期間呈現廣告透明度和控制項功能 (AT&C)。當使用者在串流廣告期間與「Google 電視廣告」圖示互動時,TV 啟動器應用程式會將 AT&C 選單以系統重疊方式呈現,顯示短網址、快速回應 (QR code) 以便進一步瞭解廣告,以及停止顯示相同廣告的按鈕。
Google 電視廣告圖示應採用與 AdChoices 圖示相同的 VAST 圖示算繪規定。
點選「Google 電視廣告」圖示後,系統會向使用者顯示「關於這則廣告」 (ATA) 網頁的短網址和 QR code。
整合 Android TV 廣告程式庫
匯入 ATV 廣告程式庫
將 Android TV 廣告程式庫的以下依附元件新增至應用程式層級 Gradle 檔案 (通常為 app/build.gradle
):
dependencies {
...
implementation 'com.google.android.tv:tv-ads:1.0.1'
}
宣告 AD_ID
權限
為了讓 Android TV 廣告程式庫存取 Advertising ID,請在 AndroidManifest.xml
中加入以下程式碼行:
<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
與 PAL SDK 整合
Android TV 廣告程式庫會使用 SignalCollector
類別,在裝置上收集要求廣告所需的 ID。PAL SDK 會使用 NonceRequest.Builder
類別讀取這些信號,並建立 Nonce。
將粗體行新增至 PAL 應用程式,設定 Android TV 廣告程式庫以搭配 PAL SDK 運作:
public class VideoPlayerActivity extends Activity {
...
private SignalCollector signalCollector;
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
signalCollector = new SignalCollector();
...
}
...
public generateNonceForAdRequest() {
...
NonceRequest nonceRequest = NonceRequest.builder()
...
.platformSignalCollector(signalCollector)
.build();
...
}
剖析 VAST 回應
當廣告請求使用 Android TV 廣告媒體庫的信號時,Google 廣告伺服器會傳送 VAST 回應,其中包含 <Icon>
代碼,以及一或多個 <IconClickFallbackImage>
子項,用於不同的螢幕解析度。請按照剖析 VAST XML 回應的操作說明剖析 VAST。
以下是 <Icon>
標記及其子項的 VAST 4.2 結構範例,相關資料以 粗體顯示。
<?xml version="1.0" encoding="UTF-8"?>
<VAST version="4.2">
<Ad id="123456">
<Wrapper>
...
<Creatives>
...
<Creative id="7891011" AdID="ABCD123456EF" sequence="1">
...
<Linear>
...
<Icons>
...
<Icon program="TV Ads by Google" width="106" height="20" xPosition="24" yPosition="20"
duration="00:00:10" offset="00:00:00" apiFramework="VAST" altText="Why This Ad?">
<StaticResource creativeType="image/png">
<![CDATA[https://imasdk.googleapis.com/formats/ata/gtv_ads_badge.png]]>
</StaticResource>
<IconClicks>
...
<IconClickThrough><![CDATA[https://myadcenter.google.com]]></IconClickThrough>
<IconClickFallbackImages>
<IconClickFallbackImage width="950" height="600">
<AltText>Sample alt text</AltText>
<StaticResource creativeType="image/png">
<![CDATA[https://google.com?atvatc=1&atvatcmd=Eg8KDQoLbXV0ZV9hZF91cmwKAgoA]]>
</StaticResource>
</IconClickFallbackImage>
...
</IconClickFallbackImages>
</IconClicks>
</Icon>
...
</Icons>
...
</Linear>
...
</Creative>
...
</Creatives>
...
</Wrapper>
...
</Ad>
</VAST>
同樣地,您也可以使用 PAL 指南中的 VAST 3.0 範例結構,剖析 <IconClickFallbackImages>
。
剖析 VAST 時,請為每個 <IconClickFallbackImage>
標記建立 IconClickFallbackImage
物件,並使用 IconClickFallbackImage.Builder
填入剖析的資料。同樣地,請使用 IconClickFallbackImages.Builder
將 IconClickFallbackImage
物件清單傳遞至代表 <IconClickFallbackImages>
標記的 IconClickFallbackImages
物件。
import com.google.android.tv.ads.IconClickFallbackImage;
import com.google.android.tv.ads.IconClickFallbackImages;
import java.util.Arrays;
...
IconClickFallbackImages getIconClickFallbackImages(...) {
// Use parsed VAST IconClickFallbackImages data to build a list of
// IconClickFallbackImage objects.
int parsedWidth;
int parsedHeight;
String parsedAltText;
String parsedCreativeType;
String parsedStaticResourceUri;
// Read the <IconClickFallbackImage> node and its children to set
// parsedWidth, parsedHeight, ...
IconClickFallbackImages iconClickFallbackImages =
IconClickFallbackImages.builder(
Arrays.asList(
IconClickFallbackImage.builder()
.setWidth(parsedWidth)
.setHeight(parsedHeight)
.setAltText(parsedAltText)
.setCreativeType(parsedCreativeType)
.setStaticResourceUri(parsedStaticResourceUri)
.build()))
.build();
return iconClickFallbackImages;
}
算繪 AT&C
Android TV 廣告程式庫提供 AdsControlsManager.handleIconClick()
方法,用於算繪 AT&C 選單或標準 VAST IconClickFallbackImage。
以下程式碼片段會設定 Android TV 廣告程式庫,以便轉譯 AT&C 選單和 VAST 圖示點選備用圖片。
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import com.google.android.tv.ads.AdsControlsManager;
import com.google.android.tv.ads.IconClickFallbackImage;
import com.google.android.tv.ads.IconClickFallbackImages;
import java.util.ArrayList;
import java.util.List;
public final class VideoPlayerActivity extends Activity {
...
private AdsControlsManager adsControlsManager;
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
adsControlsManager = new AdsControlsManager(this);
...
}
...
/**
* Called when the user interacts with any VAST Icon.
* @param view.
*/
public void onVastIconClicked(View view) {
IconClickFallbackImages iconClickFallbackImages;
// Populate the IconClickFallbackImages object from the parsed VAST data.
...
adsControlsManager.handleIconClick(iconClickFallbackImages);
...
}
}
呼叫 AdsControlsManager.handleIconClick()
會啟動 Android Activity
,因此可使用標準生命週期回呼 (例如 onPause()
和 onResume()
) 來監聽活動生命週期變更。
[選用] 提供自訂備用圖片轉譯器
如果應用程式有特殊需求 (例如硬體限制或使用者體驗限制),您可以使用 AdsControlsManager.setCustomFallbackImageRenderer()
設定回呼函式。Android TV 廣告程式庫會驗證備用圖片,判斷是否可以使用提供的自訂轉譯器。自訂算繪作業只會用於 VAST IconClickFallbackImage,而非 AT&C 選單。
import android.app.Activity;
import android.os.Bundle;
import com.google.android.tv.ads.AdsControlsManager;
import com.google.android.tv.ads.CustomFallbackImageRenderer;
import com.google.android.tv.ads.IconClickFallbackImages;
import java.util.List;
public final class VideoPlayerActivity extends Activity {
...
private AdsControlsManager adsControlsManager;
...
@Override
public void onCreate(Bundle savedInstanceState) {
...
adsControlsManager = new AdsControlsManager(this);
adsControlsManager.setCustomFallbackImageRenderer(
new CustomFallbackImageRendererImpl());
...
}
private static class CustomFallbackImageRendererImpl implements CustomFallbackImageRenderer {
@Override
public void render(IconClickFallbackImages iconClickFallbackImages) {
// Render the fallback images using a custom layout
...
}
}
...
}
提供有關 Android TV 廣告庫的意見回饋
我們希望您能針對整合和遷移 Android TV 應用程式的體驗提供意見。請與 Google 客戶經理聯絡,安排與工程師的會議。
版本記錄
版本 | 發布日期 | 附註 |
---|---|---|
1.0.1 | 2025-01-09 |
|
1.0.0 | 2023-05-16 |
|
1.0.0-alpha02 | 2022-11-17 |
|
1.0.0-alpha01 | 2022-09-07 |
|