XAML과 C# 문제 해결 가이드
Warning
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 속성은 축소 또는 숨김으로 설정하면 안 됩니다. 이 속성은 아래와 같이 인라인 또는 외부 스타일시트에서 설정할 수 있습니다.
<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; }
블랙박스를 유발하는 가장 일반적인 오류는 "사용할 수 있는 광고 없음"입니다. 이 오류는 요청에서 반환할 수 있는 광고가 없음을 의미합니다.
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" />
이 코드 조각은 UI 태그 뒤에 있는 C# 코드의 예를 보여 줍니다.
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; }; } } }
블랙박스를 유발하는 가장 일반적인 오류는 "사용할 수 있는 광고 없음"입니다. 이 오류는 요청에서 반환할 수 있는 광고가 없음을 의미합니다.
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은 정상적으로 동작합니다. 경우에 따라 동일한 광고가 연속으로 두 번 이상 표시되어 광고가 새로 고쳐지지 않는 것처럼 보일 수 있습니다.