AdMobメディエーション,nend導入手順（Admob6.8.0,nend2.3.2）



##下準備
1,フレームワークの追加

・AVFoundation
・StoreKit
・CoreTelephony
・AudioToolbox
・MessageUI
・SystemConfiguration
・CoreGraphics
・AdSupport

##コード
```.h
#import "GADBannerView.h"
@interface HogeViewController : UIViewController<GADBannerViewDelegate>
```

```.m

@interface HogeViewController ()
{
    GADBannerView* gadView;
    BOOL _bannerIsVisible;
}
@end

#pragma AD

/**
 * 画面を読み込む際の処理
 */
- (void)viewDidLoad
{
    [super viewDidLoad];
    [self initAd];
}

/**
 * Admobの広告を生成
 */
- (void)initAd{
    _bannerIsVisible = NO;
    
    // AdMob設定
    CGFloat adY = self.view.bounds.size.height - GAD_SIZE_320x50.height;
    CGRect bannerFrame = CGRectMake(0, adY, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height);
    
    gadView = [[GADBannerView alloc] initWithFrame:bannerFrame];
    gadView.adUnitID = ADMOB_MEDIATION;
    gadView.rootViewController = self;
    [self.view addSubview:gadView];

    gadView.delegate = self;
    
    GADRequest *request = [GADRequest request];
    request.testDevices = @[GAD_SIMULATOR_ID];//テストでインプレッションが発生しないようにシュミレータのIDを設定
    [gadView loadRequest:request];
}


/**
 * AdMob取得成功
 */
- (void)adViewDidReceiveAd:(GADBannerView *)view
{
    if (!_bannerIsVisible) {
        CGFloat adY = self.view.bounds.size.height - GAD_SIZE_320x50.height;
        CGRect bannerFrame = CGRectMake(0, adY, GAD_SIZE_320x50.width, GAD_SIZE_320x50.height);
        
        [UIView animateWithDuration:0.3 animations:^{
            gadView.frame = bannerFrame;
        }];
        _bannerIsVisible = YES;
    }
}
/**
 * AdMob取得失敗
 */
- (void)adView:(GADBannerView *)view didFailToReceiveAdWithError:(GADRequestError *)error
{
    [gadView removeFromSuperview];
    gadView = nil;
}

```

参考サイト

・<a href="http://neo-shocker.com/code/2014/02/admob-sdk-for-ios-need-frameworks.html" title="AdMob SDK for iOS に必要な framework | CODE | NEO-SHOCKER.COM">AdMob SDK for iOS に必要な framework | CODE | NEO-SHOCKER.COM</a>



・<a href="https://developers.google.com/mobile-ads-sdk/docs/ios/fundamentals?hl=ja" title="Google AdMob Ads iOS（初級） - Google Mobile Ads SDK — Google Developers">Google AdMob Ads iOS（初級） - Google Mobile Ads SDK — Google Developers</a>


<a href="http://tf.hateblo.jp/entry/2013/08/08/190901" title="【iPhoneアプリ】AdMobメディエーションを使ってiAd, AdMob, nendを併用してみた - 夏までにiPhone アプリつくってみっか！">【iPhoneアプリ】AdMobメディエーションを使ってiAd, AdMob, nendを併用してみた - 夏までにiPhone アプリつくってみっか！</a>




##nend2.3.2

・AdmobでnendのAPIkey spotkeyの追加（メディエーションを使用するなら）
・SDKをプロジェクトに追加
・メディエーション用のnendアダプター追加
・以下2つのフレームワークの追加
AdSupport.framework
Security.framework

##nendアイコン型広告（サイズはデフォルトの75*75）

```.h

#import "NADIconLoader.h"

<NADIconLoaderDelegate>//デリゲート追加

```

```.m
@interface HogeViewController ()
{
    NADIconLoader *iconLoader;
    NADIconView *iconView1;
    NADIconView *iconView2;
    NADIconView *iconView3;
    NADIconView *iconView4;
}
@end


/**
 * nendの広告を生成
 */
- (void)initNend{
/*
	フッターに置く場合でメディエーションの上に配置する場合のY座標
	CGFloat adY = self.view.bounds.size.height - GAD_SIZE_320x50.height - 80; 
	iconView1 = [[NADIconView alloc] initWithFrame:CGRectMake(0, adY, 75, 75)];
    iconView2 = [[NADIconView alloc] initWithFrame:CGRectMake(80, adY, 75, 75)];
    iconView3 = [[NADIconView alloc] initWithFrame:CGRectMake(160, adY, 75, 75)];
    iconView4 = [[NADIconView alloc] initWithFrame:CGRectMake(240, adY, 75, 75)];
*/

    //ヘッダーに4つ並べる場合
    iconView1 = [[NADIconView alloc] initWithFrame:CGRectMake(0, 5, 75, 75)];
    iconView2 = [[NADIconView alloc] initWithFrame:CGRectMake(80, 5, 75, 75)];
    iconView3 = [[NADIconView alloc] initWithFrame:CGRectMake(160, 5, 75, 75)];
    iconView4 = [[NADIconView alloc] initWithFrame:CGRectMake(240, 5, 75, 75)];

    
    [self.view addSubview:iconView1];
    [self.view addSubview:iconView2];
    [self.view addSubview:iconView3];
    [self.view addSubview:iconView4];

    iconLoader = [NADIconLoader new];
    [iconLoader setIsOutputLog:YES];
    [iconLoader setDelegate:self];
    
    [iconLoader addIconView:iconView1];
    [iconLoader addIconView:iconView2];
    [iconLoader addIconView:iconView3];
    [iconLoader addIconView:iconView4];

    
#ifdef DEBUG //DEBUGなら検証用広告を読み込む&ログを吐く
    [iconLoader setIsOutputLog:YES];
    [iconLoader setNendID:NEND_TEST_ICON_ID spotID:NEND_TEST_ICON_SPOT];
#else
    [iconLoader setIsOutputLog:NO];
    [iconLoader setNendID:NEND_ICON_ID spotID:NEND_ICON_SPOT];
#endif
    
    [iconLoader load];
}

- (void)dealloc{//これを忘れるとnendが理由でクラッシュする
    [iconLoader setDelegate:nil];
    iconLoader = nil;
}
```

```define
//本番
#define NEND_ICON_ID @"YOUR_NEND_APIKEY"
#define NEND_ICON_SPOT @"YOUR_NEND_SPOTID"

//検証用
#define NEND_TEST_ICON_ID @"2349edefe7c2742dfb9f434de23bc3c7ca55ad22"
#define NEND_TEST_ICON_SPOT @"101281"
```

メディエーションと併用するなら、nendの広告を読み込んでいる、initNendメソッドをinitAdメソッド内で、

```
[self initNend];
```
と書いて広告の生成をまとめておくと、アプリ内課金で広告非表示にする際に、ViewDidLoad内の

```
[self initAd];
```
の部分を読み込むかどうかの判定を入れるだけで、
広告をコントロールできるようになるので良いかもしれない。



SDKのバージョンが上がると、実装方法が変わる可能性が高いため
最新版のマニュアルにも目を通しておく事。
nend2.3.2マニュアル:<a href="http://nend.net/doc/nendSDKiOS2.3.2_manual.pdf" title="nendSDK iOS 設定マニュアル - nendSDKiOS2.3.2_manual.pdf">nendSDK iOS 設定マニュアル - nendSDKiOS2.3.2_manual.pdf</a>

##nend検証用APIKEY & SPOTID

320x50
apikey:a6eca9dd074372c898dd1df549301f277c53f2b9
spotid:3172

320x100
apikey:eb5ca11fa8e46315c2df1b8e283149049e8d235e
spotid:70996

300x100
apikey:25eb32adddc4f7311c3ec7b28eac3b72bbca5656
spotid:70998

300x250
apikey:88d88a288fdea5c01d17ea8e494168e834860fd6
spotid:70356

728x90
apikey:2e0b9e0b3f40d952e6000f1a8c4d455fffc4ca3a
spotid:70999

アイコン
apikey:2349edefe7c2742dfb9f434de23bc3c7ca55ad22
spotid:101281


##nendの×64対応について
・<a href="http://marbleseijin.blog.shinobi.jp/%E3%82%A2%E3%83%97%E3%83%AA%E9%96%8B%E7%99%BA/admob%E3%81%A7%E3%82%82xcode5%E3%81%AB%E3%81%AF%E3%81%BE%E3%82%8B" title="marble seijin の開発日記 admobでもxcode5にはまる">marble seijin の開発日記 admobでもxcode5にはまる</a>