2014-01-28 5 views
14

Ich habe ein Problem. Mein AdMob ist seit einiger Zeit ohne Probleme eingerichtet, aber ich habe etwas falsch bemerkt. Die Anzeige wird erfolgreich geladen (ich sehe eine Nachricht von ddms), aber sie wird nicht angezeigt. Es wird nach einer regelmäßigen Aktualisierung von 60 Sekunden angezeigt oder wenn ich die Anmeldung bei Google Plus öffne. Das Problem tritt nur bei Google Play Services AdMob und nicht bei AdMobSDK-JAR auf. Ich würde zu AdMob jar wechseln, allerdings verwende ich Google Play-Spieldienste für Bestenlisten und Erfolge.AdMob zeigt das Banner erst, wenn es aktualisiert wird oder melden Sie sich bei Google plus an

Ich vermute, dass das Problem darin besteht, dass die Ansicht nicht angezeigt wird oder die Einstellungen nicht korrekt sind.

Also wieder, Anzeige wird sich nach 60 Sekunden (zusammen mit Anzeigenaktualisierung) von warten, oder wenn ich den Anmeldebildschirm für Google Play-Dienste feuern.

Ich füge meinen Code hinzu, auch sollte ich erwähnen, dass ich zur neuen AdMob-Website gewechselt habe und ich wiederhole, dass dieses Problem nicht auftritt, wenn ich die AdMob-JAR-Datei verwende (die Anzeige wird dann in 2-3 Sekunden angezeigt) wie gewöhnlich). Ich habe den Google Play Game Services Code abgeschnitten (sie haben keinen Einfluss auf dieses Problem, weil ich es in meiner anderen App ohne sie versucht habe, und das Problem ist immer noch da).

MainActivity Code:

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); 
      } 
     } 
    }); 
} 
} 

Und hier ist 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> 

EDIT: in Ordnung, so Anzeige wird sichtbar, nachdem ich sperren und entsperren Bildschirm mit App öffnen, können Sie auch Klicken Sie auf unsichtbare Anzeige

EDIT: Okay, ich denke ich habe es gelöst. Ich lade nur das gesamte Layout des AdLoad-Ereignisses manuell neu. Wie auch immer, das ist nur eine funktionale Lösung, es erklärt nicht, warum es bei Google Play AdMob Dienste passiert.

adMobView.setAdListener(new AdListener() { 

    @Override 
    public void onAdLoaded() { 
     super.onAdLoaded(); 

     MainActivity.this.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       layout.requestLayout(); 
      } 
     }); 
    } 

}); 
+0

Willkommen! Normalerweise versuchen wir, Dankeschönzeilen in den Fragen zu vermeiden, um sie übersichtlicher zu halten. Sie können hier nachlesen: "[Sollen 'Hallo', 'Dank', Slogans und Anreden aus Beiträgen entfernt werden?] (Http: // meta. stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts ". – veducm

+1

Okay, danke! Ich war mir nicht bewusst. –

+1

Das funktioniert auch für mich. Danke –

Antwort

8

Da niemand mit der Erklärung geantwortet hat, werde ich diese eine gelöst betrachten. Ich lade nur das gesamte Layout des AdLoad-Ereignisses manuell neu. Wie auch immer, das ist nur eine funktionelle Lösung, es erklärt nicht, warum es mit Google Play Services AdMob passiert.

adMobView.setAdListener(new AdListener() { 

    @Override 
    public void onAdLoaded() { 
     super.onAdLoaded(); 

     MainActivity.this.runOnUiThread(new Runnable() { 

      @Override 
      public void run() { 
       layout.requestLayout(); 
      } 
     }); 
    } 

}); 

Auch durch user3263204 erwähnt wie können Sie versuchen, diese

adMobView.setBackgroundColor(Color.BLACK); 

Ihr Problem zu lösen.

5

Die obige Lösung funktioniert. Eine einfachere Möglichkeit, das angezeigte Banner beizubehalten, besteht darin, den Hintergrund festzulegen.

1

Wie Benutzer3263204 sagt, können Sie setBackgroundColor verwenden, um die Adview erscheinen zu lassen. Sie können den Hintergrund transparent machen, wenn (wie in meinem Fall) Sie adview über etwas anderes:

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

0

Sie können auch requestWindowFeature (Window.FEATURE_NO_TITLE); und auf Vollbild einstellen und die Anzeigen werden angezeigt.

0
banner.setBackgroundColor(Color.TRANSPARENT); 

Dies scheint das Problem für mich zu beheben. Stellen Sie außerdem sicher, dass der Bannererstellungscode im UI-Thread ausgeführt wird.

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