2015-03-30 150 views
0

我成功將AdMob插頁式廣告實施到我的應用程序中,但唯一的問題是它們無法點擊。AdMob插頁式廣告不可點擊

這裏是我AdMob.java類:

import android.app.Activity; 

import com.google.android.gms.ads.AdListener; 
import com.google.android.gms.ads.AdRequest; 
import com.google.android.gms.ads.InterstitialAd; 

public class Admob extends AdListener{ 

    private Activity ctx; 

    //Admob 
    private InterstitialAd interstitial; 
    private AdRequest adRequest; 

    private String unitId; 

    public static boolean fromAdmob = false; 

    public Admob(Activity ctx, String unitId) 
    { 
     this.ctx = ctx; 
     this.unitId = unitId; 

     try{ 
      this.interstitial = new InterstitialAd(this.ctx); 
      interstitial.setAdUnitId(unitId); 

      interstitial.setAdListener(this); 
      adRequest = new AdRequest.Builder().build(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    public void loadAd() 
    { 
     try{ 
      interstitial.loadAd(adRequest); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onAdLoaded() { 
     try{ 
      fromAdmob = true; 
      interstitial.show(); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Override 
    public void onAdFailedToLoad(int errorCode) 
    { 

    } 

    @Override 
    public void onAdClosed() { 
     fromAdmob = false; 
    } 

} 

而且MainPageActivity.java文件:

public class MainPageActivity extends Activity implements IGameListener, IEventDelegate{ 

    //Tags 
    private static final String TAG = "bubblesMainPage"; 

    //Context 
    public static Activity instance; 

    //Media 
    private MediaPlayer mp; 

    //Ads 
    private Admob admob; 

    //TapSDK 
    private Tap tap; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_page_activity); 

     overridePendingTransition(R.anim.fade_in, R.anim.fade_out); 

     tr 
      Tap.establish(this); 
      tap = new Tap(this, "xxxx"); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 


     //Admob 
     this.admob = new Admob(this, "ADMOB_ID"); 

     //Context 
     instance = this; 

     //Media 
     mp = MediaPlayer.create(getApplicationContext(), R.raw.background_music); 
     mp.setLooping(true); 


     //Set activity properties 
     try { 
      requestWindowFeature(Window.FEATURE_NO_TITLE); 

      getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 
      getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

     //Intents & Listeners 
     final Intent gamePlayActivity = new Intent(this, BubbleShooterActivity.class); 
     BubbleShooterActivity.listener = this; 


     //Animations 
     Animation scaleUpAnim = AnimationUtils.loadAnimation(getApplicationContext(), R.anim.scale_up); 
     findViewById(R.id.play_button).startAnimation(scaleUpAnim); 

     //UI Events 
     findViewById(R.id.play_button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       new Thread(new Runnable() { 
        @Override 
        public void run() { 
         try { 
          startActivity(gamePlayActivity); 
         } catch (Exception e) { 
          e.printStackTrace(); 
         } 
        } 
       }).start(); 


      } 
     }); 

     findViewById(R.id.more_games_button).setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       tap.showMoreGamesWithViewControllerAndAppID((IEventDelegate)instance); 

      } 
     }); 

    } 

    /* 
    Game methods - start 
    */ 

    @Override 
    public void onGameStart() { 
     Log.i(TAG, "onGameStart"); 
    } 

    @Override 
    public void onLevelFailed() { 

     //Level failed window 
     try{ 
      Intent i = new Intent(this, LostActivity.class); 
      startActivity(i); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 

     Log.i(TAG, "onLevelFailed"); 
    } 

    @Override 
    public void onLevelUp() { 
     Log.i(TAG, "onLevelUp"); 

     if(admob != null){ 
      runOnUiThread(new Runnable() { 
       @Override 
       public void run() { 

        try{ 
         admob.loadAd(); 
        } 
        catch (Exception e){ 
         e.printStackTrace(); 
        } 

        try{ 
         Intent i = new Intent(instance, WonActivity.class); 
         startActivity(i); 
        } 
        catch (Exception e){ 
         e.printStackTrace(); 
        } 
       } 
      }); 
     } 

    } 

    @Override 
    public void onGameEnd() { 
     Log.i(TAG, "onGameEnd"); 
    } 

    /* 
    TapSDK methods - start 
    */ 
    @Override 
    public void viewDidAppear() { 
     Log.i(TAG, "TapSDK: viewDidAppear"); 
    } 

    @Override 
    public void viewDidDisappear() { 
     Log.i(TAG, "TapSDK: viewDidDisappear"); 
    } 

    @Override 
    public void viewConnectFail(String s) { 
     Log.i(TAG, "TapSDK: viewConnectFail " + s); 
    } 

    @Override 
    public void conversion() { 
     Log.i(TAG, "TapSDK: conversion"); 
    } 

    @Override 
    public void onOfferComplete(int score) { 
     Log.i(TAG, "TapSDK: onOfferComplete " + score); 
    } 

    /* 
    Activity methods start 
    */ 

    @Override 
    public void onBackPressed() { 

     Log.i(TAG, "onBackPressed"); 

     try{ 
      Intent exitScreen = new Intent(this, ExitActivity.class); 
      startActivity(exitScreen); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
      Log.e(TAG, "onBackPressed: " + e.getMessage()); 
     } 

    } 

    @Override 
    protected void onStart() { 
     super.onStart(); 

     // Monitor launch times and interval from installation 
     RateThisApp.onStart(this); 
     // If the criteria is satisfied, "Rate this app" dialog will be shown 
     RateThisApp.showRateDialogIfNeeded(this); 
    } 

    @Override 
    protected void onResume() 
    { 
     super.onResume(); 

     if(tap != null) 
      tap.onResume(); 

     mp.seekTo(0); 
     mp.start(); 
    } 

    @Override 
    protected void onPause() 
    { 
     if(tap != null) 
      tap.onPause(); 

     mp.pause(); 

     super.onPause(); 
    } 

    @Override 
    protected void onDestroy() 
    { 
     mp.stop(); 
     mp = null; 

     if(tap != null) 
      tap.onDestroy(); 

     super.onDestroy(); 
    } 


} 

我無法弄清楚如何顯示插頁廣告,當用戶級別達並按下播放按鈕(這將導致他到下一個級別)。當他按下主頁按鈕時,插頁式廣告就會顯示出來,這會將他帶到MainActivity屏幕。

有人可以幫我把廣告點擊嗎?此外,有關如何在每個完成級別後添加插頁式廣告的建議?當某人完成關卡並按下播放按鈕時,應該會出現插頁式廣告,關閉該廣告時,他應該能夠播放下一關。

我真的很感謝你的幫忙!

回答

0

一些問題:

  1. 不要從onAdLoadedinterstitial.show()。當用戶按下您的下一關的播放按鈕時,請致電show()(但只有在廣告可用時)。
  2. 擺脫public static Activity instance;從不持有一個活動的靜態引用。你會在任何地方泄漏上下文。
  3. 而不是從onLevelUp()調用admob.loadAd()創建活動後立即調用它(從網絡加載廣告需要時間)。 NB你不需要從runOnUIThread()
  4. 呼叫admob.loadAd()每次向用戶展示廣告後再次打電話。
+0

謝謝你的建議,但不幸的是我是一個Java初學者,我不能使它工作:( – toofast 2015-03-31 14:20:37