XAML と C# のトラブルシューティング ガイド
警告
2020 年 6 月 1 日以降、Windows UWP アプリ用の Microsoft の広告の収益化プラットフォームはシャットダウンされます。 詳細情報
このトピックでは、XAML アプリの Microsoft Advertising ライブラリに関する、開発上の一般的な問題に対する解決策について説明します。
XAML
AdControl が表示されない
Package.appxmanifest で [インターネット (クライアント)] 機能が選択されていることを確認します。
アプリケーション ID と広告ユニット ID を確認します。 これらの ID は、パートナー センターで取得したアプリケーション ID と広告ユニット ID に一致している必要があります。 詳しくは、「アプリの広告ユニットをセットアップする」をご覧ください。
<UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}" Width="728" Height="90" />
Height プロパティと Width プロパティを確認します。 これらのプロパティは、バナー広告でサポートされている広告サイズのいずれかに設定する必要があります。
<UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}" Width="728" Height="90" />
要素の配置を確認します。 AdControl は表示可能領域の内部にある必要があります。
Visibility プロパティを確認します。 省略可能な Visibility プロパティは collapsed または hidden に設定しないでください。 (次のように) インラインで設定できるほか、外部スタイル シートで設定できます。
<UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}" Visibility="Visible" Width="728" Height="90" />
AdControl の親を確認します。 AdControl 要素がある親要素の中にある場合、この親はアクティブで表示されている必要があります。
<StackPanel> <UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}" Width="728" Height="90" /> </StackPanel>
AdControl がビューポートから隠れていないことを確認します。 AdControl は、広告が正常に表示されるように、見える必要があります。
ApplicationId と AdUnitId の実際の値は、エミュレーターでのテストに使わないようにしてください。 AdControl が想定どおりに機能していることを確認するには、ApplicationId と AdUnitId のどちらについてもテスト値を使ってください。
ブラック ボックスが点滅し、表示されなくなる
前の「AdControl が表示されない」セクションの手順をすべてもう一度確認します。
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" です。 このエラーは、要求から復帰する利用可能な広告がないことを意味します。
AdControl は正常に動作しています。
既定では、AdControl は広告を表示できない場合に折りたたまれます。 他の要素が同じ親の子である場合、これらの他の要素は折りたたまれた AdControl の隙間を埋めるように移動し、次の要求が行われたときに展開できます。
広告が更新されない
IsAutoRefreshEnabled プロパティを確認します。 既定では、この省略可能なプロパティは True に設定されています。 False に設定すると、他の広告を取得するために Refresh メソッドを使う必要があります。
<UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}" Width="728" Height="90" IsAutoRefreshEnabled="True" />
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(); }
AdControl は正常に動作しています。 同じ広告が何度も連続して表示される場合があります。このとき広告は更新されていないように見えます。
C#
AdControl が表示されない
Package.appxmanifest で [インターネット (クライアント)] 機能が選択されていることを確認します。
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 }; } } }
アプリケーション ID と広告ユニット ID を確認します。 これらの ID は、パートナー センターで取得したアプリケーション ID と広告ユニット ID に一致している必要があります。 詳しくは、「アプリの広告ユニットをセットアップする」をご覧ください。
adControl = new AdControl(); adControl.ApplicationId = "{ApplicationID}";adControl.AdUnitId = "{AdUnitID}"; adControl.Height = 90; adControl.Width = 728;
Height と Width パラメーターを確認します。 これらのプロパティは、バナー広告でサポートされている広告サイズのいずれかに設定する必要があります。
adControl = new AdControl(); adControl.ApplicationId = "{ApplicationID}"; adControl.AdUnitId = "{AdUnitID}"; adControl.Height = 90;adControl.Width = 728;
AdControl が親要素に追加されることを確認します。 表示するには、AdControl を親コントロールの子として追加する必要があります (たとえば、StackPanel または Grid)。
ContentPanel.Children.Add(adControl);
Margin パラメーターを確認します。 AdControl は表示可能領域の内部にある必要があります。
Visibility プロパティを確認します。 省略可能な Visibility プロパティを Visible に設定する必要があります。
adControl = new AdControl(); adControl.ApplicationId = "{ApplicationID}"; adControl.AdUnitId = "{AdUnitID}"; adControl.Height = 90; adControl.Width = 728; adControl.Visibility = System.Windows.Visibility.Visible;
AdControl の親を確認します。 親はアクティブな状態で表示されている必要があります。
ApplicationId と AdUnitId の実際の値は、エミュレーターでのテストに使わないようにしてください。 AdControl が想定どおりに機能していることを確認するには、ApplicationId と AdUnitId のどちらについてもテスト値を使ってください。
ブラック ボックスが点滅し、表示されなくなる
上記の「AdControl が表示されない」セクションの手順をすべてもう一度確認します。
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" です。 このエラーは、要求から復帰する利用可能な広告がないことを意味します。
AdControl は正常に動作しています。 同じ広告が何度も連続して表示される場合があります。このとき広告は更新されていないように見えます。
広告が更新されない
AdControl の IsAutoRefreshEnabled プロパティが false に設定されているかどうかを確認します。 既定では、この省略可能なプロパティは true に設定されています。 false に設定すると、他の広告を取得するために Refresh メソッドを使う必要があります。
Refresh メソッドの呼び出しを確認します。 自動更新 (IsAutoRefreshEnabled が true) の場合、他の広告を取得するために Refresh を使うことはできません。 手動更新 (IsAutoRefreshEnabled が false) の場合、デバイスの現在のデータ接続に応じて、少なくとも 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(); }
AdControl は正常に動作しています。 同じ広告が何度も連続して表示される場合があります。このとき広告は更新されていないように見えます。