Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Предупреждение
С 1 июня 2020 года платформа монетизации рекламы Microsoft для приложения Windows UWP будет закрыта. Подробнее
В этом разделе содержатся решения распространенных проблем разработки с библиотеками Microsoft Advertising в приложениях JavaScript/HTML.
HTML
AdControl не отображается
Убедитесь, что в Package.appxmanifest выбрана возможность Internet (Client).
Убедитесь, что ссылка на JavaScript присутствует. Без ссылки ad.js в разделе<>(после ссылки default.js) AdControl не сможет отобразиться, и во время сборки возникнет ошибка.
<head> ... <script src="//Microsoft.Advertising.JavaScript/ad.js"></script> ... </head>
Проверьте идентификатор приложения и идентификатор рекламного блока. Эти идентификаторы должны соответствовать идентификатору приложения и идентификатору рекламного блока, полученным в Центре партнеров. Дополнительные сведения см. в разделе "Настройка рекламных блоков" в приложении.
<div id="myAd" style="position: absolute; top: 50px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте свойства высоты и и ширины и. Они должны соответствовать одному из поддерживаемых размеров баннерной рекламы.
<div id="myAd" style="position: absolute; top: 50px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте расположение элементов. Элемент управления рекламой должен находиться в просматриваемой области.
Проверьте свойство видимости. Это свойство не должно быть установлено как свернутое или скрытое. Это свойство можно задать встроенным образом (как показано ниже) или же во внешней таблице стилей.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте положение свойство. Свойство position должно быть установлено в соответствующее значение в зависимости от других свойств элемента (например, отступов в родительском элементе и "z-index"). Это свойство можно задать встроенным образом (как показано ниже) или же во внешней таблице стилей.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте свойство z-index. Свойство z-index должно быть установлено достаточно высоким, чтобы AdControl всегда отображался поверх других элементов. Это свойство можно задать встроенным образом (как показано ниже) или же во внешней таблице стилей.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте внешние таблицы стилей. Если свойства задаются в элементе AdControl через внешнюю таблицу стилей, убедитесь, что все указанные выше свойства заданы правильно.
<div id="myAd" style="visibility: visible; position: absolute; top: 1025px; left: 500px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div>
Проверьте родительский элемент AdControl. Если AdControl находится в родительском элементе, родительский элемент должен быть активным и видимым.
<div style="position: absolute; width: 500px; height: 500px;"> <div id="myAd" style="position: relative; top: 0px; left: 100px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID'}"> </div> </div>
Убедитесь, что AdControl не скрыты вне поля зрения. AdControl должен быть видимым для правильного отображения рекламы.
Актуальные значения для ApplicationId и AdUnitId не следует тестировать в эмуляторе. Чтобы убедиться, что AdControl работает должным образом, используйте тестовые значения для ApplicationId и AdUnitId.
Черный ящик мигает и исчезает
Дважды проверьте все шаги, описанные в предыдущем AdControl, которые не отображаются разделе.
Обработайте событие onErrorOccurred и используйте сообщение, переданное обработчику событий, чтобы определить, произошла ли ошибка и какой тип ошибки был вызван. Более подробную информацию см. в пошаговом руководстве по обработке ошибок в JavaScript.
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 728px; height: 90px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{applicationId: 'ApplicationID', adUnitId: 'AdUnitID', onErrorOccurred: errorLogger}"> </div> <div style="position:absolute; width:100%; height:130px; top:300px; left:0px"> <b>Ad Events</b><br /> <div id="adEvents" style="width:100%; height:110px; overflow:auto"></div> </div>
Наиболее распространенная ошибка, которая приводит к черному ящику, — "Объявление недоступно". Эта ошибка означает, что объявление недоступно в ответ на запрос.
AdControl ведет себя нормально. По умолчанию AdControl будет свернут, когда не удается отобразить объявление. Если другие элементы являются дочерними одного и того же родителя, они могут переместиться, чтобы заполнить пространство свернутого AdControl и расшириться при следующем запросе.
Объявления не обновляются
Проверьте свойство isAutoRefreshEnabled. По умолчанию это необязательное свойство имеет значение true. Если задано значение false, для получения другого объявления необходимо использовать метод обновления
. <div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{ applicationId: 'ApplicationID', adUnitId: 'AdUnitID', onErrorOccurred: errorLogger, isAutoRefreshEnabled: true}"> </div>
Проверьте вызовы метода обновления
. При использовании автоматического обновления обновления нельзя использовать для получения другого объявления. При использовании обновления вручную обновление следует вызывать только через 30–60 секунд в зависимости от текущего подключения к данным устройства. В этом примере показано, как использовать метод обновления
. В следующем HTML-коде показано, как создать экземпляр AdControl с isAutoRefreshEnabled, установленным в false. <div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl" data-win-options="{ applicationId: 'ApplicationID', adUnitId: 'AdUnitID', onErrorOccurred: errorLogger, isAutoRefreshEnabled: false}"> </div>
В этом примере показано, как использовать функцию обновления
. args.setPromise(WinJS.UI.processAll() .then(function (args) { window.setInterval(function() { document.getElementById("myAd").winControl.refresh(); }, 60000) }) );
AdControl ведет себя нормально. Иногда одна и та же реклама может появляться несколько раз подряд, создавая впечатление, что реклама не обновляется.
JavaScript
AdControl не отображается
Убедитесь, что в Package.appxmanifest выбрана возможность Internet (Client).
Убедитесь, что AdControl инициализирован. Если AdControl не инициализирован. он не будет доступен.
В следующих фрагментах кода показан пример создания экземпляра AdControl. В этом HTML-коде показан пример настройки пользовательского интерфейса для AdControl
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl"> </div>
В следующем коде JavaScript показан пример создания экземпляра AdControl
app.onactivated = function (args) { if (args.detail.kind === activation.ActivationKind.launch) { if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { var adDiv = document.getElementById("myAd"); var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" }); myAdControl.onErrorOccurred = myAdError; } else { ... } } }
Проверьте родительский элемент. Родительский элемент <div> должен быть правильно назначен, активен и видим.
var adDiv = document.getElementById("myAd"); var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" });
Проверьте идентификатор приложения и идентификатор рекламного блока. Эти идентификаторы должны соответствовать идентификатору приложения и идентификатору рекламного блока, полученным в Центре партнеров. Дополнительные сведения см. в разделе "Настройка рекламных блоков" в приложении.
var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" });
Проверьте родительский элемент AdControl. Родитель должен быть активным и видимым.
Актуальные значения для ApplicationId и AdUnitId не следует тестировать в эмуляторе. Чтобы убедиться, что AdControl работает должным образом, используйте тестовые значения для ApplicationId и AdUnitId.
Черный ящик мигает и исчезает
Дважды проверьте все шаги в AdControl, которые не отображаются разделе.
Обработайте событие onErrorOccurred и используйте сообщение, переданное обработчику событий, чтобы определить, произошла ли ошибка и какой тип ошибки был вызван. Более подробную информацию см. в пошаговом руководстве по обработке ошибок в JavaScript.
В этом примере показано, как реализовать обработчик ошибок, который сообщает об ошибках. Этот фрагмент КОДА HTML содержит пример настройки пользовательского интерфейса для отображения сообщений об ошибках.
<div style="position:absolute; width:100%; height:130px; top:300px"> <b>Ad Events</b><br /> <div id="adEvents" style="width:100%; height:110px; overflow:auto"></div> </div>
В этом примере показано, как создать объект AdControl. Эта функция будет вставлена в файл app.onactivated.
var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}" }); myAdControl.onErrorOccurred = myAdError;
В этом примере показано, как сообщать об ошибках. Эта функция будет вставлена под самостоятельно запущенной функцией в файле default.js.
WinJS.Utilities.markSupportedForProcessing ( window.errorLogger = function (sender, evt) { adEvents.innerHTML = (new Date()).toLocaleTimeString() + ": " + sender.element.id + " error: " + evt.errorMessage + " error code: " + evt.errorCode + "<br>" + adEvents.innerHTML; } );
Наиболее распространенная ошибка, которая приводит к черному ящику, — "Объявление недоступно". Эта ошибка означает, что объявление недоступно в ответ на запрос.
AdControl ведет себя нормально. Иногда одна и та же реклама может появляться несколько раз подряд, создавая впечатление, что реклама не обновляется.
Объявления не обновляются
Проверьте, установлено ли значение false для свойства IsAutoRefreshEnabled вашего AdControl. По умолчанию это необязательное свойство имеет значение true. Когда установлено значение false, метод Refresh должен использоваться для получения другого объявления.
Проверьте вызовы метода Refresh. При использовании автоматической перезагрузки (IsAutoRefreshEnabledtrue), Refresh нельзя использовать для получения другого объявления. При использовании ручного обновления (IsAutoRefreshEnabledfalse), Обновление следует вызывать только через минимум 30–60 секунд, в зависимости от текущего подключения к данным устройства.
В этом примере показано, как создать div для AdControl.
<div id="myAd" style="position: absolute; top: 0px; left: 0px; width: 250px; height: 250px; z-index: 1" data-win-control="MicrosoftNSJS.Advertising.AdControl"> </div>
В этом примере показано, как использовать функцию Обновление.
var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, { applicationId: "{ApplicationID}", adUnitId: "{AdUnitID}", isAutoRefreshEnabled: false }); ... args.setPromise(WinJS.UI.processAll() .then(function (args) { window.setInterval(function() { document.getElementById("myAd").winControl.refresh(); }, 60000) }) );
AdControl ведет себя нормально. Иногда одна и та же реклама может появляться несколько раз подряд, создавая впечатление, что реклама не обновляется.