Отслеживание события Admob в Google Analytics

#android #google-analytics #admob

#Android #google-analytics #admob

Вопрос:

Я хочу отслеживать клики по баннерам AdMob с помощью Google Analytics, но возникает проблема, и я не понимаю, почему.

В настоящее время мой баннер AdMob реализован следующим образом:
Макет:

 <com.google.android.gms.ads.AdView
    xmlns:ads="http://schemas.android.com/apk/res-auto"
    android:id="@ id/adView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    ads:adUnitId="YOUR_AD_UNIT_ID"
    ads:adSize="BANNER"/>
  

Java : AdView adView = (AdView)this.findViewById(R.id.adView);

Однако демонстрационный проект Google, который показывает, как добавить AdListener (проект, доступный здесь), ничего не указывает в макете и использует следующий код для добавления баннера:

 LinearLayout layout = (LinearLayout) findViewById(R.id.leLinearLayoutDeMonChoix);
layout.addView(adView);
  

Но если используется реализация, описанная в начале, AdListener больше не обнаруживает никаких событий. Почему?

Вы можете найти эту дефектную реализацию в следующем демонстрационном проекте: https://drive.google.com/file/d/0B8rE1pbtzNJ1UXg5QllubEFidGc/edit?usp=sharing

Заранее благодарю вас за ваше время и помощь.

Ответ №1:

В предоставленной реализации вы делаете следующее:

 // Create an ad.
adView = new AdView(this);
// Set the AdListener.
adView.setAdListener(new AdListener() {
    /** stuff **/
}
AdView adView = (AdView)this.findViewById(R.id.adView);
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
    .addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
    .build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
  

Существует два экземпляра AdView, и это ваша проблема.

  • первое, созданное в результате раздувания вашего main.xml макет с помощью setContentView() ,
  • второе, когда вы написали adView = new AdView(this);

Вы настраиваете прослушиватель на второй, но отображается только первый. Это не может работать. 🙂
Выберите один метод (создайте его из макета) или другой (создайте его из кода), но не путайте их.

Если вы хотите создать свое объявление на основе макета, выполните следующие действия:

 // Retreive the adView.
AdView adView = (AdView)this.findViewById(R.id.adView);
// Set the AdListener.
adView.setAdListener(new AdListener() {
    /** stuff **/
}
// Create an ad request. Check logcat output for the hashed device ID to
// get test ads on a physical device.
AdRequest adRequest = new AdRequest.Builder()
    .addTestDevice(AdRequest.DEVICE_ID_EMULATOR)
    .addTestDevice("INSERT_YOUR_HASHED_DEVICE_ID_HERE")
    .build();
// Start loading the ad in the background.
adView.loadAd(adRequest);
  

Комментарии:

1. Действительно, теперь это кажется очевидным. Спасибо!