15

ADBannerViewをビューに追加しました。アプリをロードすると、次のメッセージが表示されます。

ADBannerView:警告バナービュー(0x7a023c0)には広告がありますが、隠されている可能性があります。このメッセージは、バナービューごとに1回だけ印刷されます。

私が見る限り、バナー全体が画面に表示されます。これは本当に問題ですか?それとも私が無視できるのは警告だけですか?

4

8 に答える 8

22

スティーブンダーリントンが言うように、問題が何であるかを理解することは良い考えです。(View Controllerから)コードでこれを再確認する簡単な方法は次のとおりです。

     // bring your bannerView to the front
   [self.view bringSubviewToFront:bannerView];

     // and make sure it's positioned onscreen.
    bannerView.frame = CGRectMake(0.0, 0.0, bannerView.frame.size.width, bannerView.frame.size.height);

あなたがbannerViewと呼ばれるAdBannerViewへのiVar/IBOutletを持っていると仮定すると、これはインターフェースビルダーのポジショニングの問題を処理し、bannerViewが何にも覆われていないことを確認します。

私の経験では、広告が画面外にある場合でも問題は発生しませんが、iAdは、完全に画面に表示されていることがわかるまで、新しい広告を読み込みません。したがって、アプリを起動すると、

  1. AdBannerViewは、画面に表示されているかどうかに関係なく、広告の読み込みを試みます。

  2. 成功したかどうかに応じて、AdBannerViewDelegateはどちらかを受け取ります

    a)bannerViewDidLoadAd :(ステップ3に進みます)または

    b)bannerView:didFailToReceiveAdWithError :( AdBannerViewはそれ自体で再試行します)

  3. その時点で、実際に広告が読み込まれた場合、ボールは前述のbannerViewをどう処理するかについてあなたの法廷にいます。コードでこれを確認する簡単な方法はyourBannerView.bannerLoadedです。これは、広告がある場合はYESを返し、ない場合はNOを返します。など...

  4. 最初の広告が正常に読み込まれた後のAdBannerViewの処理方法によって、将来の動作が決まります。すぐに画面に表示する必要はありません。アプリケーション内で意味のある時間を選択してください。ただし、広告が正常に読み込まれたバナービューは、画面に表示されるまで別の広告を読み込もうとしません。(意味がわかりますよね?)トリッキーな部分は...

    4b)また、そのbannerViewから新しいデリゲートメッセージを取得しないため、bannerViewDidLoadAdデリゲートメッセージを取得した直後にbannerViewを画面上で移動しない場合は、処理するために独自に何らかの制御構造を実装する必要があります仮にあったとしても、それを画面上に移動すると、その時点で広告サーバーに追加の広告を要求し始め、より多くの委任メッセージを受け取り、サイクルが新たに始まります。

つまり、要約すると、より多くのiAdを提供して支払いを受けたい場合に、iAdが隠されている場合にのみ問題になります。ただし、eCPMは最近非常に低くなっているため、結局のところ、それほど問題ではないかもしれません;)

于 2011-02-28T18:09:30.650 に答える
7

このディスカッションに追加するために、centerプロパティを変更して広告を画面のすぐ外に移動したときに、このメッセージを受け取りました。UIViewアニメーションを使用して、広告を画面にスライドさせます。

いくつかの実験の後、メッセージを表示せずにこれを行う方法を見つけました。秘訣はadBannerView.hidden、広告が読み込まれるのを待っている間、非表示にしてプロパティをYESに設定することでした。ロードされたら、アニメーションをコミットした後でのみ、hiddenプロパティをNOに設定する必要がありました。

-(void) fadeAdIn:(UIView*)view
{
    float offsetY = view.frame.size.height * (bannerOnBottom ? 1 : -1);

    CGPoint pos = [self getBannerPosition];
    view.center = CGPointMake(pos.x, pos.y + offsetY);

    [UIView beginAnimations:@"AdIn" context:nil];
    [UIView setAnimationDuration:1.0];
    view.center = pos;
    [UIView commitAnimations];

    // must unhide AFTER animation has been committed to prevent "ad obstructed"
    view.hidden = NO;
}
于 2011-12-11T13:08:35.523 に答える
2

コンパイラの警告のように、これは、すぐに問題を引き起こしていなくても、おそらく一番下に到達しようとするべきものだと思います。もし私がAppleだったら、実際に広告を表示するアプリに広告を送るので(そうしていると言っているわけではない、経済的な側面もあるかもしれない。

私が見たいくつかの問題:

  • iAdフレームがわずかにずれており、画面から1〜2ピクセルずれている可能性があります。
  • 誤って2つのiAdを作成しましたが、1つは画面上にあり、もう1つは最初のiAdの後ろに隠れています
于 2010-11-15T10:17:32.837 に答える
1

同じ問題が発生しましたが、その理由は、その上にOpenFeint通知バーがあるためです。たとえば、ハイスコア、アチーブメントのロック解除などです。スライドインしてからスライドアウトし、長く留まらないので、そうではないと思います。問題。

ADSを一番上に置くと、ユーザーにOpenFeint通知が表示されなくなります。これは別の問題になります。画面の異なる場所にADSとOpenFeintがある場合にこれが発生するかどうかはわかりませんが、アプリの一番下として試しませんでした。画面はボタンでいっぱいなので、画面の上部のみが使用可能です。

于 2011-04-08T12:07:18.373 に答える
1

もう1つのオプションは、ステータスバーのサイズ変更イベントをリッスンし、発生したときにiAdを移動して、画面外に再配置されないようにすることです(その結果、警告が表示され、広告は配信されません)。

アプリデリゲートで、次の機能を利用します。

  • (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame // newStatusBarFrame.size.heightを確認し、それに応じてiAdフレームを上下にアニメーション化します。
于 2011-04-17T17:58:13.850 に答える
1

ADBannerViewをUIScrollViewに追加すると、このメッセージが表示されます。この場合、広告が不明瞭になる可能性があります。

于 2011-09-29T14:40:09.373 に答える
1

LearnCocos2Dからの答えは私にとっての解決策でした。これがCocos2D(私が使用している)の特定の問題であるかどうかはわかりません。私の問題は、Appleが使用を推奨しているブロックを使用して「新しい」スタイルのアニメーションを使用していたことでした。animateWithDuration:delay:options:animations:completion:これらを使用すると、あいまいな警告が表示されます。問題は、アニメーション中にビューが部分的に隠されていることです。したがって、警告が表示されますが、アニメーションが完了する前に完全に表示することはできません。明らかに、画面に表示したいだけの場合は、見苦しいです。

beginAnimations:とcommitAnimations:を使用して「古い」スタイルのアニメーションに戻すと、警告が消えたので、問題ありません。この警告があなたが実際に広告収入を逃していることを意味するのか、それとも単に迷惑であるが実際には問題ではないのか、私は興味があります。

于 2012-05-12T02:24:35.553 に答える
0

私はこのようなコードを持っていました:

if (animate)
{
    [UIView animateWithDuration:0.5 animations:^{
        self.adBannerView.frame = adBannerFrame;
        self.otherViewFrame.frame = otherViewFrame;
        }
     ];
}
else
{
    self.adBannerView.frame = adBannerFrame;
    self.otherViewFrame.frame = otherViewFrame;
}

いくつかの実験の結果、ifレッグとelseレッグの両方で初期化の順序を逆にする必要があることがわかりました。

    self.otherViewFrame.frame = otherViewFrame;
    self.adBannerView.frame = adBannerFrame;

したがって、アイデアは、数マイクロ秒であっても、別のビューがAdBannerViewをカバーしないようにすることでした。

于 2012-11-10T14:54:28.630 に答える