2013年03月31日

広告バナーの微調整だけ

あれ?今週、なんにもやってない。

GitHubのCommit履歴は1件。

3月30日、広告バナーをプレイ中は表示しないように変更。ハイスコア表示を削除。残機・スコア表示位置調整。タイトルシーンのボタン位置調整。

傾撃のときは左下の部分がデッドスペースになっていたので広告バナーをずっと表示しっぱなしにしていたんですけど、今回はさすがに邪魔くさいのでプレイ中は表示しないようにしました。それに合わせてスコアとかの表示位置を表示してみたり。

今週はこれだけ。10分くらいしか作業してません。

若干仕事が忙しかったというのもありますが、どっちかというとBook Questとフェアルーンのせい。どちらも無料のアクションRPGですが、アクションRPGってやっぱり面白いですね。とりとま作り終わったら次はアクションRPG作りたいです。

BOOK QUEST - Naoki Yokota
フェアルーン - URARA-WORKS Co., Ltd.
ラベル:とりとま
posted by かねだ at 22:56| Comment(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

2013年03月30日

AdMobメディエーションでiAd、AdMob、AppBankNetworkを切り替えて使う方法(後編)

前回の続きです。

今回はプログラミングの方法について書いていこうと思います。

AdMobメディエーションで複数サービスを切り替える場合も通常のAdMobのバナーを出す場合とほとんどやることは同じです。違うのは使用するパブリッシャーIDをアプリケーションのものではなく、メディエーションのものを使用するということ、カスタムイベントを受け取るためのクラスを用意することだけです。

というわけで、まずはAdMobのバナーを表示する処理を作っていきます。参考したのは公式のサイトです。

Google AdMob Ads iOS(初級)

UIViewControllerについて

GADBannerViewが広告バナーのクラスなので、これを作成してやれば広告表示ができることになります。上の公式サイトによるとUIViewControllerに追加するとあります。

ところで、私はcocos2dを使ったアプリしか作ったことがないので、実はUIViewControllerとか言われても何のことかわからなかったりします。この辺、基本的な知識なしで適当に試行錯誤して作っているのでもしかすると変なやり方しているかもしれません。

で、cocos2dでプロジェクトを新規作成するとUIViewControllerなんてものはないことに気付きます。代わりにAppDelegate.hを見てみるとUINavigationController *navController_というものがあります。これを拡張して機能を実装しようと思います。

まずはUINavigationControllerを継承したクラスを作成します。傾撃ではAKNavigationControllerというクラスを作成してみました。

AKNavigationController.h
AKNavigationController.m

ここでは定義に必要最低限のものを抜き出してみます。

// AKNavigationController.h

// GADBannerViewを使うためにインポートします
#import "GADBannerView.h"

// UINavigationControllerのカスタマイズ
@interface AKNavigationController : UINavigationController {
    
    /// 広告バナー
    GADBannerView *bannerView_;
}

/// 広告バナー
@property (nonatomic, retain)GADBannerView *bannerView;

バナーの生成と削除

バナーの生成はViewDidLoadで、バナーの削除はViewDidUnLoadで行います。ViewDidLoadはビューが表示されるとき、ViewDidUnLoadはメモリ不足時に呼ばれるそうです。ViewDidUnLoadはビューを閉じるときには呼ばれないそうなのでdeallocで呼んだ方が良さそうです。

// AKNavigationController.m

@synthesize bannerView = bannerView_;

- (void)viewDidLoad
{
    // スーパークラスの処理を実行する
    [super viewDidLoad];

    // 画面下部に標準サイズのビューを作成する
    self.bannerView = [[[GADBannerView alloc] initWithFrame:CGRectMake(0.0,
                                                                       self.view.bounds.size.height - GAD_SIZE_320x50.height,
                                                                       GAD_SIZE_320x50.width,
                                                                       GAD_SIZE_320x50.height)]
                       autorelease];
    
    // 広告の「ユニット ID」を指定する。これは AdMob パブリッシャー ID です。
    self.bannerView.adUnitID = kAKAdMobID;
    
    // デリゲートを設定する
    //self.bannerView.delegate = self;

    // ユーザーに広告を表示した場所に後で復元する UIViewController をランタイムに知らせて
    // ビュー階層に追加する。
    self.bannerView.rootViewController = self;
    [self.view addSubview:self.bannerView];
    
    // 広告リクエストを作成する
    GADRequest *request = [GADRequest request];
    
    // リクエストを行って広告を読み込む
    [self.bannerView loadRequest:request];
}

- (void)viewDidUnload
{
    // バナーを取り除く
    [self.bannerView removeFromSuperview];
    
    // デリゲートを削除する
    self.bannerView.delegate = nil;

    // バナーを削除する
    self.bannerView = nil;
    
    // スーパークラスの処理を実行する
    [super viewDidUnload];
}

NavigationController派生クラスの生成

上で作成したNavigationController派生クラスをAppDelegateで生成します。まずはAppControllerのメンバをUINavigationControllerからNavigationController派生クラスへ変更します。

// AppDelegate.h

// 自作NavigationContllerのインポート
#import "AKNavigationController.h"

// Application controller
@interface AppController : NSObject 
{
    /// Main window
    UIWindow *window_;
    /// Navigation controller
    AKNavigationController *navController_;  // ←UINavigationControllerから変更
    /// Director
    CCDirectorIOS *director_;    // weak ref
}

次にUINavigationControllerをallocしているところを変更します。

// AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    /* 略 */

    // Create a Navigation Controller with the Director
    // UINavigationControllerから変更
    navController_ = [[AKNavigationController alloc] initWithRootViewController:director_];
    navController_.navigationBarHidden = YES;

    /* 略 */
}

とりあえず、これで実行してみたらバナーが表示されるようになっていると思います。

デリゲートの設定

AdMobバナー関連のイベントを受け取るためにデリゲートを作成します。デリゲートはどのクラスでもいいのですが、バナーを操作することになるのでNavigationController派生クラスに実装するのが楽だと思います。

というわけでNavigationController派生クラスにデリゲートのプロトコルGADBannerViewDelegateを実装していきます。

// AKNavigationController.h

// デリゲートプロトコルのためにインポート
#import "GADBannerViewDelegate.h"

// UINavigationControllerのカスタマイズ
@interface AKNavigationController : UINavigationController {

// AKNavigationController.m

// リクエスト成功時処理
- (void)adViewDidReceiveAd:(GADBannerView *)bannerView
{
    // 画面内に広告を表示する
    bannerView.frame = CGRectMake(0.0,
                                  self.view.bounds.size.height - GAD_SIZE_320x50.height,
                                  bannerView.frame.size.width,
                                  bannerView.frame.size.height);
}

// リクエスト失敗時処理
- (void)adView:(GADBannerView *)bannerView didFailToReceiveAdWithError:(GADRequestError *)error
{
    // ビューの位置を画面外に設定する
    bannerView.frame = CGRectMake(0.0,
                                  -bannerView.frame.size.height,
                                  bannerView.frame.size.width,
                                  bannerView.frame.size.height);
}

// 広告フルスクリーン表示時処理
- (void)adViewWillPresentScreen:(GADBannerView *)bannerView
{
    // 広告フルスクリーン使わなければ処理は不要
}

// 広告フルスクリーン終了時処理
- (void)adViewDidDismissScreen:(GADBannerView *)bannerView
{
    // 広告フルスクリーン使わなければ処理は不要
}

// 広告表示によるバックグラウンド移行時処理
- (void)adViewWillLeaveApplication:(GADBannerView *)bannerView
{
    // [AppController applicationDidEnterBackground:]で処理すればいい
}

あとはviewDidLoadでGADBannerView.delegateに設定してやれば動くようになります。

AppBankNetworkのバナークラス作成

最後にAdMobのカスタムイベントの追加で指定したクラス名のクラスを作成すれば完了です。処理の内容はざっくりとまとめると次のような感じです。

  • AdMobからの広告バナー表示メッセージを受信する
  • AppBankNetworkのバナーを作成する
  • 広告生成をAdMobに通知する

めんどくさくなってきたので、一気にまとめて書きます。

// AKAppBankNetworkBanner.h

#import 
#import "GADCustomEventBanner.h"
#import "NADView.h"

// AppBankNetworkの広告バナー
@interface AKAppBankNetworkBanner : NSObject  {
    /// デリゲート
    id delegate_;
    /// 広告バナー
    NADView *nadView_;
}

/// デリゲート
@property (nonatomic, assign)id delegate;
/// 広告バナー
@property (nonatomic, retain)NADView *nadView;

@end

AppBankNetworkの広告バナーのクラスはNADViewなので、これをメンバに持つようにしてやります。GADBannerViewのときと同じように広告バナーからのイベントを受信できるようにNADViewDelegateプロトコルに対応させます。

AdMobからのメッセージを受信できるようにGADCustomEventBannerプロトコルに対応します。広告生成完了の通知はGADCustomEventBannerDelegateを通してAdMobに通知します。このデリゲートはAdMobの方で設定するようになっているみたいです。

// AKAppBankNetworkBanner.m

// インスタンス解放処理
- (void)dealloc
{
    // メンバを解放する
    self.nadView.delegate = nil;
    self.delegate = nil;
    self.nadView = nil;
    
    // スーパークラスの処理を実行する
    [super dealloc];
}

// 広告バナー表示要求
- (void)requestBannerAd:(GADAdSize)adSize
              parameter:(NSString *)serverParameter
                  label:(NSString *)serverLabel
                request:(GADCustomEventRequest *)request
{
    // 広告バナーを生成する
    self.nadView = [[[NADView alloc] initWithFrame:CGRectMake(0, 0, adSize.size.width, adSize.size.height)] autorelease];
    
    // apiKeyとspotIDを設定する(nendのサイトで確認したもの)
    [self.nadView setNendID:kAPIKey spotID:kSpotID];
    
    // デリゲートを設定する
    self.nadView.delegate = self;
    
    // RootViewControllerを設定する
    self.nadView.rootViewController = [[[UIViewController alloc] init] autorelease];
    
    // 広告を読み込む
    [self.nadView load];
}

// ロード完了処理
- (void)nadViewDidFinishLoad:(NADView *)adView
{
    // AdMobのデリゲートに広告読み込み完了を通知する
    [self.delegate customEventBanner:self didReceiveAd:adView];
}

AdMobがrequestBannerAdを呼び出すので、この中でAppBankNetworkのバナーを作成する。バナーの作成が完了するとAppBankNetworkがnadViewDidFinishLoadを呼び出すのでself.delegateのメソッドを呼んで読み込み完了を通知する。このデリゲートはAdMobで設定しているものなのでこれでAdMobにイベントが伝わるということになります。
posted by かねだ at 23:21| Comment(0) | 開発方法メモ | このブログの読者になる | 更新情報をチェックする

2013年03月24日

Twitter連携と広告表示の実装

今週もGitHubのCommit履歴から。

3月19日、Twitter連携対応。

Twitter連携のためにゲームオーバーとゲームクリアの画面にツイートボタンを配置しました。傾撃のときは気付かなかったんですが、標準のツイートビューは横向き表示だと複数アカウントの切り替えができないという問題があるんですね。本当は縦向きに対応するか、アプリ内でアカウント切り替えとツイート機能を実装するべきなのかもしれませんがそんなに需要も無さそうだし面倒なのでこのままにします。

3月21日、広告処理実装。

今回も広告はiAd、AdMob、AppBankNetworkを使用しようと思います。アイコン型広告のアスタも気になるところですが、そもそも広告云々の前に遊んでもらえるようなゲームを作らないと話にならないのでまた今度にします。

広告処理の実装方法については別記事にメモ書きを載せてみました。ただの箇条書きなので役に立つかどうかは謎です。まあ、たぶん未来の自分には役立つんじゃないでしょうか。

今週もあんまり作業してないですね。明日から本気出したい。
ラベル:とりとま
posted by かねだ at 23:31| Comment(0) | 開発記録 | このブログの読者になる | 更新情報をチェックする

広告


この広告は60日以上更新がないブログに表示がされております。

以下のいずれかの方法で非表示にすることが可能です。

・記事の投稿、編集をおこなう
・マイブログの【設定】 > 【広告設定】 より、「60日間更新が無い場合」 の 「広告を表示しない」にチェックを入れて保存する。


×

この広告は1年以上新しい記事の投稿がないブログに表示されております。