AdMob не будет показывать баннер до обновления или входа в google plus

У меня проблемы. Мой AdMob уже давно создан без каких-либо проблем, но я заметил что-то не так. Объявление успешно загружено (я вижу сообщение из ddms), но он не будет отображаться. Он будет показан после периодического обновления в 60 секунд или когда я открою логин для google plus. Проблема возникает только с AdMob в Google Play Services, а не с банкомой AdMobSDK. Я переключился на баннер AdMob, но я использую Google Play Game Services для лидеров и достижений.

Я подозреваю, что проблема связана с отсутствием отображения или неправильным настройкой.

Таким образом, объявление снова появится через 60 секунд (вместе с обновлением объявления), или когда я запустил экран входа в систему для сервисов Google Play.

Я добавляю свой код, также следует упомянуть, что я перешел на новый сайт AdMob, и повторяю, что эта проблема не возникает, если я использую jar-файл AdMob (объявление затем отображается через 2-3 секунды, как обычно). Я сократил код сервисов игровой игры google (они не затрагивают эту проблему, потому что я пробовал в другом приложении без них, и проблема все еще там).

Код MainActivity:

public class MainActivity extends AndroidApplication { public static enum AdsStatus { SHOW_ADS, HIDE_ADS; } protected RelativeLayout layout; protected static AdView adMobView; public static class InnerHandler extends Handler { WeakReference<MainActivity> mActivity; InnerHandler(MainActivityactivity) { mActivity = new WeakReference<MainActivity>(activity); } @Override public void handleMessage(final Message msg) { if(msg.obj instanceof AdsStatus) { switch((AdsStatus)msg.obj) { case SHOW_ADS: mActivity.get().showAds(); break; case HIDE_ADS: mActivity.get().hideAds(); break; } } } } protected Handler handler = new InnerHandler(this); @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Create the layout layout = new RelativeLayout(this); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN); // Create the libgdx View View gameView = initializeForView(new MainApplicationListener(), true); layout.addView(gameView); //Ad Mob final DisplayMetrics displayMetrics = MainActivity.this .getApplicationContext().getResources() .getDisplayMetrics(); if (displayMetrics.widthPixels >= 800 && displayMetrics.heightPixels >= 480) { if(adMobView != null) { adMobView.destroy(); } adMobView = new AdView(AirDance.this); adMobView.setAdUnitId(<MY_ID_IS_HERE>); adMobView.setAdSize(AdSize.SMART_BANNER); RelativeLayout.LayoutParams adParams = new RelativeLayout.LayoutParams( RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT); adParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); adParams.addRule(RelativeLayout.CENTER_HORIZONTAL); AdRequest adRequest = new AdRequest.Builder() .addTestDevice(<MY_DEVICE_IS_HERE>) .build(); adMobView.loadAd(adRequest); layout.addView(adMobView, adParams); } // Hook it all up setContentView(layout); } @Override protected void onResume() { super.onResume(); AppRater.applicationLaunched(this, analytics); if(adMobView != null) { adMobView.resume(); } } @Override protected void onPause() { super.onPause(); if(adMobView != null) { adMobView.pause(); } } @Override protected void onDestroy() { super.onDestroy(); if(adMobView != null) { adMobView.destroy(); adMobView = null; } } public void showAds() { runOnUiThread(new Runnable() { @Override public void run() { if(adMobView != null) { adMobView.setEnabled(true); adMobView.setVisibility(View.VISIBLE); } } }); } public void hideAds() { runOnUiThread(new Runnable() { @Override public void run() { if(adMobView != null) { adMobView.setEnabled(false); adMobView.setVisibility(View.GONE); } } }); } } 

И вот AndroidManifest:

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="..." android:installLocation="auto" android:versionCode="16" android:versionName="1.2.6" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-feature android:name="android.hardware.screen.landscape"/> <uses-feature android:name="android.hardware.touchscreen.multitouch" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="MainActivity"> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="...MainActivity" android:label="MainActivity" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- adMob --> <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> </application> </manifest> Размер <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="..." android:installLocation="auto" android:versionCode="16" android:versionName="1.2.6" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET"/> <uses-feature android:name="android.hardware.screen.landscape"/> <uses-feature android:name="android.hardware.touchscreen.multitouch" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="MainActivity"> <meta-data android:name="com.google.android.gms.games.APP_ID" android:value="@string/app_id" /> <meta-data android:name="com.google.android.gms.version" android:value="@integer/google_play_services_version" /> <activity android:name="...MainActivity" android:label="MainActivity" android:screenOrientation="landscape"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- adMob --> <activity android:name="com.google.android.gms.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/> </application> </manifest> 

EDIT: хорошо, поэтому объявление становится видимым после того, как я заблокирую и разблокирую экран с открытым приложением, также вы можете нажать на невидимое объявление

EDIT: Хорошо, я думаю, что решил. Я просто вручную перезагружаю весь макет на событие AdLoad. Во всяком случае, это просто функциональное решение, оно не объясняет, почему это происходит с AdMob в сервисах Google Play.

 adMobView.setAdListener(new AdListener() { @Override public void onAdLoaded() { super.onAdLoaded(); MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { layout.requestLayout(); } }); } }); 

Solutions Collecting From Web of "AdMob не будет показывать баннер до обновления или входа в google plus"

Поскольку никто не ответил с объяснением, я собираюсь рассмотреть этот вопрос. Я просто вручную перезагружаю весь макет на событие AdLoad. Во всяком случае, это просто функциональное решение, оно не объясняет, почему это происходит с AdMob в сервисах Google Play.

 adMobView.setAdListener(new AdListener() { @Override public void onAdLoaded() { super.onAdLoaded(); MainActivity.this.runOnUiThread(new Runnable() { @Override public void run() { layout.requestLayout(); } }); } }); 

Кроме того, как упоминалось пользователем3263204, вы можете попробовать это

 adMobView.setBackgroundColor(Color.BLACK); 

Для решения вашей проблемы.

Вышеупомянутое решение работает. Даже более простой способ сохранить отображаемый баннер – это установить его фон.

 adMobView.setBackgroundColor(Color.BLACK); 

Как указано в файле user3263204, вы можете использовать setBackgroundColor для отображения объявления. Вы можете сделать фон прозрачным, если (как в моем случае) у вас есть реклама над чем-то еще:

adMobView.setBackgroundColor(getResources().getColor(android.R.color.transparent));

Вы также можете requestWindowFeature (Window.FEATURE_NO_TITLE); И установите полный экран и показ объявлений.

 banner.setBackgroundColor(Color.TRANSPARENT); 

Кажется, это исправляет проблему для меня. Также обязательно запустите код создания баннера из потока пользовательского интерфейса.

 activity.runOnUiThread(new Runnable() { @Override public void run() { // all your banner creation code is here banner.setBackgroundColor(Color.TRANSPARENT); } });