2015-03-30 135 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