iOSアプリに AdMobネイティブ広告を表示するクラスを作成しました

iOSアプリに AdMobネイティブ広告を表示する「DCAdMobNativeAds」クラスを作成しました。

下記よりダウンロード出来ますので、実装の際のお役に立てば幸いです。

ダウンロード

使用方法

A. ネイティブ広告を指定したビューに配置

1
2
3
4
5
6
7
CGFloat const nativeAdsWidth  = [[UIScreen mainScreen] bounds].size.width;
CGFloat const nativeAdsHeight = 80.0;

UIView *nativeAdsView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, nativeAdsWidth, nativeAdsHeight)];
[[DCAdMobNativeAds sharedManager] showNativeAd:self targetView:nativeAdsView
                                         frame:CGRectMake(0.0, 0.0, nativeAdsWidth, nativeAdsHeight)];
[self.view addSubView:nativeAdsView];

B. ネイティブ広告を取得し配置

1
2
3
4
5
6
CGFloat const nativeAdsWidth  = [[UIScreen mainScreen] bounds].size.width;
CGFloat const nativeAdsHeight = 80.0;

UIView *nativeAdsView = [[DCAdMobNativeAds sharedManager] nativeAd:self
                                                             frame:CGRectMake(0.0, 0.0, nativeAdsWidth, nativeAdsHeight)];
[self.view addSubView:nativeAdsView];

ネイティブ広告の寸法について

AdMobネイティブ広告の縦幅は、80dp 以上である必要があります。それ未満のサイズを指定するとエラー取得時のデリゲートメソッドが呼ばれ、広告は表示されません。

横幅の最小値については未検証ですが、ネイティブ広告のユニット作成時にプレビューサイズを指定する際、280dp 以上である必要がありますので、恐らく 280dp が最小値だと思います。

iPhoneは 4-inch/ 4.7-inch/ 5.5-inch で横幅が異なりますので、今回のサンプルでは横幅一杯に指定する方法を取っています。

ネイティブ広告初期化の際、下記のように縦幅 80dp 以上のサイズを指定することで正常に表示されました。

1
2
3
CGSize const nativeAdsSize = CGSizeMake([[UIScreen mainScreen] bounds].size.width, 80.0);
self.nativeExpressAdView = [[GADNativeExpressAdView alloc] initWithAdSize:GADAdSizeFromCGSize(nativeAdsSize)
                                                                       origin:CGPointMake(0.0, 0.0)];

ソースコード

DCAdMobNativeAds.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import <UIKit/UIKit.h>

@import GoogleMobileAds;

@interface DCAdMobNativeAds : NSObject <GADNativeExpressAdViewDelegate> {
    GADNativeExpressAdView *nativeExpressAdView;
}

#pragma mark - property
@property (nonatomic, strong) GADNativeExpressAdView *nativeExpressAdView;

#pragma mark - public method
+ (id)sharedManager;
- (void)showNativeAd:(UIViewController *)viewController targetView:(UIView *)targetView frame:(CGRect)frame;
- (UIView *)nativeAd:(UIViewController *)viewController frame:(CGRect)frame;

@end

DCAdMobNativeAds.m

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#import "DCAdMobNativeAds.h"

@implementation DCAdMobNativeAds

@synthesize nativeExpressAdView = nativeExpressAdView;

CGFloat const GAD_NATIVE_UNIT_ID = @"Your Unit ID here";
BOOL    const GAD_TEST_MODE      = YES;

#pragma mark - Shared Manager

static id sharedInstance = nil;

+ (id)sharedManager
{
    @synchronized(self) {
        if (!sharedInstance) {
            sharedInstance = [[self alloc] init];
        }
    }

    return sharedInstance;
}

#pragma mark - public method

- (void)showNativeAd:(UIViewController *)viewController targetView:(UIView *)targetView frame:(CGRect)frame
{
    self.nativeExpressAdView = [[GADNativeExpressAdView alloc] initWithAdSize:GADAdSizeFromCGSize(frame.size)
                                                                       origin:frame.origin];
    self.nativeExpressAdView.adUnitID = GAD_NATIVE_UNIT_ID;
    self.nativeExpressAdView.rootViewController = viewController;
    self.nativeExpressAdView.delegate = self;
    [targetView addSubview:self.nativeExpressAdView];

    GADRequest *request = [GADRequest request];
    if (GAD_TEST_MODE) {
        request.testDevices = @[kGADSimulatorID];
    }
    [self.nativeExpressAdView loadRequest:request];
}

- (UIView *)nativeAd:(UIViewController *)viewController frame:(CGRect)frame
{
    self.nativeExpressAdView = [[GADNativeExpressAdView alloc] initWithAdSize:GADAdSizeFromCGSize(frame.size)
                                                                       origin:frame.origin];
    self.nativeExpressAdView.adUnitID = GAD_NATIVE_UNIT_ID;
    self.nativeExpressAdView.rootViewController = viewController;
    self.nativeExpressAdView.delegate = self;

    GADRequest *request = [GADRequest request];
    if (GAD_TEST_MODE) {
        request.testDevices = @[kGADSimulatorID];
    }
    [self.nativeExpressAdView loadRequest:request];

    return self.nativeExpressAdView;
}

#pragma mark - delegate method

- (void)nativeExpressAdViewDidReceiveAd:(GADNativeExpressAdView *)nativeExpressAdView
{
    //NSLog(@"nativeExpressAdViewDidReceiveAd");
}

- (void)nativeExpressAdView:(GADNativeExpressAdView *)nativeExpressAdView didFailToReceiveAdWithError:(GADRequestError *)error
{
    //NSLog(@"nativeExpressAdView: didFailToReceiveAdWithError");
}

- (void)nativeExpressAdViewWillPresentScreen:(GADNativeExpressAdView *)nativeExpressAdView
{
    //NSLog(@"nativeExpressAdViewWillPresentScreen");
}

- (void)nativeExpressAdViewWillDismissScreen:(GADNativeExpressAdView *)nativeExpressAdView
{
    //NSLog(@"nativeExpressAdViewWillDismissScreen");
}

- (void)nativeExpressAdViewDidDismissScreen:(GADNativeExpressAdView *)nativeExpressAdView
{
    //NSLog(@"nativeExpressAdViewDidDismissScreen");
}

- (void)nativeExpressAdViewWillLeaveApplication:(GADNativeExpressAdView *)nativeExpressAdView
{
    //NSLog(@"nativeExpressAdViewWillLeaveApplication");
}

@end

関連記事

お薦めの参考書

本気ではじめるiPhoneアプリ作り Xcode 7.x+Swift 2.x対応
iOSアプリ開発をこれから始める方に最もお薦めな一冊です。解り辛い点は図解入りで解説されており、プログラミングの動作の仕組みから詳しく知ることができます。基本から通信処理まで押さえられており、アプリ公開の手順についても解説されています。

   このエントリーをはてなブックマークに追加

About

Masaki Hirokawa (@dolice_apps)

デザインエンジニア 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング(無料)
  • 望みが叶う!引き寄せの法則アプリ(無料)
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー(無料)
  • 綺麗な壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)
  • クールな壁紙HD iPhone 7/7 Plus/SE & iPod対応(無料)

Android apps

  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な高画質壁紙

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(4) Adfurikun(2) AdMob(9) Android(10) Animation(17) AppDelegate(3) ARC(1) ArrayList(1) AVAudioPlayer(4) AVAudioSession(1) AVFoundation(3) Banner(2) Bitmap(1) Camera(4) CGAffineTransform(4) CGBlendMode(2) CGContextRef(1) CGImageRef(1) Classes(44) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(101) Facebook(6) Foundation(72) Framework(2) Google Analytics(1) Handler(1) iAd(6) ImageView(1) In-AppPurchase(1) iOS(12) iOS 7(15) iOS 7.1(3) iOS 8(1) iPad(7) iPhone(21) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(1) MediaStore(1) MFComposeViewController(1) Nend(1) NetworkInfo(1) NSArray(23) NSCalendar(3) NSData(2) NSDate(7) NSDateComponents(2) NSDateFormatter(2) NSDictionary(12) NSEnumerator(1) NSIndexSet(1) NSInteger(6) NSMutableArray(17) NSMutableDictionary(5) NSMutableOrderedSet(7) NSMutableString(4) NSMutableURLRequest(1) NSNotificationCenter(1) NSNumber(1) NSObject(1) NSOrderedSet(7) NSRange(2) NSSelectorFromString(1) NSSet(6) NSString(19) NSTimer(4) NSTimeZone(1) NSURL(7) NSURLConnection(1) NSURLRequest(2) NSUserDefaults(7) NSXMLParser(2) Objective-C(222) PHP(1) Products(14) QuartzCore(3) RSS(2) Runnable(1) Sample(51) Screensaver(9) SDK(2) ShareCompat(1) Social(10) StoreKit(1) Twitter(6) UIAccelerometer(3) UIActionSheet(1) UIActivityIndicator(1) UIActivityIndicatorView(3) UIActivityViewController(1) UIAlertView(5) UIApplication(7) UIButton(4) UIColor(3) UIDatePicker(5) UIDevice(6) UIDeviceOrientation(1) UIEvent(6) UIImage(15) UIImagePickerController(4) UIImageView(12) UIKit(58) UILabel(7) UINavigationBar(4) UINavigationItem(1) UIPasteboard(4) UIScreen(1) UIScrollBar(1) UIScrollView(1) UISlider(3) UIStoryboardSegue(3) UISwitch(1) UITabBar(3) UITableView(4) UITextField(2) UIView(11) UIViewAnimationTransition(1) UIViewController(4) UIWebView(5) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)