Questa guida mostra come implementare la tua UI personalizzata utilizzando l'SDK IMA per Android. Per farlo, devi disattivare l'interfaccia utente predefinita, configurare una nuova interfaccia utente personalizzata e poi compilarla con le informazioni sugli annunci ottenute dall'SDK.
Disattivare l'interfaccia utente dell'annuncio
Per mostrare un'interfaccia utente personalizzata, devi prima disattivare l'interfaccia utente predefinita dell'annuncio. Per farlo, chiama AdsRenderingSettings.setDisableUi()
e poi passa AdsRenderingSettings
a 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); }
In seguito, ogni volta che devi decidere se mostrare l'interfaccia utente personalizzata, controlla se è presente un annuncio e chiama Ad.isUiDisabled()
per verificare che l'interfaccia utente dell'annuncio predefinita sia stata disattivata.
Mostrare un'interfaccia utente personalizzata
Una volta disattivata l'interfaccia utente predefinita, il passaggio successivo consiste nel mostrare un'interfaccia utente dell'annuncio personalizzata.
Per questo esempio, aggiungi un nuovo RelativeLayout
al layout del visualizzatore video esistente, poi mostra questo layout quando viene riprodotto un annuncio e nascondilo quando non sono in riproduzione annunci.
Aggiungi quanto segue al file di layout del frammento:
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>
Aggiungi poi il codice per utilizzare l'interfaccia utente personalizzata a Activity
. Per aggiornare l'interfaccia utente,
crea un timer Handler
e un Runnable
che lo gestisce.
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); }
Contatore degli annunci e pulsante di avanzamento
Ora definisci la funzione updateCustomUi()
per compilare l'interfaccia utente con le informazioni sull'annuncio. I dettagli variano in base al formato dell'annuncio, ma in genere includono il contatore degli annunci e un pulsante di avanzamento o un contatore di avanzamenti se l'annuncio è ignorabile. Aggiungi quanto segue:
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); } }
Nel codice precedente, dopo aver controllato se è presente un annuncio e aver chiamato
Ad.isUiDisabled()
per verificare che l'interfaccia utente predefinita dell'annuncio sia stata disattivata, chiama
Ad.getAdPodInfo()
e AdsManager.getAdProgress()
per trovare la posizione dell'annuncio
nel pod e il relativo avanzamento. Per gli annunci ignorabili, mostra un contatore se non puoi ancora saltare l'annuncio; in caso contrario, mostra un pulsante Salta. Ecco un riepilogo delle informazioni comuni sugli annunci e delle chiamate associate:
Informazioni | Chiama |
---|---|
Annuncio corrente nel pod | Ad.getAdPodInfo().getAdPosition() |
Annunci totali nel pod | Ad.getPodInfo().getTotalAds() |
L'annuncio è ignorabile | Ad.isSkippable() |
Secondi prima che l'annuncio possa essere ignorato | Ad.getSkipTimeOffset() - AdsManager.getAdProgress().getCurrentTime() |
Secondi rimanenti nell'annuncio | (AdsManager.getAdProgress().getDuration() - AdsManager.getAdProgress().getCurrentTime()) * 1000 |
Se fai clic sul pulsante Salta annuncio, l'annuncio dovrebbe essere ignorato, quindi configuralo insieme al pulsante Scopri di più:
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(); } });
L'interfaccia utente deve essere disattivata per il funzionamento di AdsManager.clicked()
.
Risoluzione dei problemi
- Hai un tag di esempio abilitato per la disattivazione dell'interfaccia utente dell'annuncio?
- Puoi copiare l'URL di questo tag di esempio e incollarlo nell'implementazione di IMA.
- Non riesco a disattivare l'interfaccia utente predefinita.
- Assicurati di chiamare
AdsRenderingSettings.setDisableUi()
e di passarlo aAdsManager
. Verifica cheAd.isUiDisabled()
restituiscatrue
. Inoltre, la tua rete deve essere attivata in Ad Manager per disattivare un'interfaccia utente dell'annuncio. Se hai attivato questa funzionalità, il tuo VAST contiene unExtension
simile al seguente: Se i problemi persistono, rivolgiti al tuo account manager per verificare che la funzionalità sia stata attivata. Alcuni tipi di annunci richiedono un'interfaccia utente specifica; questi annunci vengono restituiti con un valore<Extension type="uiSettings"> <UiHideable>1</UiHideable> </Extension>
<UiHideable>
pari a 0. In questo caso, il team addetto al traffico dovrà apportare modifiche per verificare che questi tipi di annunci non vengano pubblicati.