5

まず、スクリーンショット:

設定フライアウトに表示されるメインビューからの広告

タイトルと画像はそれをかなりよく説明しています。アプリのメイングループビューの右側に広告が設定されており(この例のデフォルトのグリッドテンプレートと非常によく似ています)、[バージョン情報]画面を表示すると、広告がブリードスルーします。

[バージョン情報]画面は、dev-camp(下記)で配布されたいくつかのコードサンプルから借用したSettingsFlyoutに設定されたユーザーコントロールです。

class SettingsFlyout
{
    private const int _width = 346;
    private Popup _popup;

    public void ShowFlyout(UserControl control)
    {
        _popup = new Popup();
        _popup.Closed += OnPopupClosed;
        Window.Current.Activated += OnWindowActivated;
        _popup.IsLightDismissEnabled = true;
        _popup.Width = _width;
        _popup.Height = Window.Current.Bounds.Height;

        control.Width = _width;
        control.Height = Window.Current.Bounds.Height;

        _popup.Child = control;
        _popup.SetValue(Canvas.LeftProperty, Window.Current.Bounds.Width - _width);
        _popup.SetValue(Canvas.TopProperty, 0);
        _popup.IsOpen = true;
    }

    private void OnWindowActivated(object sender, Windows.UI.Core.WindowActivatedEventArgs e)
    {
        if (e.WindowActivationState == Windows.UI.Core.CoreWindowActivationState.Deactivated)
        {
            _popup.IsOpen = false;
        }
    }

    void OnPopupClosed(object sender, object e)
    {
        Window.Current.Activated -= OnWindowActivated;
    }
}

そして、私はそれが求められることを知っているので、これが私のページの広告を定義するXAMLの行です:

<ads:AdControl Visibility="{Binding IsTrial, Source={StaticResource License}, Converter={StaticResource BooleanToVisibilityConverter}}"  Grid.Row="0" Grid.RowSpan="2" x:Name="LandscapeAdControl" ApplicationId="test_client" AdUnitId="Image_160x600" Width="160" Height="600" VerticalAlignment="Center" HorizontalAlignment="Right"/>

それで、なぜこれが起こっているのですか、そしてどうすればそれを防ぐことができますか?

疑惑

  1. 私はまだConsumerPreviewb / cを使用しています。月曜日にショーアンドテルがあり、これを表示しているときに機能しなくなるリスクを冒さずに、このボックスのOSの移行に取り組む時間がありませんでした。そのため、バグの場合はアップグレードすると修正される可能性があります。

    1.a. アップデートリリースプレビューにアップグレードしましたが、同じ問題が発生します。

  2. ここで、いくつかの派手な広告隠しだがまだ印象を得るのを防ぐテクニックがありますか?おそらく、私が広告をui要素でカバーしようとしているのに、ユーザーに表示されなくてもそのインプレッションのクレジットを取得しようとしていると考えられます。もしそうなら、どうすればこの完全に合法的なユースケースを管理できますか?

ネタバレ注意:ZIndexはどこにも設定されていません。

4

5 に答える 5

2

AppBar(上または下)のオーバーレイでも同じ問題が発生します。OpenedインスタンスのイベントとClosedイベントを使用してAppBar、広告を表示/非表示にしました。これは、AdControlがViewModelに直接バインドされるのではなく、ローカルページプロパティにバインドされることを意味します。あなたが言ったように、それは残念ですが、それは機能します。

    private void bottomAppBar_Opened(object sender, object e)
    {
        if (App.ViewModel.IsTrialVisibility == Visibility.Visible)
            this.DefaultViewModel["AdVisibility"] = Visibility.Collapsed;
        // else do nothing as we don't want to show it since it's not a trial
    }

    private void bottomAppBar_Closed(object sender, object e)
    {
        if(App.ViewModel.IsTrialVisibility == Visibility.Visible)
            this.DefaultViewModel["AdVisibility"] = Visibility.Visible;
        // else do nothing as it's not shown in the first place (not a trial)
    }
于 2012-10-07T14:13:19.633 に答える
2

名前付きのプロパティがありますAdControlUseStaticAnchor

AdControlこのプロパティをtrueに設定すると、スクロールに関するパフォーマンスの問題と、他のすべての上に描画することの両方が修正されます。

元の回答-このメソッドは現在古くなっています:

AdControlは2つのメソッドがあります:Suspend()Resume()。ポップアップウィンドウまたはAppBarを開くときはいつでもSuspend()、そしてResume()それが再び閉じられたときに呼び出す必要があります。

裏で、は広告を表示するためにをAdControl使用していると思います。WebView何らかの理由で、WebViewは常にアプリケーション内の他のすべての上に表示されます。これに対する修正は、を一時的に無効にしWebView、代わりにを表示することWebViewBrushです。(この手法については、http://msdn.microsoft.com/library/windows/apps/windows.ui.xaml.controls.webviewbrushで説明されていますしたがって、Suspend()およびResume()を呼び出すと、AdControlはこれを実行します。カバーの下に。

私がやったことはSuspendingAdControl、単にAdControlを含み、アプリのどこでも使用できるUserControl(名前付き)を作成することです。次に、ウィンドウを開いたり閉じたりするたびに、CaliburnMicroのEventAggregatorを使用してイベントを公開します。SuspendingAdControlは、これらのイベントをサブスクライブして処理してから、またはを適切に呼び出しAdControl.Suspend()ますResume()

于 2013-06-04T21:59:49.210 に答える
1

フライアウトが閉じたときにイベントをリッスンするコードを作成して、広告を手動でハイ/表示できるようにしました。回避策を実行しなければならなかったのは残念ですが、それは機能します。

于 2012-07-23T19:47:22.290 に答える
0

8.1のフライアウトがZオーダーの最上位にあるため、これは現在必要ありません。

于 2013-11-02T12:52:31.477 に答える
-3

私はまだConsumerPreviewb / cを使用しています。月曜日にショーアンドテルがあり、これを表示しているときに機能しなくなるリスクを冒さずに、このボックスのOSの移行に取り組む時間がありませんでした。そのため、バグの場合はアップグレードすると修正される可能性があります。

私はまだ自分のメトロアプリケーションで広告を使用していないので、このような問題は発生していません。私はリリースプレビューを使用しており、5月2日より前にコンシューマープレビューを使用していました。

コンシューマープレビューとリリースプレビューの間にいくつかの重要な変更がありました。そのため、アップグレードするとこれが修正されるか、別の問題が発生する可能性があります。

最終的にはアップグレードする必要があります。問題を解決する前に、まずそれを試すことをお勧めします。

于 2012-06-11T13:09:37.377 に答える