XAML と C# のトラブルシューティング ガイド

警告

2020 年 6 月 1 日以降、Windows UWP アプリ用の Microsoft の広告の収益化プラットフォームはシャットダウンされます。 詳細情報

このトピックでは、XAML アプリの Microsoft Advertising ライブラリに関する、開発上の一般的な問題に対する解決策について説明します。

XAML

AdControl が表示されない

  1. Package.appxmanifest で [インターネット (クライアント)] 機能が選択されていることを確認します。

  2. アプリケーション ID と広告ユニット ID を確認します。 これらの ID は、パートナー センターで取得したアプリケーション ID と広告ユニット ID に一致している必要があります。 詳しくは、「アプリの広告ユニットをセットアップする」をご覧ください。

    <UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}"
                  Width="728" Height="90" />
    
  3. Height プロパティと Width プロパティを確認します。 これらのプロパティは、バナー広告でサポートされている広告サイズのいずれかに設定する必要があります。

    <UI:AdControl AdUnitId="{AdUnitID}"
                  ApplicationId="{ApplicationID}"
                  Width="728" Height="90" />
    
  4. 要素の配置を確認します。 AdControl は表示可能領域の内部にある必要があります。

  5. Visibility プロパティを確認します。 省略可能な Visibility プロパティは collapsed または hidden に設定しないでください。 (次のように) インラインで設定できるほか、外部スタイル シートで設定できます。

    <UI:AdControl AdUnitId="{AdUnitID}"
                  ApplicationId="{ApplicationID}"
                  Visibility="Visible"
                  Width="728" Height="90" />
    
  6. AdControl の親を確認します。 AdControl 要素がある親要素の中にある場合、この親はアクティブで表示されている必要があります。

    <StackPanel>
        <UI:AdControl AdUnitId="{AdUnitID}"
                      ApplicationId="{ApplicationID}"
                      Width="728" Height="90" />
    </StackPanel>
    
  7. AdControl がビューポートから隠れていないことを確認します。 AdControl は、広告が正常に表示されるように、見える必要があります。

  8. ApplicationIdAdUnitId の実際の値は、エミュレーターでのテストに使わないようにしてください。 AdControl が想定どおりに機能していることを確認するには、ApplicationIdAdUnitId のどちらについてもテスト値を使ってください。

  1. 前の「AdControl が表示されない」セクションの手順をすべてもう一度確認します。

  2. ErrorOccurred イベントを処理します。エラーが発生したかどうかと、発生したエラーの種類を特定するイベント ハンドラーに渡されるメッセージを使います。 詳しくは、「XAML/C# ウォークスルーでのエラー処理」をご覧ください。

    次の例は、ErrorOccurredイベント ハンドラーを示しています。 最初のスニペットは、XAML UI マークアップです。

    <UI:AdControl AdUnitId="{AdUnitID}"
                  ApplicationId="{ApplicationID}"
                  Width="728" Height="90"
                  ErrorOccurred="adControl_ErrorOccurred" />
    <TextBlock x:Name="TextBlock1" TextWrapping="Wrap" Width="500" Height="250" />
    

    次の例は、対応する C# コードを示しています。

    private void adControl_ErrorOccurred(object sender,               
        Microsoft.Advertising.WinRT.UI.AdErrorEventArgs e)
    {
        TextBlock1.Text = e.ErrorMessage;
    }
    

    ブラック ボックスの原因となる最も一般的なエラーは、"No ad available" です。 このエラーは、要求から復帰する利用可能な広告がないことを意味します。

  3. AdControl は正常に動作しています。

    既定では、AdControl は広告を表示できない場合に折りたたまれます。 他の要素が同じ親の子である場合、これらの他の要素は折りたたまれた AdControl の隙間を埋めるように移動し、次の要求が行われたときに展開できます。

広告が更新されない

  1. IsAutoRefreshEnabled プロパティを確認します。 既定では、この省略可能なプロパティは True に設定されています。 False に設定すると、他の広告を取得するために Refresh メソッドを使う必要があります。

    <UI:AdControl AdUnitId="{AdUnitID}"
                  ApplicationId="{ApplicationID}"
                  Width="728" Height="90"
                  IsAutoRefreshEnabled="True" />
    
  2. Refresh メソッドの呼び出しを確認します。 自動更新の場合、他の広告を取得するために Refresh を使うことはできません。 手動更新の場合、デバイスの現在のデータ接続に応じて、少なくとも 30 秒から 60 秒経ってから Refresh を呼び出します。

    次のコード スニペットは、Refresh メソッドを使う方法の例を示しています。 最初のスニペットは、XAML UI マークアップです。

    <UI:AdControl x:Name="adControl1"
                  AdUnitId="{AdUnit_ID}"
                  ApplicationId="{ApplicationID}"
                  Width="728" Height="90"
                  IsAutoRefreshEnabled="False" />
    

    次のコード スニペットは、C# コード ビハインドの UI マークアップの例を示しています。

    public RefreshAds()
    {
        var timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(60) };
        timer.Tick += (s, e) => adControl1.Refresh();
        timer.Start();
    }
    
  3. AdControl は正常に動作しています。 同じ広告が何度も連続して表示される場合があります。このとき広告は更新されていないように見えます。

C#

AdControl が表示されない

  1. Package.appxmanifest で [インターネット (クライアント)] 機能が選択されていることを確認します。

  2. AdControl がインスタンス化されていることを確認します。 AdControl がインスタンス化されない場合、利用できません。

    using Microsoft.Advertising.WinRT.UI;
    
    namespace AdControlExample
    {
        public sealed partial class MainPage : Page
        {
            AdControl myAdControl;
            
            public MainPage()
            {
                this.InitializeComponent();
                
                myAdControl = new AdControl()
                {
                    ApplicationId = "{ApplicationID}",
                    AdUnitId = "{AdUnitID}",
                    Height = 90,
                    Width = 728
                };
            }
        }
    }
    
  3. アプリケーション ID と広告ユニット ID を確認します。 これらの ID は、パートナー センターで取得したアプリケーション ID と広告ユニット ID に一致している必要があります。 詳しくは、「アプリの広告ユニットをセットアップする」をご覧ください。

    adControl = new AdControl();
    adControl.ApplicationId = "{ApplicationID}";adControl.AdUnitId = "{AdUnitID}";
    adControl.Height = 90;
    adControl.Width = 728;
    
  4. HeightWidth パラメーターを確認します。 これらのプロパティは、バナー広告でサポートされている広告サイズのいずれかに設定する必要があります。

    adControl = new AdControl();
    adControl.ApplicationId = "{ApplicationID}";
    adControl.AdUnitId = "{AdUnitID}";
    adControl.Height = 90;adControl.Width = 728;
    
  5. AdControl が親要素に追加されることを確認します。 表示するには、AdControl を親コントロールの子として追加する必要があります (たとえば、StackPanel または Grid)。

    ContentPanel.Children.Add(adControl);
    
  6. Margin パラメーターを確認します。 AdControl は表示可能領域の内部にある必要があります。

  7. Visibility プロパティを確認します。 省略可能な Visibility プロパティを Visible に設定する必要があります。

    adControl = new AdControl();
    adControl.ApplicationId = "{ApplicationID}";
    adControl.AdUnitId = "{AdUnitID}";
    adControl.Height = 90;
    adControl.Width = 728;
    adControl.Visibility = System.Windows.Visibility.Visible;
    
  8. AdControl の親を確認します。 親はアクティブな状態で表示されている必要があります。

  9. ApplicationIdAdUnitId の実際の値は、エミュレーターでのテストに使わないようにしてください。 AdControl が想定どおりに機能していることを確認するには、ApplicationIdAdUnitId のどちらについてもテスト値を使ってください。

  1. 上記の「AdControl が表示されない」セクションの手順をすべてもう一度確認します。

  2. ErrorOccurred イベントを処理します。エラーが発生したかどうかと、発生したエラーの種類を特定するイベント ハンドラーに渡されるメッセージを使います。 詳しくは、「XAML/C# ウォークスルーでのエラー処理」をご覧ください。

    次の例は、エラー呼び出しの実装に必要な基本的なコードを示しています。 この XAML コードは、エラー メッセージの表示に使う TextBlock を定義します。

    <TextBlock x:Name="TextBlock1" TextWrapping="Wrap" Width="500" Height="250" />
    

    この C# コードは、エラー メッセージを取得し、TextBlock に表示します。

    using Microsoft.Advertising.WinRT.UI;
    
    namespace AdControlExample
    {
        public partial class MainPage : Page
        {
            AdControl myAdControl;
            
            public MainPage()
            {
                this.InitializeComponent();
                
                myAdControl = new AdControl();
                myAdControl.ApplicationId = "{ApplicationID}";
                myAdControl.AdUnitId = "{AdUnitID}";
                myAdControl.Height = 90;
                myAdControl.Width = 728;
                
                myAdControl.ErrorOccurred += (s,e) =>
                {
                    TextBlock1.Text = e.Error.Message;
                };
            }
        }
    }
    

    ブラック ボックスの原因となる最も一般的なエラーは、"No ad available" です。 このエラーは、要求から復帰する利用可能な広告がないことを意味します。

  3. AdControl は正常に動作しています。 同じ広告が何度も連続して表示される場合があります。このとき広告は更新されていないように見えます。

広告が更新されない

  1. AdControlIsAutoRefreshEnabled プロパティが false に設定されているかどうかを確認します。 既定では、この省略可能なプロパティは true に設定されています。 false に設定すると、他の広告を取得するために Refresh メソッドを使う必要があります。

  2. Refresh メソッドの呼び出しを確認します。 自動更新 (IsAutoRefreshEnabledtrue) の場合、他の広告を取得するために Refresh を使うことはできません。 手動更新 (IsAutoRefreshEnabledfalse) の場合、デバイスの現在のデータ接続に応じて、少なくとも 30 秒から 60 秒経ってから Refresh を呼び出します。

    次の例は、Refresh メソッドを呼び出す方法を示しています。

    AdControl myAdControl;
    
    public MainPage()
    {
        InitializeComponent();
    
        myAdControl = new AdControl();
        myAdControl.ApplicationId = "{ApplicationID}";
        myAdControl.AdUnitId = "{AdUnitID}";
        myAdControl.Height = 90;
        myAdControl.Width = 728;
        myAdControl.IsAutoRefreshEnabled = false;
    
        ContentPanel.Children.Add(myAdControl);
    
        var timer = new DispatcherTimer() { Interval = TimeSpan.FromSeconds(60) };
        timer.Tick += (s, e) => myAdControl.Refresh();
        timer.Start();
    }
    
  3. AdControl は正常に動作しています。 同じ広告が何度も連続して表示される場合があります。このとき広告は更新されていないように見えます。