Este guia mostra como implementar sua própria interface personalizada usando o SDK do IMA para Android. Para fazer isso, você precisa desativar a interface padrão, configurar uma nova interface personalizada e preencher a nova interface com as informações do anúncio recebidas do SDK.
Desativar a interface do anúncio
Para mostrar uma interface personalizada, primeiro você deve desativar a interface de anúncio default. Para fazer isso, chame
AdsRenderingSettings.setDisableUi()
e transmita AdsRenderingSettings
para
AdsManager.init()
:
MyActivity.java
ImaSdkFactory mSdkFactory = ImaSdkFactory.getInstance(); AdsManager mAdsManager; @Override public void onAdsManagerLoaded(AdsManagerLoadedEvent adsManagerLoadedEvent) { mAdsManager = adsManagerLoadedEvent.getAdsManager(); ... AdsRenderingSettings settings = mSdkFactory.createAdsRenderingSettings(); settings.setDisableUi(true); mAdsManager.init(settings); }
Em seguida, sempre que você precisar decidir se quer mostrar a interface personalizada, confira
se há um anúncio e chame Ad.isUiDisabled()
para conferir se a interface de anúncio padrão
foi desativada.
Mostrar interface personalizada
Depois que a interface padrão for desativada, a próxima etapa será mostrar uma interface de anúncio personalizado.
Para este exemplo, adicione uma nova RelativeLayout
ao layout do player de vídeo.
Em seguida, mostre esse layout quando um anúncio estiver em reprodução e oculte-o quando nenhum anúncio estiver em reprodução.
Adicione o código abaixo ao arquivo de layout do fragmento:
fragment_video.xml
<com.google.ads.interactivemedia.v3.samples.samplevideoplayer.SampleVideoPlayer android:id="@+id/sampleVideoPlayer" android:layout_width="match_parent" android:layout_height="match_parent" /> <RelativeLayout android:id="@+id/customUi" android:layout_width="match_parent" android:layout_height="match_parent" android:visibility="invisible"> <TextView android:id="@+id/adCounter" android:layout_width="wrap_content" android:layout_height="wrap_content" android:background="@android:color/holo_green_light" android:layout_alignParentTop="true" android:layout_alignParentLeft="true" android:text="@string/ad_counter" /> <Button android:id="@+id/learnMoreButton" android:background="@android:color/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:text="@string/learn_more" android:layout_alignParentRight="true" /> <Button android:id="@+id/skipButton" android:background="@android:color/holo_green_light" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:text="@string/skip_ad" android:enabled="false" android:layout_alignParentRight="true" /> </RelativeLayout>
Em seguida, adicione o código ao Activity
para usar a interface personalizada. Para atualizar a IU,
crie um Handler
de timer e um Runnable
para ser executado nele.
MyActivity.java
// The view containing the custom UI. private View mCustomUi; // The timer handler. private Handler mTimerHandler = new Handler(); // The Runnable that runs your custom UI update loop. private Runnable mTimerRunnable = new Runnable() { @Override public void run() { updateCustomUi(); mTimerHandler.postDelayed(this, 500); } }; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mCustomUi = rootView.findViewById(R.id.customUi); mAdCounterUi = (TextView) rootView.findViewById(R.id.adCounter); } @Override public void onAdEvent(AdEvent adEvent) { ... switch (adEvent.getType()) { ... case STARTED: // Start your update loop. mTimerHandler.post(mTimerRunnable); Break; ... case COMPLETED: mCustomUi.setVisibility(View.INVISIBLE); mTimerHandler.removeCallbacks(mTimerRunnable); ... } } @Override public void onPause() { ... // Stop ad UI update loop. mTimerHandler.removeCallbacks(mTimerRunnable); } @Override Public void onResume() { ... // Start ad UI update loop. mTimerHandler.post(mTimerRunnable); }
Contador de anúncios e botão "Pular"
Agora defina a função updateCustomUi()
para preencher a interface com informações do anúncio.
Os detalhes variam de acordo com o formato do anúncio, mas geralmente você inclui o contador de anúncios
e um botão "Pular" ou "Pular" se o anúncio for pulável. Adicione o seguinte:
MyActivity.java
private void updateCustomUi() { // Runs from the update loop to update the custom UI. Ad ad = mAdsManager.getCurrentAd(); if (ad != null && ad.isUiDisabled()) { // Show the UI. Log.i(LOGTAG, "UI disabled, show custom UI!"); AdPodInfo podInfo = ad.getAdPodInfo(); VideoProgressUpdate update = mAdsManager.getAdProgress(); SimpleDateFormat format = new SimpleDateFormat("mm:ss", Locale.US); // Handle ad counter. String adProgress = format.format( (update.getDuration() - update.getCurrentTime()) * 1000); String adUiString = String.format( Locale.US, "Ad %d of %d (%s)", podInfo.getAdPosition(), podInfo.getTotalAds(), adProgress); mAdCounterUi.setText(adUiString); // Handle skippable ads. if (ad.isSkippable()) { if (update.getCurrentTime() >= ad.getSkipTimeOffset()) { // Allow skipping. mSkipButton.setText(getString(R.string.skip_ad)); mSkipButton.setEnabled(true); } else { String skipString = String.format( Locale.US, "You can skip this ad in %d", (int) (ad.getSkipTimeOffset() - update.getCurrentTime())); mSkipButton.setText(skipString); mSkipButton.setEnabled(false); } mSkipButton.setVisibility(View.VISIBLE); } else { mSkipButton.setVisibility(View.INVISIBLE); } mCustomUi.setVisibility(View.VISIBLE); mCustomUi.bringToFront(); } else { // Hide the UI. mCustomUi.setVisibility(View.INVISIBLE); mTimerHandler.removeCallbacks(mTimerRunnable); } }
No código acima, depois de verificar se há um anúncio e chamar
Ad.isUiDisabled()
para verificar se a interface do anúncio padrão foi desativada, chame
Ad.getAdPodInfo()
e AdsManager.getAdProgress()
para encontrar a posição
do anúncio no conjunto e o progresso dele. Para anúncios puláveis, mostre um contador de ignorados se
você ainda não puder pular o anúncio. Caso contrário, mostre um botão de pular. Confira um resumo
de informações comuns de anúncios e chamadas associadas:
Informações | Call |
---|---|
Anúncio atual no conjunto | Ad.getAdPodInfo().getAdPosition() |
Total de anúncios no conjunto | Ad.getPodInfo().getTotalAds() |
É pulável de acordo com o anúncio | Ad.isSkippable() |
Segundos até que o anúncio possa ser ignorado | Ad.getSkipTimeOffset() - AdsManager.getAdProgress().getCurrentTime() |
Segundos restantes no anúncio | (AdsManager.getAdProgress().getDuration() - AdsManager.getAdProgress().getCurrentTime()) * 1000 |
O clique no botão Pular anúncio faz com que o anúncio seja ignorado. Portanto, configure essa opção junto com o botão Saiba mais:
MyActivity.java
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { ... mCustomUi = rootView.findViewById(R.id.customUi); mAdCounterUi = (TextView) rootView.findViewById(R.id.adCounter); // Set up the 'learn more' button handler for the custom UI. mLearnMoreButton = (Button) rootView.findViewById(R.id.learnMoreButton); mLearnMoreButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { // Only works if the UI has been disabled. mAdsManager.clicked(); } }); // Set up the skip button handler for the custom UI. mSkipButton = (Button) rootView.findViewById(R.id.skipButton); mSkipButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { mAdsManager.skip(); } });
A interface precisa ser desativada para que o AdsManager.clicked()
funcione.
Solução de problemas
- Você tem uma tag de amostra ativada para desativar a interface de anúncios?
- É possível copiar o URL desta tag de amostra e colar na implementação do IMA.
- Não consigo desativar a interface padrão.
- Confira se você chame
AdsRenderingSettings.setDisableUi()
e o transmita paraAdsManager
. Verifique seAd.isUiDisabled()
retornatrue
. Além disso, sua rede precisa estar ativada no Ad Manager para desativar uma interface do anúncio. Se estiver ativado, seu VAST terá umExtension
semelhante a este:<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension>
Se você ainda tiver problemas, verifique com seu gerente de contas se a ativação foi feita. Alguns tipos de anúncios exigem uma IU específica. Esses anúncios retornam com um valor<UiHideable>
igual a 0. Se você encontrar isso, sua equipe de tráfego precisará fazer alterações para garantir que esses tipos de anúncios não sejam veiculados.