[iOS][cocos2d v2.x]CCLayerからinterstitial広告の表示

最近のAppleの審査でReject連発でへこんでいます。一回で全部の指摘をいってほすぃなぁとか・・・ しかもiOS8とiphone6,6+,ipadのリリースで審査が激混みです・・・

それはそうと、まだCocos2d-iphoneのしかもver2.xを使っているのかと言われそうですが、手を付けていたのが v2.xでして・・・v3.xに書き換えるのもめんどくさいし・・・ゴニョゴニョ

え?Cocos2d-xじゃねーの?って・・・2d-xもインストールはして、使えるんですけど・・・ゴニョゴニョ

まぁ、何かも役に立つかもしれないので、CCLayerから、interstitialを使う方法をちょっと御紹介します。

https://developers.google.com/mobile-ads-sdk/docs/admob/ios/interstitial?hl=ja

これをみると、最終的にViewControllerに渡すみたいなんです。 いろいろ、見てみても今一、ピンとくる方法がなくてAppControllerからビューコントローラーを取得してそれに入れよーか とも思ったんですが、InterstitialViewControllerを作って、生成時にリクエストを行い、表示するという方法で やってみました。

では、コード

InterstitialViewController.h

#import <UIKit/UIKit.h>
#import "GADInterstitial.h"

@interface InterstitialViewController : UIViewController{
        GADInterstitial *interstitial;
}

- (id)init;
- (BOOL)interstitialIsReady;

@end

InterstitialViewController.m

#import "InterstitialViewController.h"

@interface InterstitialViewController ()

@end

@implementation InterstitialViewController

- (id)init {
    if (self = [super init]) {
        //インタースティシャル広告準備
        interstitial = [[GADInterstitial alloc] init];
        interstitial.adUnitID = ADMOB_INT_ID;
        GADRequest *request = [GADRequest request];
        // Requests test ads on simulators.
        //request.testDevices = @[ GAD_SIMULATOR_ID ];
        [interstitial loadRequest:request];
    }
    return self;
}

- (BOOL)interstitialIsReady{
    
    return [interstitial isReady];
    
}

- (void)viewDidLoad {
    [super viewDidLoad];
}

- (void)viewDidAppear:(BOOL)animated{
    if(![interstitial hasBeenUsed]){
        [interstitial presentFromRootViewController:self.view.window.rootViewController];
    }
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
}
@end

で、CCLayerでどう使うかというと抜粋コード SenceLayer.m

-(id) init
{
    if( (self=[super init])) {
        //ivcはInterstitialViewControllerのインスタンスでメンバ変数として.hで宣言しといてください
        ivc = [[InterstitialViewController alloc]init];
     }
}

// ---- 他の無関係コード

//戻るボタンを押したときに呼ばれる このときにインタースティシャル広告の表示
-(void)back_btn_push:(id)sender{
    //HogeHogeLayerに戻る
    [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:0.5f scene:[HogehogeLayer scene]]];
 
    //準備が出来れていればインタースティシャルを表示
    if ([ivc interstitialIsReady]) {
        NSLog(@"インタースティシャルロード完了済");
        [[[CCDirector sharedDirector] view] addSubview:ivc.view];
    }
}

まぁ、なんてことはないんですが、こうしとけば、いちいちCCLayer毎にコードを書かなくても、InterstitialViewControllerを 呼び出せば使えるんではないでしょうか〜。