Рекламный баннер Millenial Media весь белый экран
Я использую Millennial Media SDK и пишу плагин Cordova/PhoneGap для mMedia Ad, он довольно хорошо работает на iOS и видео-рекламе, но у меня есть некоторые проблемы при использовании баннера AD на Android.
Если я вставляю MMAdView как братское представление Cordova WebView (закрепление сверху или снизу), на баннере Ad всегда отображается полноэкранное пустое пространство, которое покрывает WebView.
Когда я пишу журнал, чтобы проверить размер MMAdView с getWidth()
или же getMeasuredWidth()
, он всегда возвращает 0 или 1 вместо фактического размера!
Это довольно похоже на этот вопрос, разница в том, что я использую чистый Java-код вместо XML-файла макета.
При поддержке рекламы AdMob Millenial Media весь экран обновляется.
Смотрите скриншот:
Вот код:
adView = new MMAdView(cordova.getActivity());
adView.setApid( bannerAdId );
adView.setId(MMSDK.getDefaultAdId());
width = BANNER_AD_WIDTH;
height = BANNER_AD_HEIGHT;
//Finds an ad that best fits a users device.
if(canFit(MED_BANNER_WIDTH)) {
width = MED_BANNER_WIDTH;
height = MED_BANNER_HEIGHT;
} else if(canFit(IAB_LEADERBOARD_WIDTH)) {
width = IAB_LEADERBOARD_WIDTH;
height = IAB_LEADERBOARD_HEIGHT;
}
adView.setWidth(width);
adView.setHeight(height);
adView.setListener(new BannerListener());
adView.getAd();
ViewGroup parentView = (ViewGroup) webView.getParent();
if(argPos <= TOP_RIGHT) {
parentView.addView(adView, 0);
} else {
parentView.addView(adView);
}
2 ответа
После учебы я нахожу решение самостоятельно.
Сначала создайте вид баннера и установите логику adWidth и adHeight:
//Constants for tablet sized ads (728x90)
private static final int IAB_LEADERBOARD_WIDTH = 728;
private static final int IAB_LEADERBOARD_HEIGHT = 90;
private static final int MED_BANNER_WIDTH = 480;
private static final int MED_BANNER_HEIGHT = 60;
//Constants for phone sized ads (320x50)
private static final int BANNER_AD_WIDTH = 320;
private static final int BANNER_AD_HEIGHT = 50;
MMAdView ad = new MMAdView(getActivity());
ad.setApid( adId );
ad.setMMRequest(new MMRequest());
ad.setId(MMSDK.getDefaultAdId());
ad.setIgnoresDensityScaling(ignoreScaling);
ad.setTransitionType(transitionType);
//Finds an ad that best fits a users device.
if(canFit(MED_BANNER_WIDTH)) {
adWidth = MED_BANNER_WIDTH;
adHeight = MED_BANNER_HEIGHT;
} else if(canFit(IAB_LEADERBOARD_WIDTH)) {
adWidth = IAB_LEADERBOARD_WIDTH;
adHeight = IAB_LEADERBOARD_HEIGHT;
}
ad.setWidth(adWidth);
ad.setHeight(adHeight);
Представление баннера не может возвращать правильную ширину и высоту, оно должно быть рассчитано из adWidth и adHeight.
DisplayMetrics metrics = new DisplayMetrics();
getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
float screenDensity = metrics.density;
int adViewWidth = (int) (adWidth * screenDensity);
int adViewHeight = (int) (adHeight * screenDensity);
Затем используйте рассчитанные значения adViewWidth и adViewHeight, чтобы установить положение представления баннера.
adViewLayout = new RelativeLayout(activity);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
ViewGroup rootView = (ViewGroup) getView().getRootView();
rootView.addView(adViewLayout, params);
adViewLayout.bringToFront();
Log.d(LOGTAG, String.format("show banner: (%d,%d), (%d x %d)", x,y,bw,bh));
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(bw, bh);
params.leftMargin = x;
params.topMargin = y;
adViewLayout.addView(adView, params);
Теперь это работает, смотрите скриншот.
Трудно сказать без кода. Это может быть связано с тем, что вы используете PhoneGap, чтобы обернуть часть рекламного кода. Это может быть ошибка другого типа. Поскольку вы уже используете PhoneGap, вы можете найти Javascript SDK от Millennial Media немного проще для своих рекламных нужд. http://docs.millennialmedia.com/mmadlib/index.html