Admob導入について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
TEAS TEA

Admob導入について

#1

投稿記事 by TEAS TEA » 10年前

いつも質問ばかりで申し訳ございません。
管理人様及びJusty様等にはご迷惑をおかけしております。

iPhoneアプリを開発しておりAdmobを導入したいのですが
どうしても表示が出来ません。

IBを使わずに開発しており色々なサイト様を
参考しながら導入しているのですが上手く導入が出来ません。

プロジェクト:http://www1.axfc.net/uploader/Ne/so/98704
pass:ad

全てのページに広告を表示させてたいので
HelloWorldAppDelegate.mにて広告の表示についてのプログラムを書いております。
よろしければどうがソースを見ては頂けないでしょうか?

アバター
Justy
副管理人
記事: 122
登録日時: 10年前
住所: 神奈川県

Re: Admob導入について

#2

投稿記事 by Justy » 10年前

 こちらは adMobのアカウントを持っていないし、サンプルも見たことないですが。
 大きな問題としては3点。

・ adMobAdのインスタンス化されていない(→requestAdWithDelegateが未使用)
・ AdMobDelegateと接続していない
・ currentViewControllerForAdの戻り値がおかしい

 多分これらを解消すれば表示だけはされるようになるんじゃないかと。

TEAS TEA

Re: Admob導入について

#3

投稿記事 by TEAS TEA » 10年前

ご回答ありがとうございます。
Justy様には何度ご回答いただいたことか・・・。
本当に助かっております。ありがとうございます。

・ adMobAdのインスタンス化されていない(→requestAdWithDelegateが未使用)
[window_ addSubview:[AdMobView requestAdWithDelegate:self]];
これでいいのでしょうか?
すみません・・・調べてみてこのように使われていたので・・・

・ AdMobDelegateと接続していない
これについてよくわからないです。

・ currentViewControllerForAdの戻り値がおかしい
AppDelegate意外のソースではselfとなっていたのですが
このソースでは何を返せばいいのでしょうか?

質問ばかりで申し訳ないです。

コード:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
	
	// windowを自分で作成
	CGRect bounds = [[UIScreen mainScreen] bounds];
	window_ = [[UIWindow alloc] initWithFrame:bounds];

	// 基点となるControllerを作成
	TopMenuController* topMenu = [[[TopMenuController alloc] init] autorelease];  
	rootController_ = [[UINavigationController alloc] initWithRootViewController:topMenu];
  	rootController_.view.frame = CGRectMake( 0, 20, 320, 480-48-20 );
	
	// AdMod
	//adMobAd = [[AdMobView alloc] init];
	//adMobAd = [AdMobView requestAdWithDelegate:[self UIApplicationDelegate]];
	//adMobAd = [AdMobView requestAdWithDelegate:self]; // 起動するが落ちてしまう
	
	// windowにControllerのviewを追加
	[window_ addSubview:rootController_.view];
	[window_ addSubview:adMobAd];
	[window_ addSubview:[AdMobView requestAdWithDelegate:self]];
	[window_ makeKeyAndVisible];
}

Admobのサンプルプロジェクト
http://www1.axfc.net/uploader/Sc/so/189705.zip
pass:ad
必要ないかもしれませんが宜しければ・・・。

アバター
Justy
副管理人
記事: 122
登録日時: 10年前
住所: 神奈川県

Re: Admob導入について

#4

投稿記事 by Justy » 10年前

TEAS TEA さんが書きました:・ adMobAdのインスタンス化されていない(→requestAdWithDelegateが未使用)
[window_ addSubview:[AdMobView requestAdWithDelegate:self]];
これでいいのでしょうか?
 概ね。内側の[]の requestAdWithDelegateをしているところはそれでOKだと思います。

 しかし、この段階で windows_に紐づけるのはどうでしょうね。
 didReceiveAdメソッドの処理と被りませんか?

 処理に時間がかかること、或いは処理に失敗して、didFailToReceiveAdが呼ばれるかも
しれないことを考えるとやめておいたほうがいいでしょう。

 従って、applicationDidFinishLaunchingの中ではとりあえず

コード:

	adMobAd = [AdMobView requestAdWithDelegate:self];
	[adMobAd retain];
とだけしておけば大丈夫じゃないかと。

TEAS TEA さんが書きました:・ AdMobDelegateと接続していない
これについてよくわからないです。
 requestAdWithDelegateで self(AdMobDelegateを継承した HelloWorldAppDelegate)を
指定しているので大丈夫です。

TEAS TEA さんが書きました:・ currentViewControllerForAdの戻り値がおかしい
AppDelegate意外のソースではselfとなっていたのですが
このソースでは何を返せばいいのでしょうか?
 正確に何を返せばいいのかは AdMobのドキュメントを見ないとわかりませんが、
プログラム的には UIViewController *を返すことになっています。

 このコードの中で UIViewController *といえば TopMenuControllerか
UINavigationControllerくらいしかありません。
 生成済みの TopMenuControllerを返してみては?

TEAS TEA

Re: Admob導入について

#5

投稿記事 by TEAS TEA » 10年前

お忙しい中、お早い返信ありがとうございました。
Justy様の言う通りに変更しましたら警告が出なくなりました。
ありがとうございます。
selfについては自分のソースのことと思っていたのですが少し違っていたようですね・・・。
ソースの<>の部分、添付したソースではHelloWorldAppDelegateのことだったのですか。
勉強になり助かります。

しかし、やはり広告の表示だけが出来ません。
今気がついたのですがサンプルを試してみたのですが
4つあるソースのうち今回貼付けたサンプルでは広告の表示が確認できませんでした。
2個目に添付したProgrammaticAdViewController.mから参照したのですがこちらが間違えているのでしょうか?
他のサンプルプロジェクトですと時間が経つと表示されるのですが今回の物では表示できませんでした。

長々と申し訳ないのですが現在のソースです。

コード:

//
//  HelloWorldAppDelegate.m
//
//  Created by ToKoRo on 2009-08-15.
//

#import "HelloWorldAppDelegate.h"
#import "TopMenuController.h"
#import "AdMobView.h"

@implementation HelloWorldAppDelegate

@synthesize window = window_;

- (void)applicationDidFinishLaunching:(UIApplication *)application {
	
	// windowを自分で作成
	CGRect bounds = [[UIScreen mainScreen] bounds];
	window_ = [[UIWindow alloc] initWithFrame:bounds];

	// 基点となるControllerを作成
	TopMenuController* topMenu = [[[TopMenuController alloc] init] autorelease];  
	rootController_ = [[UINavigationController alloc] initWithRootViewController:topMenu];
  	rootController_.view.frame = CGRectMake( 0, 20, 320, 480-48-20 );
	
	// AdMob	
	adMobAd = [AdMobView requestAdWithDelegate:self];
    [adMobAd retain];
	
	// windowにControllerのviewを追加
	[window_ addSubview:rootController_.view];
	[window_ addSubview:adMobAd];
//	[window_ addSubview:[AdMobView requestAdWithDelegate:self]];
	
	[window_ makeKeyAndVisible];
}

- (void)dealloc {
	[rootController_ release];
	[window_ release];
	[adMobAd release];
	[super dealloc];
}


#pragma mark -
#pragma mark AdMobDelegate methods

- (NSString *)publisherIdForAd:(AdMobView *)adView {
	return @"a14d1d37323f99d"; // this should be prefilled; if not, get it from www.admob.com
}

- (UIViewController *)currentViewControllerForAd:(AdMobView *)adView {
	return rootController_;	// 戻り値
}

- (UIColor *)adBackgroundColorForAd:(AdMobView *)adView {
	return [UIColor colorWithRed:0 green:0 blue:0 alpha:1]; // this should be prefilled; if not, provide a UIColor
}

- (UIColor *)primaryTextColorForAd:(AdMobView *)adView {
	return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; // this should be prefilled; if not, provide a UIColor
}

- (UIColor *)secondaryTextColorForAd:(AdMobView *)adView {
	return [UIColor colorWithRed:1 green:1 blue:1 alpha:1]; // this should be prefilled; if not, provide a UIColor
}

// To receive test ads rather than real ads...
/*
 // Test ads are returned to these devices.  Device identifiers are the same used to register
 // as a development device with Apple.  To obtain a value open the Organizer
 // (Window -> Organizer from Xcode), control-click or right-click on the device's name, and
 // choose "Copy Device Identifier".  Alternatively you can obtain it through code using
 // [UIDevice currentDevice].uniqueIdentifier.
 //
 // For example:
 //    - (NSArray *)testDevices {
 //      return [NSArray arrayWithObjects:
 //              ADMOB_SIMULATOR_ID,                             // Simulator
 //              //@"28ab37c3902621dd572509110745071f0101b124",  // Test iPhone 3GS 3.0.1
 //              //@"8cf09e81ef3ec5418c3450f7954e0e95db8ab200",  // Test iPod 2.2.1
 //              nil];
 //    }
 
 - (NSArray *)testDevices {
 return [NSArray arrayWithObjects: ADMOB_SIMULATOR_ID, nil];
 }
 
 - (NSString *)testAdActionForAd:(AdMobView *)adMobView {
 return @"url"; // see AdMobDelegateProtocol.h for a listing of valid values here
 }
 */

// Sent when an ad request loaded an ad; this is a good opportunity to attach
// the ad view to the hierachy.
- (void)didReceiveAd:(AdMobView *)adView {
	NSLog(@"AdMob: Did receive ad");
	// put the ad at the bottom of the screen
	adMobAd.frame = CGRectMake(0, 480-48, 320, 48);
	
	[window_ addSubview:adMobAd];
}

// Sent when an ad request failed to load an ad
- (void)didFailToReceiveAd:(AdMobView *)adView {
	NSLog(@"AdMob: Did fail to receive ad");
	[adMobAd removeFromSuperview];  // Not necessary since never added to a view, but doesn't hurt and is good practice
	[adMobAd release];
	adMobAd = nil;
	// we could start a new ad request here, but in the interests of the user's battery life, let's not
}



@end

アバター
Justy
副管理人
記事: 122
登録日時: 10年前
住所: 神奈川県

Re: Admob導入について

#6

投稿記事 by Justy » 10年前

TEAS TEA さんが書きました:selfについては自分のソースのことと思っていたのですが少し違っていたようですね・・・。]
 サンプルは UIViewControllerを継承しているので selfでも問題ないですが、
HelloWorldAppDelegateはそういうわけではないですから。

TEAS TEA さんが書きました:今気がついたのですがサンプルを試してみたのですが
4つあるソースのうち今回貼付けたサンプルでは広告の表示が確認できませんでした。
 だとするなら、開発元に相談するべきでしょう。

TEAS TEA さんが書きました:2個目に添付したProgrammaticAdViewController.mから参照したのですがこちらが間違えているのでしょうか?
 それはこちらではわかりません。
 コードの製作者に確認した方がいいと思います。

TEAS TEA さんが書きました:長々と申し訳ないのですが現在のソースです。
 気になるところはありますが、指摘済みですしそこは特に動作そのものには影響しないので
それで問題ないように見えます。

・ テストデバイスを有効にして、シミュレータで動かすとどうなりますか?
・ テストデバイスを有効にして、実機で動かすとどうなりますか?
・ publisherIdForAdの IDを a14c9a69c9dff58とか別のに変えてみたらどうなりますか?
・ TopMenuController側に Admobを実装してみたらどうなりますか?

TEAS TEA

Re: Admob導入について

#7

投稿記事 by TEAS TEA » 10年前

回答ありがとうございます。
Justy様のお陰で表示されることは確認できました。

ただ、謎の現象がでてしまっております。
何回かに一回は表示できます。しかし殆ど表示されません。
又、時間をあけて(数時間)とデバックしなおすと表示出来ることがあります。
これはAdmob側で何か制限されていると考えた方がいいのでしょうか?

・ テストデバイスを有効にして、シミュレータで動かすとどうなりますか?
コメントを外し2つの関数を有効にすると広告が表示されます。
TopMenuController側にソースを書かなくても確認できました。
この場合は謎の現象は起こりませんでした。

・ テストデバイスを有効にして、実機で動かすとどうなりますか?
↑と同じです。

・ publisherIdForAdの IDを a14c9a69c9dff58とか別のに変えてみたらどうなりますか?
謎の現象は変わりません。

・ TopMenuController側に Admobを実装してみたらどうなりますか?
TopMenuController側でも表示するようにしてみたところ表示できました。
しかし、謎の現象が起こってしまいます。

アバター
Justy
副管理人
記事: 122
登録日時: 10年前
住所: 神奈川県

Re: Admob導入について

#8

投稿記事 by Justy » 10年前

TEAS TEA さんが書きました:これはAdmob側で何か制限されていると考えた方がいいのでしょうか?
 その可能性はあります。
http://sarudeki.maiway.jp/forum/topic/100

 AdMobはライブラリの中身もサーバー側の挙動も詳細が公開されているわけでは
ないので、サポートに連絡して訊いてみた方がいいと思います。

TEAS TEA さんが書きました:・ テストデバイスを有効にして、シミュレータで動かすとどうなりますか?
コメントを外し2つの関数を有効にすると広告が表示されます。
 なら、それほど問題ないのかもしれませんね。

TEAS TEA

Re: Admob導入について

#9

投稿記事 by TEAS TEA » 10年前

ご連絡が遅くなってしまい申し訳ございませんでした。
無事、表示することが出来ました。
調べてみるとAdmobは同じ端末から何度もリクエストすると一時的に表示されなくなるらしいです。
現在では自分のシミュレータにて広告が表示できることを確認できました。

今回もJusty様ありがとうございました!!
質問ばかりで申し訳ないのですがもう一つ厄介な現象がでてしまいまして…
大変申し訳ないのですが別トピックにて質問させて頂きます。

今回も本当にありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る