Web

개요

피드 광고 데이터를 조회해 직접 UI를 구성하여 광고를 송출합니다.

기기에서 광고 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-web-sdk.s3.ap-northeast-2.amazonaws.com/spc/pointhome-{version}.min.js'} />
        // 테스트
        <script src={'https://avatye-web-sdk.s3.ap-northeast-2.amazonaws.com/spc/pointhome-{version}-test.min.js'} />
    </body>
</Html>
  • script 태그를 <body> 태그 내부의 하단에 추가합니다.

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

    • 상용: pointhome-1.0.5.min.js

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

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

https://avatye-web-sdk.s3.ap-northeast-2.amazonaws.com/spc/pointhome-1.0.5.min.js

(이전 레거시 파일(v1.0.5 미만)들은 기존 경로와 최신 경로 모두 import 가능합니다.)

피드 광고

// 최초 initialize하여 광고 세팅에 필요한 데이터를 초기화합니다.
// Promise로 동작하며, init 이후에 바로 피드 광고를 조회할 경우 비동기 처리가 필요합니다.
Pointhome.feed.init({
  uniqueID: '11111111-2222-3333-4444-555555555555', // user key
});

// (Sample) 피드 광고를 조회합니다.
const getFeed = async () => {
  const result = await Pointhome.feed.get({
    placementID: '', // 아래 표를 참고해 주세요.
    targetFill: 10, // 불러올 광고 갯수
    cursor: '', // 요청할 광고에서 제외할 광고 데이터
  });
  
  console.log(result);
  // {
  //     cursor: 'bzc_gaot8Uq0T2odG6S_l3sCc875XP826CeoCvOvLPG0-Fj34YcI_8uLZab9NNSPaSzDjkVs3qgjhgt7iHCF9HX6l5WGqVPTU7-6s9p2J_wSvWlejrIVCzzpRiExKqoFxVKe6ahykOzv6aRMkf-SpbtC_s4fLfs4jNGg9uDpoZiLet5owqb77bdr9_ErzBf-NVsX0WVFx0p9zfkLOS8-wX6jrok-CwV6HXfcFmH5d7pFvr0=',
  //     items: [
  //         {
  //             id: 1999189,
  //             name: 'ALL',
  //             impression_urls: [
  //                 'https://atr.buzzvil.com/api/impression?data=Y4i8BXVAIbDvh3gHYfrRaFUuXUCWXYZGZ5P9WOofr2HgAUV1Xdxped01Su4et7zxSiE49BNJ1Nc3uFozzWjFM4cGbYZovt3zKxAgNlV6eJDwG1afbm0Lo_29H80JHqzl_L3HIynKbtb2rk9Nt4HwzhHpAyOQGD_gn02iUwnsww47Hx2gDwuUWQAfukJD5nHkaEFoNgNZT7WQdRCJ6ppF_Ny7peZHdT8byFwtY147awx7xoEb1Sn_3LPUu11vLTIy2Q9qSLcu7ovw1OcZYIDIVC129u0kL-HQ3Vm8FsXggJ84Il19M0pFe0Yh85Hylm-ti4w9kpZlpKRuruVM6zz6QTKdGxXYNwJk5MDcPQrJLvAG59JjUYw4pKzhksL4vAjUKGNQDuY-bAmUrMQy3uGHgUsFRSQpQ9hhSKnnx6yA7sKYwxIP07V6q9I2P1l6yrJL7VVQ4Dqajir0hrLgTy-QBnM_Y1hYK31mbBQ4rDxTZEYpZjMCUKSMbpqSlHpsIoFiscDFLIqPOM_qn3RgdTs_R-i-dOmHaWAdwm4K3bxHNXWzCGWJ7FqLpbpYK8E-pRltmYi41mm2FMaXs9eGgBRQY9UG6PurE1m87mIxF9ESAJ6uMqIbtQu8D9CD08hLH4C59a89IFY8lwGIVBvqIXom_JC-8KVXkds47OFYB_RuXP0znxxzQU1PQMrx6mR5ZlgxV7mR2rv8b8LTZrrzRl2Y7UO-TOQewVkY003HvhbcQw9bjn6D3iBHKp18KBsKkTZxo5t-8Noh4RF-8o6bSVJ7NyqHCSAk4rWrqa0J1V5R9UuISjKtcGZG1rp8uidn9kVdauswfUiXhMHr6I6xJoHQhHJRLHpA-9n0PxLK4uZcWyw%3D&ifv=__ifv__&position=__position__&session_id=__session_id__',
  //             ],
  //             reward: 4,
  //             reward_condition: 'click',
  //             check_participation_url: '',
  //             type: 'cpc',
  //             creative: {
  //                 title: 'ALL_DEV_TEST10_CPC_creative_1',
  //                 description:
  //                     '임의의 포털 사이트로 랜딩되는 테스트 CPC 광고입니다.',
  //                 click_url:
  //                     'https://screen.buzzvil.com/api/s2s/click_redirect/?payload=fUUPRSkJ9NE9o7ByhMhZQv5SRkyhkCJc2LkFS0NWcCp8mHLTsOV6z2Zj_KEDXXyMKxU5sdSCytoTP5Ghi3o_Ne6UjC9ZMWE_5MRBNVv-bNilmDgK2m5foWpehJBZbek7qM36U8b7VP-mCYfK5wRMWMFuuLHgD4q13R7aHzjVXYz-l6xathGYmacQTEuph0iMcL32fIeIO0Gc-KofjxVuii72n3pAwol-vscHf4TMiWz4chTILshR5NQJ51f2wzkymLTZGRSBvlhT_4mlT8e2CiQgk1ZB1YFQ3tM2gKUjFAIDU56n6gjd01Ywu1J5NuWEp4Lu4t8vddoisG7KuzSIQnfWTkIljrxH3JTQgO-wP82dnzz1H4pWAyJP6Dy3x1yYoVIGKGT1OjssiulC7ieepgNsaUQqtwE_b6NEF81PQQPiSsJkd2o4iFQLWWGpVbU9FTN0iIPUQyX2NU1oJ8FWv8_45LsiknU8U5dwUpJtxvxrsa6ErfANeiS_YAx_GWW1P8SVpjosypACIHvAQIgg3vRm1IqdY3Fkf4tX3GIQY-dsm8xZlzRUw_-VHznAYcQ09VDunP8SaY78Q0CPS8CL6SU5Juqixb30oQo21FRF287FP-4uPKrNbuoaA1Z2C7FmPPWGAnFZGEePskISN7pTTLyHcEFA8xygZlKhNxq0XvZoJ-zLdImMzT7Nzp_msjdNHO1eZ2arBjR96NfvfrTMflubI-k0yGky-12LRApAl55q1iRIVVNxvHwmEGv7V_VvPCD0QSjYAJqrNXgc1mJ23fDkkD3GInRqRZHPt5eu_ndPrcz8bbbKooIPz5bUG9IEW8B-pHCsbj-xYAkPK-1aqhHyycZIhu7YDYFGjiUxFYjggcO40guf668brzBRZnRqdkScq8EJn2CaARXZ3Icov_pfORKtWihvqHVAVDLp7FSX-IiR0qlvEk6da53wFPI3t1hLJRtq51HNIacSxqMkEiE440eJfTgSTFMysj6dpXlpF3Dh64BQqFll1JH3hfvYzGRijYFRkHB0ghdKNoVzSNgReqt_Pb4Lw8Vj417pqai5QhWkpcyXsUUc4jyNVeAh02QZ_ik6eJ1w2uSNg3Zw5Th7wwwRIIuPRJS_CkPIcwMdG3uKPrnNgpwkTt575LtrKeyPXj6ONyk3ieOqrbHuoR0SR8zMT4NPuEvzTJ26Ih7bswWf8tasEP0sg27WIfXwL8YRQ1nQbsf2NnXFBRjMglkTxlnix3l0CWANi7xhP-LUwYTbZxhx41QO6CP9j_L0apnmbQPPtOSOFpautqCJpHjuQ5RA5st67IDEzc-dxJed3tr_E9QxVT_cH8SFPiXIAlrpQ58_t6Kz-0GVnHcyBERgnmiBcCC4wo-HR_9F90WwAVLonQdEq-IkoYmkZ0NH76UK2QmQdWt-HreROitHE-2L8L2b24EM03_3cw12NGsXF76ZD2zHzeOYYg5eBCpcEagwXb_boeVeWfqAhlG_hhLCw1c2S8fVpw_m-b_V1paDLulhX9WYzqHdNibLIMUuZodBoyIqcIFr_TKlyrg3t9PrCOaXdn0PZPDz0Ji-sL1QJUn4BzqywZLsiXyBa3TD3zvGuTJ3uk4ClQKp2wpf1rdLdQ1TyQhcDjjY94wuOUq5v8zopFCGA5P11OIrjhgovBhUGbBJGPko_3OMAcWKQU6v7W-21lGjrzotyHSka5e8yw-4_Uv59Ec76ZCwtjWXjDC4NvU--mla6VQAES3nA5oG8wcih3QWjADYvdADDGeIhfSBSCpaLNqmAYLWc6IK6SGFp01umfuvlHd3r8MQoHsnuo8RqILZbCZhQkXry5k%3D&custom=%7B%22id%22%3A1999189%2C%22appID%22%3A%22a66990f6144a46b9816de3283fd47083%22%2C%22userID%22%3A%229f7942e7077a4725982c087ed2d66958%22%2C%22env%22%3A%22DEV%22%7D',
  //                 call_to_action: '자세히보기',
  //                 width: 1200,
  //                 height: 627,
  //                 icon_url:
  //                     'https://d3aulf22blzf9p.cloudfront.net/uploads/1677233158-MPYED.png',
  //                 image_url:
  //                     'https://d3aulf22blzf9p.cloudfront.net/uploads/1677233150-6CS5Z.jpg',
  //                 is_deeplink: false,
  //             },
  //             payload: 'putqXcFNTNoLkOxbUqHJzEmWdsXV2V6KtVXFTwWmUtE=',
  //         },
  //         {
  //             id: 1999178,
  //             name: 'ALL',
  //             impression_urls: [
  //                 'https://atr.buzzvil.com/api/impression?data=Y4i8BXVAIbDvh3gHYfrRaFUuXUCWXYZGZ5P9WOofr2HgAUV1Xdxped01Su4et7zxBQDMIrDDN4DPdRvm-slq25v3n7DLo63ELE9UfAxL_v-8SiP0kVQdcVevMCY3J0wfWSV_BCvQ1neW69qQ5xbyF5ZRnaV4-_rkSc00cuA8FSYdxVExlPA92l8atteNS1vWQqAlygwHzU0wmP5nCSO0NhOsSYICIPurx-TmWVo-K5pFy6m65-u4iUud1BMq8ioOgsb81MnxydYluHl9Oc0BOpON8g6cedEmRtFBLudUzPqRgaC653GdP1ZQc3u-3QT51e9QCuHG9jjjt1IqNsvvOognv-NHcuy75INVUxt8GOFFS1JlfQxQcZOGB03JyEHFMGB7YM1o1yK-BDZFmBvSgqZft-YyDWe7Ik3nueyHmc1r6KyMv1-xpMOeCKakWbS_E8NDlWZdR9yGhT45Fl387gqNbdbDnppmTx-Aix_eWWI5aQy125YL7agJxufxjyOUGatAklR4oChHWzIYvMq3K4NEV274vO7i53C0elglztbuhmXhfNn1xm-pX3-HpFGHBmOOLx9jbBjKJhFThzJEFnqOdanWr-J_xK2knntoElwXTwf--f9Dd2iIX6YZ0ZvqYLfv3jbHiDLrB-3T6ZJaFuESiRBiWkIYlZAQXhomzfaN7n52rQWDIHaBnt929uaxpppUuinE0Pp1SD_Xtu1qix0XQ3OLF3ZhHIHxLGrgwqIzxyEkr3ZCG1_c7x-X8LR3aXSkDwo_4xKPxVEBcJ5fWrSeqgbMNCUDBGTF7RIcFh83RFuNt0-3Rx7gNTWFi1b1V0xRZIwbja3r9lNHjrAh9A%3D%3D&ifv=__ifv__&position=__position__&session_id=__session_id__',
  //             ],
  //             reward: 4,
  //             reward_condition: 'click',
  //             check_participation_url: '',
  //             type: 'cpm',
  //             creative: {
  //                 title: 'ALL_DEV_TEST20_CPM_creative_1',
  //                 description:
  //                     '임의의 포털 사이트로 랜딩되는 테스트 CPM 광고입니다.',
  //                 click_url:
  //                     'https://screen.buzzvil.com/api/s2s/click_redirect/?payload=fUUPRSkJ9NE9o7ByhMhZQv5SRkyhkCJc2LkFS0NWcCp8mHLTsOV6z2Zj_KEDXXyMKxU5sdSCytoTP5Ghi3o_NURJK95JJyhazIi_-6KZYL8FBD96EIfZhsJwqY2OkNObjqJhFMR8WLThC4Mk-KWea7g6h0TilGkGP7jC8WyiS6x3CAWbV6jmfcLWJ2P8FRz-zn9rXbf8xl1ya_nOORaV1dYmKx_b28AXcak5i0e0sD9KQ25TaCBuFiaAF1jlxmPj3qVK1Pejlaaxc1GY6b4LyKskgtL3tV4p2ZmYwi85BcPZEsWp4DWjjY8b1ozWRGcGyCwK6QssWHu4M0-4Bm3aU-RhGImdb2pxHSrOTVuS3PktH12GZJAfyYmZnlvfKeBlJ4v3Tpz8tgAzkfrJrUnoOJcozPgEqlMs22avRH891w-jH_TGzlyrvWJLQ_4hL4MZ0aSr1BNWwj4_iKqsS5KWgIOxoi0QBi0TKrnOERTVygcqYmEUW_kEwk56KXOPEmsiRg8ZvANGr6IZ6FwKNOqSes7SrlBpX7nkolvW1N96vbT9UYi9U2FNXv41tOFtvsn_BJSdgavNBquPknB-1OI4s2-Y4RxjFpw0ZRP2NRZbt0AJQizkioTVS3YHI3Qfwi4miYrflYHGxLdFDlOj1JbiQx7-CB2pqZlPm4eB09R0P-S-HmNQTU88MuzyS8foFEkXThtNi1y5JcKLqNDelJP8ePGr1G6slYSZj55Qv-hQbWCglNOhMglEbI7QHYGgKpANutrn3niEGMQys0Wk8E0ntHSsNY59I8WHaSVs4SU80tBAmJeGRXoRGA5nzQr9PKiF9sLGdMx2QmHWAH32b-0XqwCh_cBmD7FKxphwWVdjJJsKk1ei6rzx1cHXGGeumUeH7-78aPFcZFXE3cDiRRDckFMR5abv0BIBFKz9xVz62lASgRQwDZZfz_3g6y4HJtF6kR7nFFok7dRWxlGpiCpVipRhshej3wesDj8ZGAx0giZ2rNP4gIomhCcnMOWJgqws1F0ioAxv1XwbDE7KuH7a8x2ColNYuQ8wUmSSx-eONohQjnlN27DAZzfSSRDOKnShETTBmDu_VX7xEdn1NRg7CG078kct_BuV0hMKD7tdyjNq9NL9azFIR7KjEXGPsu0VM0qQyS7ubcLr8CPOmN9qvmXp0MOXvF2z8puok_3I0w9WmJ7UDGTNfEXzFdk8gzt1bG6EAVt8A5qXtR14XAzzuXWvqXUTBmozmGrdMslBpn0wFLOAXalyguiFWLcUJN3ZfUGYis8aZE2JMOkMB77_5kUlc4AkkyvjnvFZ2fg4HQ8cgOwgGY8HNmUTopsGtURg-8MkPoZXxtqNvOYMpFWE4H6s-cVFLSeNFNHbQkNlEW3LAIu5Ng4HmgvHx5GvL8j5UBORBzOpnwoZjoh2UZGz08zsnKdwbhm8S9-Ftsg-y1AnPvcZTM9C305Rbp9yhxy7NdC9VhsHmieiFZwJpVZrcfqFGcuj5xcLZN0nKBFrM9AXtelfqMqcl_pGPfhvypAkLJqXDK8zYQ01is6i5YQCF1wC9Kq6ys8Ok7gyW10827tdPdYV4B7VxwF4pip3mHNFZXuAVTIVQ23SI-vGYyKyTp8blj7e51P9QZfIm2sIgQvdS16txTOAgUN42-79E5JRW8COU8EhKxywq11jHD7tulaPpB7JPCCej-HGLUUF8M27MfH8A14WsjMl8AqlbU0I5fUSSVExV5cClU6hjb__NnBZ-RzJVrv4O-Lv-Xf0LzfMCo38NucQD-a9HfgCNbpgo1g3T6K8XzQTojpkC2eong%3D%3D&custom=%7B%22id%22%3A1999178%2C%22appID%22%3A%22a66990f6144a46b9816de3283fd47083%22%2C%22userID%22%3A%229f7942e7077a4725982c087ed2d66958%22%2C%22env%22%3A%22DEV%22%7D',
  //                 call_to_action: '자세히보기',
  //                 width: 1200,
  //                 height: 627,
  //                 icon_url:
  //                     'https://d3aulf22blzf9p.cloudfront.net/uploads/1677232687-OWTLV.png',
  //                 image_url:
  //                     'https://d3aulf22blzf9p.cloudfront.net/uploads/1677232676-B9IGL.jpg',
  //                 is_deeplink: false,
  //             },
  //             payload: 'u5ggt09OYMVaDN51Mhb0JFG+1DXBVufkjfqIvl1P5sI=',
  //         },
  //     ],
  // };
};

// 매출 정산을 위하여 광고 클릭 전에 호출 필요
// ex) impression_urls = ['https://...', 'https://...']
Pointhome.feed.impression(impression_urls);

Function

Parameter

Require

Description

init() : 세팅 초기화

uniqueID(String)

O

유저 식별자

gender(String)

X

성별 (남자: M, 여자: F)

birthDate(String)

X

출생년도 '1990'

get() : 피드 광고 조회

placementID(String)

O

지면 ID

클릭하고 적립 AOS: d18ab1bc-04a4-4035-b99e-20ee229e5bfb iOS: 743e0a42-0085-4067-bf2c-7e1b2c7765ba

미션하고 적립 AOS: 7a44889f-83e4-478f-9ea2-1843a772623c iOS: 877f2890-9022-45a2-a7a0-768032f6cbbb

targetFill(Number)

X

불러올 광고 갯수

cursor(String)

X

요청할 광고에서 제외할 광고 데이터

impression() : 매출 정산용

impression_urls (String[])

O

광고 하나 당 n개의 impression_urls가 포함되어 있는데 참여 전에 모든 url을 impression 해야 함

  • Response Data의 자세한 타입은 링크을 참조해 주세요.

연동 시 주의사항

impression_urls

items Modelimpression_urls (method: GET)

광고 노출여부를 확인하기 위한 URL입니다.

매 광고마다 광고가 노출되었을 때, 해당 필드에 포함된 URL을 모두 호출해주세요.

호출되지 않을 경우 광고 매출정산이 맞지 않을 수 있습니다.

click_url

creative Modelclick_url

광고 참여 URL입니다.

사용자가 광고를 클릭하는 경우, 해당 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 에러)

UNAUTHORIZED

401

인증 정보를 찾을 수 없습니다.\n인증이 필요합니다.

인증에 실패한 경우 발생하며, 자주 발생 시엔 문의 필요

INVALIDPARAMETER

499

입력값이 잘못되었습니다

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

err_fail_feed_server_error

499

광고 서버의 응답이 지연되고 있습니다.\n잠시 후 다시 시도해주세요.

광고 서버에서 예기치못한 에러가 발생

err_cannot_get_feed

499

광고를 불러올 수 없습니다.

광고를 조회할 수 없는 경우 (광고 소진 등..)

Exception

-

-

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


Pointhome Interface [@types/Pointhome.d.ts]

interface Pointhome {
    NAM: {
      init: ({ pubID, eventListener }: {
        pubID: string;
        eventListener?: {
            onLoaded?: (elementID: string) => void;
            onClicked?: (elementID: string) => void;
            onError?: (elementID: string, stat: number) => void;
        };
      }) => Promise<void>;
      setPlacements: (
        params:
          | {
              elementID: string;
              placementID: string;
              adUnitID: string;
              onClick: (elementID: string, curl: string) => void;
            }
          | {
              elementID: string;
              placementID: string;
              adUnitID: string;
              onClick: (elementID: string, curl: string) => void;
            }[]
      ) => void;
    };
    feed: {
      init: ({
        uniqueID,
        gender,
        birthDate,
      }: {
        uniqueID: string;
        gender?: string;
        birthDate?: string;
      }) => void;
      get: ({
        placementID,
        targetFill,
        cursor,
      }: {
        placementID: string;
        targetFill?: string;
        cursor?: string;
      }) => Promise<Feed>;
    };
};

type Feed = {
  cursor: string;
  items: {
      id: string;
      name: string;
      impression_urls: string[];
      reward: number;
      reward_condition: string;
      check_participation_url: string;
      type: string;
      payload: string;
      creative: {
          title: string;
          description: string;
          click_url: string;
          call_to_action: string;
          width: number;
          height: number;
          icon_url: string;
          image_url: string;
          is_deeplink: boolean;
      };
  }[];
}

Last updated