Web

개요

NAM 광고를 HTML Element에 연결하여 즉시 송출합니다.

기기에서 광고 ID 수집이 허용되어 있어야 광고 송출이 가능합니다.

설치

Android Native SDK

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)
    val webView = findViewById<WebView>(R.id.wvWebView)

    // Web SDK 연동하는 WebView 설정
    webView.settings.apply {
        javaScriptEnabled = true // 자바스크립트 활성화
        domStorageEnabled = true // DOM 스토리지 활성화
    }
    
    // JavaScript Interface 추가
    webView.addJavascriptInterface(
        SPCWebView.SPCWebBridge(context = context, webView = webView),
        SPCWebView.WEB_VIEW_BRIDGE
    )
}
  • WebVieiw 내 Javascript 및 Local storage 활성화

  • Javascript Interface 설정

    • addJavascriptInterface 함수를 이용해 AvatyeWebBridge를 설정합니다.

  • 이후에는 Web SDK를 확인해 웹 페이지 내에 배너를 지정하여 광고를 송출할 준비를 진행합니다.

iOS Native SDK

class webSDKTestViewController: ViewController {
    var webView: WKWebView = WKWebView()
    var pageUrl = "test.html"
    
    override func viewDidLoad(){
        super.viewDidLoad()
        
        // 웹뷰에 Javascript Bridge 설정
        let scriptMessageHandler = AvatyeWebSDKController(rootWebView: webView)
        webView.configuration.userContentController.add(scriptMessageHandler, name: "AvatyeBridge_SPC")
        
        // 웹뷰 Delegate 설정
        webView.navigationDelegate = self
        
        // 웹뷰를 뷰에 추가
        view.addSubview(webView)

        // 웹 페이지 로드
        if let url = URL(string: pageUrl) {
            let request = URLRequest(url: url)
            webView.load(request)
        }
    }
}

// WKWebview Delegate 구현
extension webSDKTestViewController: WKNavigationDelegate{

  func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
        guard let url = navigationAction.request.url, url.absoluteString != "about:blank" else {
            decisionHandler(.cancel)
            return
        }
      
        if url.absoluteString != pageUrl {
            // 웹뷰에서 사용중인 url과 다를 경우, 기본 브라우저로 오픈 처리
            UIApplication.shared.open(url, options: [:]) { isSuccess in
                // after open
            }
            decisionHandler(.cancel)
        } else {
            // 웹뷰 내에서 랜딩
            decisionHandler(.allow)
        }
  }
}
  • AvatyeWebSDKController에 rootWebView 객체를 설정 후 생성해줍니다.

  • AvatyeWebSDKController를 생성 후, “AvatyeBridge_SPC” 이름으로 scriptMessageHandler를 등록해줍니다.

  • 기본브라우저에서 랜딩을 처리할 수 있도록 Delegate를 구현합니다.

  • 이후에는 Web SDK를 확인해 웹 페이지 내에 배너를 지정하여 광고를 송출할 준비를 진행합니다.

Web SDK

<Html>
    <Head>
    </Head>
    <body>
        // 상용
        <script src={'https://avatye-resources.s3.ap-northeast-2.amazonaws.com/pointhome/webSdk/spc/pointhome-{version}.min.js'} />
        // 테스트
        <script src={'https://avatye-resources.s3.ap-northeast-2.amazonaws.com/pointhome/webSdk/spc/pointhome-{version}-test.min.js'} />
    </body>
</Html>
  • script 태그를 <body> 태그 내부의 하단에 추가합니다.

  • 대역별로 파일명이 구분됩니다.

    • 상용: pointhome-1.0.4.min.js

    • 테스트: pointhome-1.0.4-test.min.js

스크립트의 URLv1.0.4부터 변경되었습니다.

https://avatye-resources.s3.ap-northeast-2.amazonaws.com/pointhome/webSdk/spc/pointhome-1.0.4.min.js

(이전 레거시 파일(v1.0.4 미만)들은 기존 경로에서도 import 가능합니다.)

사용법

// 최초 initialize하여 지면 세팅에 필요한 데이터를 초기화합니다.
Pointhome.NAM.init({
    pubID: '868410196', // 앱 키
    eventListener: { // NAM EventListener 등록 (Optional)
      onLoaded: (elementID) => {
          // elementID: 광고가 등록된 elementID
          console.log("onLoaded", elementID)
      },
      onClicked: (elementID) => {
          // elementID: 광고가 등록된 elementID
          console.log("onClicked", elementID)
      },
      onError: (elementID, stat) => {
          // elementID: 광고가 등록된 elementID
          // stat: 에러 코드 (0: error (invalid ad unit id, ...), 2: no ad, 3: timeout)
          console.log("onError", elementID, stat)
      },
    },
});

// 지면 1개 세팅
Pointhome.NAM.setPlacements({
    elementID: 'ph-NAM', // 광고 노출 영역 (HTML Element)의 ID
    placementID: 'njsSWrFDZs3HRZK', // 지면 ID
    adUnitID: 'WEB_nw_banner-N345765840', // NAM 광고 유닛 ID
    onClick: (elementID, curl) => { // 지면 클릭 이벤트 (curl을 통한 랜딩 처리)
      console.log("onClick", elementID, curl);
    }
});

// 지면 n개 세팅 (배열 param으로 전달)
Pointhome.NAM.setPlacements([
    {
        elementID: 'ph-NAM',
        placementID: 'njsSWrFDZs3HRZK',
        adUnitID: 'WEB_nw_banner-N345765840',
        onClick: (elementID, curl) => {
          console.log("onClick", elementID, curl);
        },
    },
    {
        elementID: 'ph-NAM-2',
        placementID: 'njsSWrFDZs3HRZK',
        adUnitID: 'WEB_nw_banner-N345765840',
        onClick: (elementID, curl) => {
          console.log("onClick", elementID, curl);
        },
    },
]);

// initialize와 동시에 지면 세팅
Pointhome.NAM.init({
  pubID: '868410196',
}).then(() => {
    Pointhome.NAM.setPlacements({
        elementID: 'ph-NAM',
        placementID: 'njsSWrFDZs3HRZK',
        adUnitID: 'WEB_nw_banner-N345765840',
        onClick: (elementID, curl) => {
          console.log("onClick", elementID, curl);
        },
    });
})
  • 최초에 init()을 해야 합니다.

  • 이후 원하는 만큼 지면을 세팅할 수 있습니다.

  • init()은 Promise로 동작하기에 동시에 지면 세팅을 진행하고자 할 경우, then()을 이용합니다.

연동 개발 및 테스트 시, 위의 코드에 사용된 키를 사용해주세요.

Function

Parameter

Require

Description

init() : 세팅 초기화

pubID(String)

O

앱 키

eventListener (Object)

X

이벤트 리스너 - onLoaded: NAM 로드 완료 시 밟생 - onClicked: NAM 지면 클릭 시 발생 - onError: NAM 로드 실패 시 발생

setPlacements() : 지면 세팅

elementID(String)

O

ex) ‘nam-1’

placementID(String)

O

지면 ID

adUnitID(String)

O

NAM 광고 유닛 ID

onClick (Function)

O

지면 클릭 이벤트

elementID: 앨리먼트 id curl: 랜딩 URL

지면 샘플 스크린샷

메인 스크린샷 확인

Error

code

status

message

Description

init_required

-

필수 값이 세팅되지 않았습니다.

init()을 호출하지 않은 경우 발생

required_adid_agree

-

광고 ID 수집 동의가 필요합니다.

기기 설정에 광고ID를 받아오지 않게끔 설정되어 있는 경우

request_adid_failed

-

광고 ID를 가져오는데 실패했습니다.

브릿지 통신에 실패한 경우

invalid_parameter

400

${parameter} is not defined.

필요한 파라미터를 받아오지 못한 경우(SDK 에러)

Exception

-

-

네트워크 연결 불가능 또는 분류되지 않은 에러 발생 시

Last updated