カテゴリー: iPhone関連のプログラムなど

AppStoreのappPreviewsをiMovieやAdobe Premiereで作って設定してみた

先日WWDCにてiOS11が発表されました。

iOS11の詳細についてはまだここに書くことはできませんが、AppStoreがあれであーなったので、今回appPreview(AppStoreに表示する動画)を作って設定してみました。

その備忘録です。

続きを読む

AdwhirlのadWhirlDidReceiveAdはCustom Eventには効かない?



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;
}

AdwhirlにCustom EventとしてAdmakerを組み込む方法



前回の記事(iPhoneアプリにAdwhirlを設置してiAdとAdmobを切り替える方法)でAdwhirlにAdmobとiAdを組み込みました。

今回は、国内のスマートフォン広告の一つAdmakerをAdwhirlへ組み込む方法をご説明します。しかし、AdLantisやAMoAd、AppBank Networkなども同じ手順でできます。
なお、前回の記事で説明した内容を既に設定済みであることを前提に説明してありますので、まずは前回の記事をご覧ください。

1、Admakerにアプリの登録をする

まず、アプリをAdmakerに登録します。
AdmakerはAdmobと違い、アプリを登録をしてから審査があります。審査期間は長くて1週間くらいだったと思うので、なるべく早く済ましておきましょう。

2、Adwhirl管理画面でAdmakerをCustom Eventとして設定する

Adwhirlへログインし、Admakerを組み込みたいアプリを選択します。
アプリの管理画面が表示されるので、「Add Custom Event」を選択し、下記のように項目を入力してください。

Name:Admaker
Function Name:performEventAdMaker

3、Admakerの設定をする

AdmakerからダウンロードできるSDKの中にinstall.pdfという説明資料が入っているので、そちらを参考にコードやファイルを追加してください。

4、performEventAdMakerのコードを書く

下記のコードをビューコントローラーの.mにコピペしてください。

- (void)performEventAdMaker:(AdWhirlView *)adWhirlView {
   [AdMaker setFrame:kAdWhirlViewDefaultFrame];
   [adWhirlView replaceBannerViewWith:AdMaker.view];
}

5、Admakerのコードの一部を変更する

上記のperformEventAdMakerを使うことで、Adwhirl側で広告の表示を管理します。そのためAdmaker側の広告表示プログラムは使わないの下記の部分をコメントアウトします。


//広告の取得に成功
- (void)didLoadAdMakerView:(AdMakerView*)view {
// 下記をコメントアウトにする
//[self.view addSubview:AdMaker.view];
}

これですべての作業は完了です。

まとめ

ここではAdmakerを組み込みましたが、AdLantisやAppBank Network、AMoAdなども同じような感じでいけますので、もしそちらも組み込みたい場合はやってみてください。
広告ネットワークの比較はこちらの記事で紹介しています。

なお、上記のAdmakerをAdwhirlに組み込む方法は、パンダアプリなどの人気アプリを開発されているムラモトタケシ様から教えて頂いた内容を私の方で少し改変したものです(AdmakerSDKがバージョンアップしたため改変が必要になった)。

ムラモト様、とても親切に教えていただき本当にありがとうございました!ムラモト様の開発された人気楽器アプリ「パンダピアノ」やパズルアプリ「iMake10」などはこちら

※なお、ムラモト様に教えて頂いた時点で問題なくAdmakerの表示が確認できているため、今回の記事で紹介したコードを試してAdmakerが表示されない場合、完全に私のミスです。

もし表示されない場合はご連絡くださいませ。

【iOS+Object-Cメモ】SystemSoundIDとAudio Queue Servicesで音を鳴らす



iPhoneで音を鳴らすには少なくとも2つ方法があります(3つあった気もするけどあと1つ忘れた)。

1つはSystemSoundIDを使う方法、もう1つはAudio Queue Servicesを使う方法です。
それぞれに特性や使い方が違うので、1つずつ見て行きましょう。

SystemSoundIDの特徴と使い方

○特徴

  • 設置が比較的カンタン
  • 30秒以内の音しか鳴らせない
  • 音をループさせることはできない
  • ネットワーク通信を行うアプリで使用すると、音量がiPhone本体の左ボタンで調節できなくなる

○使い方

// ヘッダーファイル
@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を使いましょう。

Audio Queue Servicesの特徴と使い方

○特徴

  • 30秒以上の音でも鳴らせる
  • 音のループが可能
  • SystemSoundIDよりちょっぴり重たいかも?

○使い方

// ヘッダーファイル
@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広告などを表示させるだけで、ネットワーク通信を使うので音量調節ができなくなりますしね。

プロフィール

PICxPIC
1983年生まれ。2010年からiOSアプリを開発し、2012年に法人化。メディア掲載やランキング、ダウンロード数などの詳しい実績などはこちら

PICxPICのアプリ

赤ちゃんの大冒険

おさるランド

動物オーケストラ2

子どもゲームランド

おしゃべりボタン

天空までのぼれ!

ジャンプで川下り

ひよこランド

動物オーケストラ

ポコポコアニマル

キラキラお絵かき

音が出るお絵かき

あいづちん