2014-01-28 4 views
14

문제가 있습니다. AdMob은 문제없이 설정되었지만 문제가 발생했습니다. 광고가로드되고 (ddms의 메시지가 표시됨) 표시되지 않습니다. 정기 60 초 후 또는 Google Plus에 로그인 할 때 표시됩니다. 문제는 Google Play 서비스 AdMob에서만 발생하며 AdMobSDK jar에서는 발생하지 않습니다. AdMob jar로 전환 하겠지만 리더 보드 및 업적에 Google Play 게임 서비스를 사용하고 있습니다.새로 고침하거나 Google에 로그인 할 때까지 AdMob에서 배너를 표시하지 않습니다.

문제가보기가 표시되지 않거나 잘못 설정된 것으로 의심됩니다.

다시 말해 광고 대기 시간이 60 초 (광고 새로 고침 포함)가 지나면 Google Play 서비스의 로그인 화면이 열립니다.

코드를 추가 할 예정이며 새 AdMob 웹 사이트로 전환했음을 언급해야하며 AdMob jar 파일을 사용하면 문제가 발생하지 않습니다. (광고는 2-3 초 후에 표시됩니다. 정상처럼). Google Play 게임 서비스 코드를 잘라 냈습니다 (문제가없는 다른 앱에서 시도했기 때문에이 문제에 영향을주지 않습니다. 문제가 아직 남아 있습니다).

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> 

편집 : 나는 잠 오픈 앱 화면 잠금을 해제 한 후 좋아, 광고는 또한 당신이 할 수있는, 눈에 보이는 도착 보이지 않는 광고를 클릭하십시오

편집 : 좋아, 내가 해결했다고 생각해. 방금 전체 레이아웃 onAdLoad 이벤트를 수동으로 다시로드했습니다. 어쨌든 이것은 단지 기능적 해결책 일 뿐이며 Google Play에서 왜 그런지 설명하지 않습니다 서비스 AdMob.

adMobView.setAdListener(new AdListener() { 

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

     MainActivity.this.runOnUiThread(new Runnable() { 

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

}); 
+0

환영합니다! 일반적으로 우리는 질문에 태그 라인에 감사를 표하여 회피하지 않으려 고합니다. 그 이유는 다음과 같습니다. "[감사합니다, '태그 라인 및 인사말을 게시물에서 제거해야합니까?] (http : // meta. stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be-removed-from-posts) "를 참조하십시오. – veducm

+1

알았어, 고마워! 나는 몰랐다. –

+1

이것은 나를 위해 너무 작동합니다. 감사합니다 –

답변

8

아무도 설명으로 답하지 않으므로이 문제를 해결할 것입니다. 방금 전체 레이아웃 onAdLoad 이벤트를 수동으로 다시로드했습니다. 어쨌든 이것은 단지 기능적 해결책 일 뿐이며 Google Play 서비스 AdMob에서 왜 그런 일이 발생하는지 설명하지 않습니다. user3263204에서 언급 한 바와 같이 또한


adMobView.setAdListener(new AdListener() { 

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

     MainActivity.this.runOnUiThread(new Runnable() { 

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

}); 

, 당신은이

adMobView.setBackgroundColor(Color.BLACK); 

문제를 해결하기 위해 시도 할 수 있습니다.

5

위의 솔루션이 작동합니다. 표시된 배너를 유지하는 더 간단한 방법조차도 배경을 설정하는 것입니다.

adMobView.setBackgroundColor(Color.BLACK); 
1

user3263204 에서처럼 setBackgroundColor를 사용하여 adview를 표시 할 수 있습니다. (내 경우처럼) 당신이 다른 것을 통해 AdView가있는 경우 당신은 배경이 투명하게 만들 수 있습니다

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

0

할 수도 requestWindowFeature (Window.FEATURE_NO_TITLE); 전체 화면으로 설정하고 광고가 표시됩니다.

0
banner.setBackgroundColor(Color.TRANSPARENT); 

이 문제가 해결되었습니다. 또한 UI 스레드 내에서 배너 작성 코드를 실행하십시오.

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