Поделиться через


Руководство по устранению проблем XAML и C#

Предупреждение

По состоянию на 1 июня 2020 г. платформа Монетизации Microsoft Ad для приложений Windows UWP будет закрыта. Подробнее

В этом разделе содержатся решения распространенных проблем разработки с библиотеками Microsoft Advertising в приложениях XAML.

XAML

AdControl не отображается

  1. Убедитесь, что в Package.appxmanifest выбрана возможность Интернета (клиента ).

  2. Проверьте идентификатор приложения и идентификатор рекламного блока. Эти идентификаторы должны соответствовать идентификатору приложения и идентификатору рекламного блока, полученным в Центре партнеров. Дополнительные сведения см. в разделе "Настройка рекламных блоков" в приложении.

    <UI:AdControl AdUnitId="{AdUnitID}" ApplicationId="{ApplicationID}"
                  Width="728" Height="90" />
    
  3. Проверьте свойства высоты и ширины. Они должны иметь один из поддерживаемых размеров рекламы для баннеров.

    <UI:AdControl AdUnitId="{AdUnitID}"
                  ApplicationId="{ApplicationID}"
                  Width="728" Height="90" />
    
  4. Проверьте положение элемента. AdControl должен находиться в области просмотра.

  5. Проверьте свойство Видимости. Необязательное свойство Видимости не должно быть установлено для свернутого или скрытого. Это свойство можно задать встроенным (как показано ниже) или во внешней таблице стилей.

    <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. Динамические значения для ApplicationId и AdUnitId не должны проверяться в эмуляторе. Чтобы убедиться, что AdControl работает должным образом, используйте тестовые значения для ApplicationId и AdUnitId.

  1. Дважды проверьте все шаги, описанные в предыдущем разделе AdControl, не отображаемом .

  2. Обработайте событие ErrorOccurred и используйте сообщение, переданное обработчику событий, чтобы определить, произошла ли ошибка и какой тип ошибки был вызван. Дополнительные сведения см . в пошаговом руководстве по обработке ошибок в XAML/C#.

    В этом примере показан обработчик событий ErrorOccurred . Первый фрагмент кода — разметка пользовательского интерфейса XAML.

    <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;
    }
    

    Наиболее распространенная ошибка, которая приводит к черному ящику, — "Объявление недоступно". Эта ошибка означает, что объявление не доступно для возврата из запроса.

  3. AdControl работает нормально.

    По умолчанию AdControl будет свернут, когда не удается отобразить объявление. Если другие элементы являются дочерними элементами одного родительского элемента, они могут переместиться, чтобы заполнить пробел свернутого AdControl и развернуть при выполнении следующего запроса.

Реклама не обновляется

  1. Проверьте свойство IsAutoRefreshEnabled. По умолчанию это необязательное свойство имеет значение True. Если задано значение False, метод refresh должен использоваться для получения другого объявления.

    <UI:AdControl AdUnitId="{AdUnitID}"
                  ApplicationId="{ApplicationID}"
                  Width="728" Height="90"
                  IsAutoRefreshEnabled="True" />
    
  2. Проверьте вызовы метода Refresh . При использовании автоматического обновления обновление не может использоваться для получения другого объявления. При использовании обновления вручную обновление должно вызываться только через 30–60 секунд в зависимости от текущего подключения к данным устройства.

    В следующих фрагментах кода показано, как использовать метод Refresh . Первый фрагмент кода — разметка пользовательского интерфейса XAML.

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

    В этом фрагменте кода показан пример кода C# за разметкой пользовательского интерфейса.

    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. Проверьте идентификатор приложения и идентификатор рекламного блока. Эти идентификаторы должны соответствовать идентификатору приложения и идентификатору рекламного блока, полученным в Центре партнеров. Дополнительные сведения см. в разделе "Настройка рекламных блоков" в приложении.

    adControl = new AdControl();
    adControl.ApplicationId = "{ApplicationID}";adControl.AdUnitId = "{AdUnitID}";
    adControl.Height = 90;
    adControl.Width = 728;
    
  4. Проверьте параметры высоты и ширины. Они должны быть установлены в одном из поддерживаемых размеров рекламы для баннеров.

    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. Проверьте свойство Видимости. Необязательное свойство Видимости должно иметь значение 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. Динамические значения для ApplicationId и AdUnitId не должны проверяться в эмуляторе. Чтобы убедиться, что AdControl работает должным образом, используйте тестовые значения для ApplicationId и AdUnitId.

  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;
                };
            }
        }
    }
    

    Наиболее распространенная ошибка, которая приводит к черному ящику, — "Объявление недоступно". Эта ошибка означает, что объявление не доступно для возврата из запроса.

  3. AdControl работает нормально. Иногда одна и та же реклама будет отображаться несколько раз в строке, давая вид, что реклама не обновляется.

Реклама не обновляется

  1. Проверьте, имеет ли свойство IsAutoRefreshEnabled для adControl значение false. По умолчанию это необязательное свойство имеет значение true. Если задано значение false, метод Refresh должен использоваться для получения другого объявления.

  2. Проверьте вызовы метода Refresh . При использовании автоматического обновления (IsAutoRefreshEnabled имеет значение true), обновление нельзя использовать для получения другого объявления. При использовании ручного обновления (IsAutoRefreshEnabled имеет значение false), обновление должно вызываться только через 30–60 секунд в зависимости от текущего подключения к данным устройства.

    В следующем примере показано, как вызвать метод 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 работает нормально. Иногда одна и та же реклама будет отображаться несколько раз в строке, давая вид, что реклама не обновляется.