#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. Действительно, теперь это кажется очевидным. Спасибо!