忍者ブログ
なんでもいいから書くブログ。iPhoneアプリやAndroidアプリといったスマートフォンアプリを開発していこうと考えてはいるが、はたしてどこまでできるか、、とにかく記録していこうと思い書いているブログである。有益な情報はあるかもしれないし、ないかもしれない。
Admin | Write
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

って、rejectされたから書くんですが。

 ... because it displays an empty iAd banner when ad content is not available.
 The banner within the app should be hidden whenever ad content is not being served by iAd.
 To handle the case where ad content is not available, you will need to implement a banner view delegate.

ようは、広告の内容が取得できなかったときは、バナーを隠せってこと。その為にバナービューのデリゲートをちゃんと実装しなきゃだめってこと。

デリゲートは実装しなくていいや、広告出しとくだけだし、、って思ったらダメなようだ。
ちゃんとドキュメント読めって。。

広告を取得した場合は、
bannerViewDidLoadAd
エラーの場合は、
didFailToReceiveAdWithError
で通知してくる。
なので、こんな感じに初期化して、デリゲートは self とした。
        ADBannerView *adView = [[ADBannerView alloc] initWithFrame:CGRectZero];
        adView.delegate = self;
        adView.currentContentSizeIdentifier = ADBannerContentSizeIdentifier320x50;
        adView.frame = CGRectOffset(adView.frame, 0, -50); //隠しておく
        [self.view addSubview:adView];
        [adView release];
        self.bannerIsVisible = NO; //隠しているのでフラグOFF

デリゲートは self としたので、このクラスに次のように実装。
- (void)bannerView:(ADBannerView *)banner didFailToReceiveAdWithError:(NSError *)error
{
    if (self.bannerIsVisible)
    {
       //バナーを隠します
        [UIView beginAnimations:@"animateAdBannerOff" context:NULL];
        banner.frame = CGRectOffset(banner.frame, 0, -50);
        [UIView commitAnimations];
        self.bannerIsVisible = NO;
    }
}

- (void)bannerViewDidLoadAd:(ADBannerView *)banner {
    if (!self.bannerIsVisible)
    {
       //バナーを表示します
        [UIView beginAnimations:@"animateAdBannerOn" context:NULL];
        banner.frame = CGRectOffset(banner.frame, 0, 50);
        [UIView commitAnimations];
        self.bannerIsVisible = YES;
    }
}

まぁこんだけだ。(っとこの段階では思っていたが、後で落ちがある。。)

さぁ、試そう。bannerViewDidLoadAd は呼ばれる。まぁ当然。
でも、エラーの通知ってどう再現するんだ。
。。。悩む。
しょうがないのでドキュメントを見る。書いてあった。。
通信をOFF にしろって。なるほど!

やってみる。設定で、機内モードにして、アプリに戻る。
最初から表示されないケースはオッケー、でもこれってエラー通知で
広告が隠れたわけではない。ログ出力しても呼ばれていない。
広告が表示された状態から、エラー通知により隠れないってこと。

すこし考える。

バナーが次の広告をサーバに取得しにいくタイミングがあるはずだ。
それまで待つことにした。

画面を表示した状態で待ったが、いっこうに動かない。

しょうがないので、ボタンをポッチと押してバックグラウンドで放置。

5分くらいして通信をOFFにして再開してみる。

おぉ!広告バナーが隠れた。ちゃんとエラー通知をとおている。よし!


didFailToReceiveAdWithError の確認方法は次の通りだ。
広告を表示する→バックグラウンドで5分くらい放置→通信OFF(機内モードとか。)→アプリ再開


よーしできた。再申請でまた1週間待ちか。


しかし、、、、かるーくアプリを動かしていたら、突然、強制終了。

なにっ!!今までこんな落ちかたなかったのに。

しょうがないので、デバッグ開始。

コールスタックみたらiAdで落ちてるね。俺知らねーし。どこだよー。

っと原因を探っていたら、、これか。。

これは iAdだからってわけではなく、非同期でメソッド呼び出したりするときも、やっちまったーってケースだ。

呼び出したときに、もう既にいないってやつです。

この場合、ADBannerView の delegate を self にしたので、

違う画面に戻ったときに、運悪くバナーが通信して広告取りに行って、

delegateにより通知しにきたとき、もう違う画面なので、"self" がなくなってしまった。

そういうことです。


解決方法は、これでいいのかわからないが、

viewWillDisappear (ビューが非表示になるとき) に、 delegate=nil

viewWillAppear (ビューが表示されるとき)に 、delegate=self とした。

こんな感じに。
- (void)viewWillDisappear:(BOOL)animated {
    for (UIView *viewTmp in self.view.subviews) {
        if ([viewTmp isMemberOfClass:[ADBannerView class]]) {
            ((ADBannerView *)viewTmp).delegate = nil;
        }
    }
    [super viewWillDisappear:animated];
}


これで、落ちることもなくなったので、よしとしよう。

やっと再申請。1週間待ちだ。。







PR
Comment form
Name
Title
Comment
Password   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
  管理人のみ閲覧可能にする
この記事のトラックバック
この記事にトラックバックする
YamaTatsuのiPhoneアプリ
iTunes Store でみる
LightOff Light Off Hot New
点いたライトを素早く消そう!
誰でも遊べるシンプルなゲームです

めいろであそぼう めいろであそぼう New
かわいいイラストのめいろ、ぬり絵もできる
子供向けの迷路あそびです。※iPad専用

運試し 運試し NEW
15連続の確率は0.0001%
操作は簡単 好きなパネルを選ぶだけ。どこまで進めるか運試し!

連打 連打! まだまだ人気
16連射に挑戦
10秒間で何回ボタンを押せるか競うゲームです。

うちメモ うちメモ ★大人気★
買い物中に 「まだあったかな?」 と思った経験 ありませんか? 「うちメモ」していれば大丈夫!!

BestBowling Best Bowling
マイボウラーに大人気! ボウリングのスコアを管理するアプリです。

イメージ貯金 イメージ貯金
貯金はモチベーションが重要! 目標を設定して毎日楽しく貯金しよう!

Mine Escape Mine Escape
聴力は優れていますか? 音で機雷の位置を判断する新感覚のアクションゲーム!

Rank Checker Rank Checker
だって気になるじゃないですか、、 アプリ開発者必須! AppStoreのランキングをチェックツールです。


カレンダー
10 2024/11 12
S M T W T F S
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
Twitter
プロフィール
HN:
YamaTatsu
HP:
性別:
非公開
自己紹介:
iPhoneアプリを開発してまーす。
最新コメント
[06/04 K.I.T]
[06/03 Cotoba]
[05/19 K.I.T]
[05/18 コタツ猫]
最新トラックバック
ブログ内検索
バーコード
忍者アド
アクセス解析
忍者ブログ [PR]

Designed by