アドフリくんバナーを表示する「DCAdfurikunBanner」クラス

iPhoneアプリにアドフリくんのモバイルバナー(Ver. 2)を表示する「DCAdfurikunBanner」クラスを作成しました。

公式マニュアルを参考にさせていただき、10秒毎にバナーがリフレッシュされるよう実装しております。ご使用の際は広告枠IDを指定してください。

下記よりサンプルをダウンロード出来ますので、導入の際のお役に立てば幸いです。

ダウンロード

導入準備

1. 広告枠IDの保持

1
NSString *const ADFURIKUN_AD_UNIT_ID = @"広告枠ID";

2. アプリ起動時に初期化

AppDelegate.h

1
#import <ADFMovieReward/ADFmyBanner.h>

AppDelegate.m

1
2
3
4
5
6
7
8
9
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // アドフリくんバナー初期化
    if ([ADFmyNativeAd isSupportedOSVersion]) {
        [ADFmyNativeAd initializeWithAppID:ADFURIKUN_AD_UNIT_ID];
    }

    return YES;
}

e.x. Info.plistの編集

AdMobを使用する場合は Info.plistGADApplicationIdentifierの設定値を追加してください。

クラスの使用方法

1. バナーの表示

1
[[DCAdfurikunBanner sharedManager] showAdBanner:self yPos:0.0];

2. バナーの削除

1
[[DCAdfurikunBanner sharedManager] removeAdBanner];

3. バナーの非表示

1
[[DCAdfurikunBanner sharedManager] hideAdBanner:YES];

4. バナーを最前面に配置

1
[[DCAdfurikunBanner sharedManager] insertAdBanner];

5. バナーの再読み込み

1
[[DCAdfurikunBanner sharedManager] reloadAdBanner];

ソースコード

DCAdfurikunBanner.h

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import <Foundation/Foundation.h>
#import <ADFMovieReward/ADFmyBanner.h>

@interface DCAdfurikunBanner : NSObject <ADFmyNativeAdDelegate> {
    CGFloat bannerY;
    BOOL    isAdfurikunFailed;
}

#pragma mark - property
@property (nonatomic) ADFmyBanner              *bannerAd;
@property (nonatomic) ADFNativeAdInfo          *bannerAdInfo;
@property (nonatomic, strong) UIViewController *currentRootViewController;
@property (nonatomic, assign) NSTimer          *refreshTimer;
@property (nonatomic, assign) BOOL             loaded;

#pragma mark - public method
+ (id)sharedManager;
- (void)showAdBanner:(UIViewController *)viewController yPos:(CGFloat)yPos;
- (void)removeAdBanner;
- (void)hideAdBanner:(BOOL)hidden;
- (void)insertAdBanner;
- (void)reloadAdBanner;

@end

DCAdfurikunBanner.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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
#import "DCAdfurikunBanner.h"

@implementation DCAdfurikunBanner

@synthesize bannerAd                  = _bannerAd;
@synthesize bannerAdInfo              = _bannerAdInfo;
@synthesize currentRootViewController = _currentRootViewController;
@synthesize refreshTimer              = _refreshTimer;
@synthesize loaded                    = _loaded;

#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)showAdBanner:(UIViewController *)viewController yPos:(CGFloat)yPos
{
    [self removeAdBanner];

    if (![viewController isEqual:self.currentRootViewController]) {
        self.currentRootViewController = viewController;
    }

    bannerY = yPos;

    _bannerAd = [ADFmyBanner createInstance:ADFURIKUN_AD_UNIT_ID"];
    [_bannerAd loadAndNotifyTo:self];
}

// バナー削除
- (void)removeAdBanner
{
    if (_bannerAdInfo) {
        [_bannerAdInfo.mediaView removeFromSuperview];
        _bannerAdInfo.mediaView = nil;
        _bannerAdInfo = nil;
    }

    [self clearRefreshTimer];
}

// バナー非表示
- (void)hideAdBanner:(BOOL)hidden
{
    if (_bannerAdInfo) {
        _bannerAdInfo.mediaView.hidden = hidden;
    }
}

// バナーを最前面に配置
- (void)insertAdBanner
{
    if (_bannerAdInfo) {
        NSUInteger subviewsCount = [[self.currentRootViewController.view subviews] count];
        [self.currentRootViewController.view insertSubview:_bannerAdInfo.mediaView atIndex:subviewsCount + 1];
    }
}

// バナーの再読み込み
- (void)reloadAdBanner {
    if (_bannerAdInfo) {
        [self removeAdBanner];
        [_bannerAd loadAndNotifyTo:self];
    }
}

#pragma mark - Refresh Timer

// 広告の自動更新タイマー開始
- (void)startRefreshTimer
{
    _refreshTimer = [NSTimer scheduledTimerWithTimeInterval:10.0 repeats:YES block:^(NSTimer * _Nonnull timer) {
        [self reloadAdBanner];
    }];
}

// 広告の自動更新タイマー削除
- (void)clearRefreshTimer
{
    if (_refreshTimer != nil) {
        [_refreshTimer invalidate];
        _refreshTimer = nil;
    }
}

#pragma mark - delegate method

// バナーの取得に成功した時に呼ばれる
- (void)onNativeAdLoadFinish:(ADFNativeAdInfo *)info appID:(NSString *)appID
{
    //NSLog(@"onNativeAdLoadFinish");

    _bannerAdInfo = info;

    CGFloat const bannerWidth  = self.currentRootViewController.view.frame.size.width;
    CGFloat const bannerHeight = 50.0;

    _bannerAdInfo.mediaView.frame = CGRectMake(0.0, bannerY, bannerWidth, bannerHeight);
    [self.currentRootViewController.view addSubview:_bannerAdInfo.mediaView];
    [_bannerAdInfo playMediaView];

    [self clearRefreshTimer];
    [self startRefreshTimer];

    _loaded = YES;

    isAdfurikunFailed = !_loaded;
}

// バナーの取得に失敗した時に呼ばれる
- (void)onNativeAdLoadError:(ADFMovieError *)error appID:(NSString *)appID
{
    //NSLog(@"Failed to load native ad, error code=%lu, error message=\"%@\"", (unsigned long)error.errorCode, error.errorMessage);

    _loaded = NO;

    isAdfurikunFailed = !_loaded;

    // バナー再読み込み
    [self showAdBanner:self.currentRootViewController yPos:bannerY];
}

@end

関連記事

About

廣川政樹 (@dolice_apps)

テクニカルアーティスト 廣川政樹の開発ブログ。Objective-Cや Javaなど iPhone/Androidアプリ開発に関する技術情報を掲載しています。

iPhone apps

  • リラックス・ヒーリング
  • 望みが叶う!引き寄せの法則アプリ
  • 泣ける話 - 感動のエピソードまとめ - ラクリマ
  • ミステリー - 怖い話や不思議な体験、都市伝説まとめ
  • 浮世絵壁紙 - 美しい日本画ギャラリー
  • 綺麗な壁紙

Android apps

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

Objective-C Classes

Tag Cloud

ActionScript(9) ActionScript3(7) Ad(5) Adfurikun(2) AdMob(12) Android(11) 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(49) CLLocationManager(1) ConnectivityManager(1) ContentResolver(1) CoreLocation(2) Delegate(3) Device(7) Display(1) DisplayMetrics(1) Download(109) 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(24) iPhone 6(4) Java(7) JavaScript(2) LINE(4) Localize(1) Magazine(3) 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(229) PHP(1) Products(17) 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) Uncategorized(1) UserNotifications(1) WindowManager(1) Xcode(48) Xcode 5(8) Xcode 5.1(2)