なにやら最近AdMobさんが「FireBase」なるものを使うことを推奨しているらしい。
それを使ってどうなるのかはさっぱりわからんが、何はともあれ入れてみました。
先日WWDCにてiOS11が発表されました。
iOS11の詳細についてはまだここに書くことはできませんが、AppStoreがあれであーなったので、今回appPreview(AppStoreに表示する動画)を作って設定してみました。
その備忘録です。
Adwhirlを入れてはや1ヶ月くらい経ちました。
現在入れているのはiAd、Admob、Admakerの3つですが、iAdはあまりにも効果が少なかったため、その分の通信時間がおしかったので非表示にしてあります。そのため実質AdmobとAdmakerの2つですね。
で、私は広告が表示されていないときは広告のビュー自体を透明化(なんたら.view.alpha = 0.0;)していて、広告を受信したタイミングで透明化をオフにしている(なんたら.view.alpha = 1.0;)のですが、なぜかAdmakerではこれがうまくいかない。Admobではちゃんと動いているのに。
というわけでいろいろ試してみたところ、広告が受信されたタイミングで実行されるAdwhrlの関数である「adWhirlDidReceiveAd」が、Admakerでは実行されていない感じでした。Admobではちゃんと実行されるので、もしかしたらユーザー側で追加した「Custom Event」では「adWhirlDidReceiveAd」関数は呼ばれないのかもしれません。
というわけでしょうがないから下記のようにAdmaker側の広告を受信したタイミングで実行される「didLodAdMakerView」関数の中で不透明化(なんたら.view.alpha = 1.0;)を実行させることで対応しました。
ソースの一部は下記のとおり。
- (void)viewDidLoad { [super viewDidLoad]; // 以下、Admaker----------------- AdMaker = [[AdMakerView alloc] init]; [AdMaker setAdMakerDelegate:self]; [AdMaker setFrame:CGRectMake(0, 0, 320, 50)]; [AdMaker start]; // 広告が受信されるまではAdmakerの広告枠自体を非表示 AdMaker.view.alpha = 0.0; // 以上、Admaker----------------- //adwirl [super viewDidLoad]; self.awView = [AdWhirlView requestAdWhirlViewWithDelegate:self]; [self.view addSubview:awView]; awView.frame = CGRectMake(0.0, self.view.frame.size.height - GAD_SIZE_320x50.height - 44,GAD_SIZE_320x50.width, GAD_SIZE_320x50.height); awView.delegate = self; awView.alpha = 0.0; } // Adwhirl側の広告受信時に実行される関数 - (void)adWhirlDidReceiveAd:(AdWhirlView *)adWhirlView{ // Admobは広告受信時のこの関数が実行されるが、Admakerはなぜか実行されない awView.alpha = 1.0; } // AdMaker側の広告受信時に実行される関数 - (void)didLoadAdMakerView:(AdMakerView*)view{ // しょうがないのでAdmaker側に「awView.alpha = 1.0;」を追加 AdMaker.view.alpha = 1.0; awView.alpha = 1.0; }
前回の記事(iPhoneアプリにAdwhirlを設置してiAdとAdmobを切り替える方法)でAdwhirlにAdmobとiAdを組み込みました。
今回は、国内のスマートフォン広告の一つAdmakerをAdwhirlへ組み込む方法をご説明します。しかし、AdLantisやAMoAd、AppBank Networkなども同じ手順でできます。
なお、前回の記事で説明した内容を既に設定済みであることを前提に説明してありますので、まずは前回の記事をご覧ください。
まず、アプリをAdmakerに登録します。
AdmakerはAdmobと違い、アプリを登録をしてから審査があります。審査期間は長くて1週間くらいだったと思うので、なるべく早く済ましておきましょう。
Adwhirlへログインし、Admakerを組み込みたいアプリを選択します。
アプリの管理画面が表示されるので、「Add Custom Event」を選択し、下記のように項目を入力してください。
Name:Admaker
Function Name:performEventAdMaker
AdmakerからダウンロードできるSDKの中にinstall.pdfという説明資料が入っているので、そちらを参考にコードやファイルを追加してください。
下記のコードをビューコントローラーの.mにコピペしてください。
- (void)performEventAdMaker:(AdWhirlView *)adWhirlView { [AdMaker setFrame:kAdWhirlViewDefaultFrame]; [adWhirlView replaceBannerViewWith:AdMaker.view]; }
上記のperformEventAdMakerを使うことで、Adwhirl側で広告の表示を管理します。そのためAdmaker側の広告表示プログラムは使わないの下記の部分をコメントアウトします。
//広告の取得に成功 - (void)didLoadAdMakerView:(AdMakerView*)view { // 下記をコメントアウトにする //[self.view addSubview:AdMaker.view]; }
これですべての作業は完了です。
ここではAdmakerを組み込みましたが、AdLantisやAppBank Network、AMoAdなども同じような感じでいけますので、もしそちらも組み込みたい場合はやってみてください。
広告ネットワークの比較はこちらの記事で紹介しています。
なお、上記のAdmakerをAdwhirlに組み込む方法は、パンダアプリなどの人気アプリを開発されているムラモトタケシ様から教えて頂いた内容を私の方で少し改変したものです(AdmakerSDKがバージョンアップしたため改変が必要になった)。
ムラモト様、とても親切に教えていただき本当にありがとうございました!ムラモト様の開発された人気楽器アプリ「パンダピアノ」やパズルアプリ「iMake10」などはこちら
※なお、ムラモト様に教えて頂いた時点で問題なくAdmakerの表示が確認できているため、今回の記事で紹介したコードを試してAdmakerが表示されない場合、完全に私のミスです。
もし表示されない場合はご連絡くださいませ。
iPhoneで音を鳴らすには少なくとも2つ方法があります(3つあった気もするけどあと1つ忘れた)。
1つはSystemSoundIDを使う方法、もう1つはAudio Queue Servicesを使う方法です。
それぞれに特性や使い方が違うので、1つずつ見て行きましょう。
○特徴
○使い方
// ヘッダーファイル @interface hogeViewController { SystemSoundID soundID; } - (IBAction)sounds01; // 実装ファイル @implementation hogeViewController - (IBAction)sounds01 { NSString *path = [[NSBundle mainBundle]pathForResource:@"1" ofType:@"caf"]; NSURL *url = [NSURL fileURLWithPath:path]; AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID); //サウンドを鳴らす AudioServicesPlaySystemSound(soundID); } // あとはInterface builderでボタンなどに対してsounds01をActionとしてひもづける // 必要なフレームワークはAudioToolbox.framework
○コメント
とってもシンプルなSystemSoundIDですが、いろいろと制約があるので使いにくい場面があるかもしれません。
そんなときは次のAudio Queue Servicesを使いましょう。
○特徴
○使い方
// ヘッダーファイル @interface hogeViewController { AVAudioPlayer *player; } @property (nonatomic, retain) AVAudioPlayer *player; - (IBAction)sounds01; // 実装ファイル @implementation hogeViewController @synthesize player; - (IBAction)sounds01 { NSString *path; NSURL *url; path = [[NSBundle mainBundle] pathForResource:@"0_1" ofType:@"caf"]; url = [NSURL fileURLWithPath:path]; self.newPlay = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:nil]; // ここでループの回数を指定する。無限の場合はマイナスの数値を指定。 self.newPlay.numberOfLoops = 0; self.player = self.newPlay; //サウンドを鳴らす [self.player play]; } // 必要なフレームワークはAVFoundation.framework
○コメント
ループの回数等も指定できるので、通常はSystemSoundIDではなくこちらを使うべきだと思います。
SystemSoundIDだとAdmob広告などを表示させるだけで、ネットワーク通信を使うので音量調節ができなくなりますしね。