Muhidul Hassan
Muhidul Hassan

Reputation: 369

Want to show AdMob Interstitial ads in My Game after game over

Hello I want to show ads (Interstitial) after each game over, but I'm facing some issues. Can someone please help me implement AdMob interstitial? The whole source code only has one class that extends activity. I know how to implement AdMob interstitial in app but I didn't use it in game before. Where should I add code and what is the code? Thank You.

This is my GameOverscreen code.

    public class GameOverScene extends CCLayer {
        //fields
        private SoundManager _soundMananger;
        private CCSprite _background;

        private CCMenu _menu;
        private CCMenu _restart;

        private CCLabel _yourScore; 
        private CCLabel _bestScore;
        //methods
        public static CCScene scene() {
            CCScene scene = CCScene.node();
            GameOverScene layer = new GameOverScene();      
            scene.addChild(layer);
            return scene;
        }

        public GameOverScene() {
            super();
            BeetleshotMainActivity.app.setHideAdView(false);
            _soundMananger = SoundManager.sharedSoundResourceManager();
            CGSize size = CCDirector.sharedDirector().winSize();
            float scaleX = size.width / 768.0f;
            float scaleY = size.height / 1024.0f;

            if (BeetleshotMainActivity.app._soundplay == true) {
                _soundMananger.bStopMenuSound();
                _soundMananger.bPlayMenuSound();
            }

            _background = CCSprite.sprite("Image/Gameover and Clear/Over_Bg.png");
            _background.setScaleX(scaleX);
            _background.setScaleY(scaleY);
            _background.setPosition(CGPoint.ccp(size.width/2, size.height/2));
            this.addChild(_background);

            CCMenuItemImage menuItem = CCMenuItemImage.item("Image/Gameover and Clear/MaiinNenu_n.png", "Image/Gameover and Clear/MaiinNenu_d.png", this, "menuAction");
            menuItem.setScaleX(scaleX);
            menuItem.setScaleY(scaleY);
            _menu = CCMenu.menu(menuItem);
            _menu.setPosition(CGPoint.ccp(size.width*1.0f/2.0f, size.height*3.0f/10.0f));
            this.addChild(_menu);

            menuItem.setPosition(CGPoint.ccp(menuItem.getPosition().x-50.0f, menuItem.getPosition().y));
            CCMoveBy dropTitle = CCMoveBy.action(1.5f, CGPoint.ccp(50.0f, 0.0f));
            CCEaseBounceOut easeDrop = CCEaseBounceOut.action(dropTitle);
            menuItem.runAction(easeDrop);

            CCMenuItemImage restartItem = CCMenuItemImage.item("Image/Gameover and Clear/Restart_n.png", "Image/Gameover and Clear/Restart_d.png", this, "restartAction");
            restartItem.setScaleX(scaleX);
            restartItem.setScaleY(scaleY);
            _restart = CCMenu.menu(restartItem);
            _restart.setPosition(CGPoint.ccp(size.width/2.0f, (float) (size.height*4.2f/10.0f)));
            this.addChild(_restart);

            restartItem.setPosition(CGPoint.ccp(restartItem.getPosition().x+50.0f, restartItem.getPosition().y));
            dropTitle = CCMoveBy.action(1.5f, CGPoint.ccp(-50.0f, 0.0f));
            easeDrop = CCEaseBounceOut.action(dropTitle);
            restartItem.runAction(easeDrop);


    //      CCMenuItemImage shareI = CCMenuItemImage.item("Image/MainMenu/share.png", "Image/MainMenu/Share.png", this, "Share");
            fb.setScaleX(scaleX);
            fb.setScaleY(scaleY);
            _restart = CCMenu.menu(shareI);
            _restart.setPosition(CGPoint.ccp(size.width/2.0f, (float) (size.height*1.5f/10.0f)));
            this.addChild(_restart);

            shareI.setPosition(CGPoint.ccp(restartItem.getPosition().x+50.0f, restartItem.getPosition().y));
            dropTitle = CCMoveBy.action(1.5f, CGPoint.ccp(-160.0f, 0.0f));
            easeDrop = CCEaseBounceOut.action(dropTitle);
            shareI.runAction(easeDrop);

I wan to handle the click.. How do i Do that? I want to show createChooser dialog when user press on the share icon.

            Intent iShare = new Intent(Intent.ACTION_SEND);
        iShare.setType("text/plain");
        iShare.putExtra(Intent.EXTRA_SUBJECT, "Download The Game");
        iShare.putExtra(Intent.EXTRA_TEXT, "Get The Game"+" "+"https://play.google.com/store/apps/details?id=com.jdtfans.jdtfootballkickers");
        startActivity(Intent.createChooser(iShare,"Share Via"));


Above code i want to use when user press share icon. How do i do that?


            float scaleFactor = CCDirector.sharedDirector().winSize().height/1024 * 2.3f;

            _yourScore = CCLabel.makeLabel(String.format("%d", BeetleshotMainActivity.app._score), CGSize.make(120.0f*scaleFactor, 60.0f*scaleFactor), TextAlignment.CENTER, "Font/Imagica.ttf", 24.0f*scaleFactor);_yourScore.setPosition(CGPoint.ccp(size.width*1.32f/2.0f, (float) (size.height*1.12/2.0f)));

            this.addChild(_yourScore);
            _yourScore.setColor(ccColor3B.ccBLUE);

            // add this 
            _bestScore = CCLabel.makeLabel(String.format("%d", GameScene._hScoreValue), CGSize.make(120.0f*scaleFactor, 60.0f*scaleFactor), TextAlignment.CENTER, "Font/Imagica.ttf", 24.0f*scaleFactor);_bestScore.setPosition(CGPoint.ccp(size.width*1.32f/2.0f, (float) (size.height*1/2.0f)));

            this.addChild(_bestScore);
            _bestScore.setColor(ccColor3B.ccBLUE);
            //
            switch(BeetleshotMainActivity.app._locationLevel) {
                case 1:
                    BeetleshotMainActivity.app._level = 1;
                    break;
                case 2:
                    BeetleshotMainActivity.app._level = 2;
                    break;
                case 3:
                    BeetleshotMainActivity.app._level = 3;
                    break;
                default:
                    break;
            }

            int currentScore = BeetleshotMainActivity.app._score;   
            BeetleshotMainActivity.app._score = 0;      

            if (BeetleshotMainActivity.app._location == 1) {
                switch(BeetleshotMainActivity.app._locationLevel) {
                    case 1:
                        BeetleshotMainActivity.app.loadScore("score1");
                        break;
                    case 2:
                        BeetleshotMainActivity.app.loadScore("score2");
                        break;
                    case 3:
                        BeetleshotMainActivity.app.loadScore("score3");
                        break;
                    default:
                        break;
                }
            }

            if (currentScore > BeetleshotMainActivity.app._score) {
                BeetleshotMainActivity.app._score = currentScore;

                if (BeetleshotMainActivity.app._location == 1) {
                    switch(BeetleshotMainActivity.app._locationLevel) {
                        case 1:
                            BeetleshotMainActivity.app.saveScore("score1");
                            break;
                        case 2:
                            BeetleshotMainActivity.app.saveScore("score2");
                            break;
                        case 3:
                            BeetleshotMainActivity.app.saveScore("score3");
                            break;
                        default:
                            break;
                    }
                }
            }
        }

        public void menuAction(Object sender) {
            if (BeetleshotMainActivity.app._soundplay == true)
                _soundMananger.ePlayButtonClickSound();     
            CCDirector.sharedDirector().replaceScene(CCFadeTransition.transition(0.7f, MenuScene.scene()));
        }

        public void restartAction(Object sender) {
            if (BeetleshotMainActivity.app._soundplay == true)
                _soundMananger.ePlayButtonClickSound();     
            CCDirector.sharedDirector().replaceScene(CCFadeTransition.transition(0.7f, GameScene.scene()));
        }

    }




This is my only activity class that i have in my project.


        /** Called when the activity is first created. */
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            app = this;
            mContext = this;
            requestWindowFeature(Window.FEATURE_NO_TITLE);
            getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
            setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
            ccMacros.CCLOG("BeetleShot Game", "OnCreate");

            RelativeLayout layout = new RelativeLayout(this);
            layout.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

            mGLSurfaceView = new CCGLSurfaceView(this);

            // Create the adView
            adView = new AdView(this, AdSize.BANNER, ADMOB_PUBLISH_ID);

            // Initiate a generic request to load it with an ad
            adView.loadAd(new AdRequest());
            adView.setAdListener(this);
            // Add the adView to it
            RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
                    LayoutParams.WRAP_CONTENT,
                    LayoutParams.WRAP_CONTENT);
            params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM, RelativeLayout.TRUE);
            params.addRule(RelativeLayout.CENTER_HORIZONTAL, RelativeLayout.TRUE);
            adView.setLayoutParams(params);

            layout.addView(mGLSurfaceView);
            layout.addView(adView);
            ////


            // create the interstitial
            interstitial = new InterstitialAd(this, "**********");

            // load interstitialAd
            Ads.loadInterstitialAd(interstitial);

            // set Ad Listener to use the callbacks below
            interstitial.setAdListener(this);
            setContentView(layout);

            CCDirector.sharedDirector().attachInView(mGLSurfaceView);
            CCDirector.sharedDirector().setDisplayFPS(false);
            CCDirector.sharedDirector().setAnimationInterval(1.0f / 30);

            CCTexture2D.setDefaultAlphaPixelFormat(Config.ARGB_8888);

            _soundplay = true;
            _playerSound = true;
            _controlShow = false;
            _playerPos = 1;
            _level = 1;
            _firstBonus = 0;
            _secondBonus = 0;
            _thirdBonus = 0;
            _locationLevel = 1;

            CCDirector.sharedDirector().runWithScene(LogoScene.scene());
        }

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

        @Override
        protected void onResume() {
            super.onResume();       
            CCDirector.sharedDirector().onResume();
        }

        @Override
        protected void onPause() {
            super.onPause(); 
            SoundManager.sharedSoundResourceManager()._soundEngine.pauseSound();
            CCDirector.sharedDirector().onPause();
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();      
            CCDirector.sharedDirector().end();
        SoundManager.releaseSoundResourceManager();
        }

        public void loadScore (String filename) {
            try {
                ccMacros.CCLOG("file reading", "reading scores from " + filename);
                FileInputStream fIn = openFileInput(filename);
                InputStreamReader isr = new InputStreamReader(fIn);
                char[] buf = new char[6];
                isr.read(buf);
                _score = Integer.parseInt(new String(buf).trim());
                isr.close();
                fIn.close();
                ccMacros.CCLOG("file reading result", "" + _score);
            } catch (Exception e) {
            }
        }

        public void saveScore (String filename) {
            try {
                ccMacros.CCLOG("file writing", "writing scores to " + filename);
                FileOutputStream fOut = openFileOutput(filename, MODE_WORLD_READABLE);
                OutputStreamWriter osw = new OutputStreamWriter(fOut); 
                osw.write("" + _score);
                osw.flush();
                osw.close();
                fOut.close();
            } catch (Exception e) {
            }
        }

        public CGPoint getBufPlayerPos() {
            return _m_playerPos;
        }

        public void setBufPlayerPos (CGPoint rpos) {
            _m_playerPos = rpos;
        }

        // Admob Setting


        public void onDismissScreen(Ad arg0) {
            // TODO Auto-generated method stub

        }

        public void onFailedToReceiveAd(Ad arg0, ErrorCode arg1) {
            // TODO Auto-generated method stub

        }

        public void onLeaveApplication(Ad arg0) {
            // TODO Auto-generated method stub

        }

        public void onPresentScreen(Ad arg0) {
            // TODO Auto-generated method stub

        }

        public void onReceiveAd(Ad arg0) {
            // TODO Auto-generated method stub
            //Log.d(TAG, "+++++++++++++ New admob has received! ++++++++++++++");
        }


        Handler handler = new Handler() {
            public void handleMessage(Message msg) {
                if(msg.what == 0) {
                    adView.setVisibility(View.INVISIBLE);
                }
                else {
                    adView.setVisibility(View.VISIBLE);         
                }
            }
        };

        public void setHideAdView(boolean bHide) {
            if(bHide) {
                handler.sendEmptyMessage(0);
            }
            else {
                handler.sendEmptyMessage(1);            
            }
        }

    }

Upvotes: 1

Views: 2510

Answers (1)

Nana Ghartey
Nana Ghartey

Reputation: 7927

Normally, a facade design pattern is used to achieve this but since you already have access to the activity's context in your Scene class via BeetleshotMainActivity.app, you can use that as follows:

In the Main Activity class, define a method to show the interstitial ad. You can use a handler as you did with the setAdView() method, but using the runOnUiThread is much simpler:

public void showInterstitialAd() {  
 runOnUiThread(new Runnable(){
        @Override
        public void run() {
            if (interstitial != null && interstitial.isReady())
            interstitial.show();
        }        
     });

}

Then in your game over constructor, just show the interstitial ad as follows:

 public GameOverScene() {
        super();
        BeetleshotMainActivity.app.setHideAdView(false);
         BeetleshotMainActivity.app.showInterstitialAd();
           -----
           ------
}

The onDismissScreen callback method is called when the user returns to the activity after clicking the ad. So you can "reload" the interstital ad when it's called so ads will be shown on subsequent game overs:

 public void onDismissScreen(Ad arg0) {
        // TODO Auto-generated method stub

 // create the interstitial
        interstitial = new InterstitialAd(this, "***********");

        // load interstitialAd
        Ads.loadInterstitialAd(interstitial);

        // set Ad Listener to use the callbacks below
        interstitial.setAdListener(this);
   }

Upvotes: 1

Related Questions