다음을 통해 공유


HTML 및 JavaScript 문제 해결 가이드

경고

2020년 6월 1일부로 Windows UWP 앱용 Microsoft 광고 수익 창출 플랫폼이 종료됩니다. 더 알아보기

이 항목에는 JavaScript/HTML 앱의 Microsoft Advertising 라이브러리와 관련된 일반적인 개발 문제에 대한 솔루션이 포함되어 있습니다.

HTML

AdControl이 표시되지 않음

  1. Package.appxmanifest에서 인터넷(클라이언트) 기능이 선택되어 있는지 확인합니다.

  2. JavaScript 참조가 있는지 확인합니다. (default.js 참조 뒤의) <head> 섹션에 ad.js 참조가 없으면 AdControl을 표시할 수 없으며 빌드 중에 오류가 발생합니다.

    <head>
        ...
        <script src="//Microsoft.Advertising.JavaScript/ad.js"></script>
        ...
    </head>
    
  3. 애플리케이션 ID 및 광고 단위 ID를 확인합니다. 이러한 ID는 파트너 센터에서 얻은 애플리케이션 ID 및 광고 단위 ID와 일치해야 합니다. 자세한 정보는 앱에서 광고 단위 설정하기를 참조하세요.

    <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>
    
  4. heightwidth 속성을 확인합니다. 배너 광고에 지원되는 광고 크기 중 하나로 설정해야 합니다.

    <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>
    
  5. 요소 위치 지정을 확인합니다. AdControl은 볼 수 있는 영역 내에 있어야 합니다.

  6. visibility 속성을 확인합니다. 이 속성을 축소 또는 숨김으로 설정하지 않아야 합니다. 이 속성은 아래와 같이 인라인 또는 외부 스타일시트에서 설정할 수 있습니다.

    <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>
    
  7. position 속성을 확인합니다. 위치 속성은 요소의 다른 속성(예: 부모 요소 및 z-인덱스의 여백)에 따라 적절한 값으로 설정해야 합니다. 이 속성은 아래와 같이 인라인 또는 외부 스타일시트에서 설정할 수 있습니다.

    <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>
    
  8. z-index 속성을 확인합니다. AdControl이 항상 다른 요소 위에 표시되도록 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>
    
  9. 외부 스타일시트를 확인합니다. 외부 스타일시트를 통해 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>
    
  10. 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>
    
  11. AdControl이 뷰포트에서 숨겨지지 않았는지 확인합니다. 광고가 제대로 표시되려면 AdControl이 표시되어야 합니다.

  12. ApplicationIdAdUnitId의 라이브 값은 에뮬레이터에서 테스트하면 안 됩니다. AdControl이 예상대로 작동하는지 확인하려면 ApplicationIdAdUnitId에 대한 테스트 값을 모두 사용합니다.

  1. 이전의 AdControl이 표시되지 않음 섹션의 모든 단계를 다시 확인합니다.

  2. 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>
    

    블랙 박스를 유발하는 가장 일반적인 오류는 "사용할 수 있는 광고 없음"입니다. 이 오류는 요청에서 반환할 수 있는 광고가 없음을 의미합니다.

  3. AdControl은 정상적으로 동작합니다. 기본적으로 AdControl은 광고를 표시할 수 없을 때 축소됩니다. 다른 요소가 동일한 부모의 자식인 경우 축소된 AdControl의 간격을 채우기 위해 이동하고 다음 요청이 있을 때 확장될 수 있습니다.

광고가 새로 고쳐지지 않음

  1. isAutoRefreshEnabled 속성을 확인합니다. 기본적으로 이 선택적 속성은 true로 설정됩니다. false로 설정하면 refresh 메서드를 사용하여 다른 광고를 검색해야 합니다.

    <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>
    
  2. refresh 메서드에 대한 호출을 확인합니다. 자동 새로 고침을 사용하는 경우, refresh를 사용하여 다른 광고를 검색할 수 없습니다. 수동 새로 고침을 사용하는 경우, 디바이스의 현재 데이터 연결에 따라 최소 30~60초 후에만 refresh를 호출해야 합니다.

    이 예시는 refresh 메서드를 사용하는 방법을 보여 줍니다. 다음의 HTML 코드는 isAutoRefreshEnabled를 false로 설정하여 AdControl을 인스턴스화하는 방법의 예시를 보여줍니다.

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

    이 예시는 refresh 함수를 사용하는 방법을 보여줍니다.

    args.setPromise(WinJS.UI.processAll()
        .then(function (args) {
            window.setInterval(function()
            {
                document.getElementById("myAd").winControl.refresh();
            }, 60000)
        })
    );
    
  3. AdControl은 정상적으로 동작합니다. 경우에 따라 동일한 광고가 연속으로 두 번 이상 표시되어 광고가 새로 고쳐지지 않는 것처럼 보일 수 있습니다.

JavaScript

AdControl이 표시되지 않음

  1. Package.appxmanifest에서 인터넷(클라이언트) 기능이 선택되어 있는지 확인합니다.

  2. AdControl이 인스턴스화되었는지 확인합니다. AdControl이 인스턴스화되지 않은 경우. 사용할 수 없습니다.

    다음의 코드 조각은 AdControl을 인스턴스화하는 예시를 보여 줍니다. 이 HTML 코드는 AdControl에 대한 UI를 설정하는 예시를 보여 줍니다

    <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 {
                ...
            }
        }
    }
    
  3. 부모 요소를 확인합니다. 부모 <div>를 올바르게 할당하고, 활성화하고, 표시해야 합니다.

    var adDiv = document.getElementById("myAd");
    var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, {
        applicationId: "{ApplicationID}",
        adUnitId: "{AdUnitID}"
    });  
    
  4. 애플리케이션 ID 및 광고 단위 ID를 확인합니다. 이러한 ID는 파트너 센터에서 얻은 애플리케이션 ID 및 광고 단위 ID와 일치해야 합니다. 자세한 정보는 앱에서 광고 단위 설정하기를 참조하세요.

    var myAdControl = new MicrosoftNSJS.Advertising.AdControl(adDiv, {
        applicationId: "{ApplicationID}",
        adUnitId: "{AdUnitID}"
    });  
    
  5. AdControl의 부모 요소를 확인합니다. 부모는 활성 상태로 표시되어야 합니다.

  6. ApplicationIdAdUnitId의 라이브 값은 에뮬레이터에서 테스트하면 안 됩니다. AdControl이 예상대로 작동하는지 확인하려면 ApplicationIdAdUnitId에 대한 테스트 값을 모두 사용합니다.

  1. AdControl 표시되지 않음 섹션의 모든 단계를 다시 확인합니다.

  2. onErrorOccurred 이벤트를 처리하고, 이벤트 처리기에 전달된 메시지를 사용하여 오류가 발생했는지 여부 및 발생한 오류 유형을 확인합니다. 세부 정보는 JavaScript 연습의 오류 처리하기에서 찾을 수 있습니다.

    이 예시는 오류 메시지를 보고하는 오류 처리기를 구현하는 방법을 보여 줍니다. 이 HTML 코드 조각은 오류 메시지를 표시하도록 UI를 설정하는 방법의 예시를 제공합니다.

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

    블랙 박스를 유발하는 가장 일반적인 오류는 "사용할 수 있는 광고 없음"입니다. 이 오류는 요청에서 반환할 수 있는 광고가 없음을 의미합니다.

  3. AdControl은 정상적으로 동작합니다. 경우에 따라 동일한 광고가 연속으로 두 번 이상 표시되어 광고가 새로 고쳐지지 않는 것처럼 보일 수 있습니다.

광고가 새로 고쳐지지 않음

  1. AdControlIsAutoRefreshEnabled 속성이 false로 설정되어 있는지 확인합니다. 기본적으로 이 선택적 속성은 true로 설정됩니다. false로 설정하면 Refresh 메서드를 사용하여 다른 광고를 검색해야 합니다.

  2. Refresh 메서드에 대한 호출을 확인합니다. 자동 새로 고침(IsAutoRefreshEnabledtrue)을 사용하는 경우 Refresh를 사용하여 다른 광고 검색을 수행할 수 없습니다. 수동 새로 고침(IsAutoRefreshEnabledfalse)을 사용하는 경우 디바이스의 현재 데이터 연결에 따라 최소 30~60초 후에만 Refresh를 호출해야 합니다.

    이 예시는 AdControl에 대한 div를 만드는 방법을 보여 줍니다.

    <div id="myAd" style="position: absolute; top: 0px; left: 0px;
                          width: 250px; height: 250px; z-index: 1"
         data-win-control="MicrosoftNSJS.Advertising.AdControl">
    </div>
    

    이 예시는 Refresh 함수를 사용하는 방법을 보여 줍니다.

    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)
        })
    );
    
  3. AdControl은 정상적으로 동작합니다. 경우에 따라 동일한 광고가 연속으로 두 번 이상 표시되어 광고가 새로 고쳐지지 않는 것처럼 보일 수 있습니다.