애드팝콘 SSP SDK 연동가이드
애드팝콘 홈페이지애드팝콘 SSP 콘솔 바로가기
  • 개요
  • Android
    • 기본 설정
    • 배너 광고
    • 전면 광고
    • 전면 비디오 광고
    • 리워드 비디오 광고
    • 보상형 광고 플러스 연동(beta)
    • 네이티브 광고
      • 네이티브 광고 레이아웃 구성 가이드
        • AdPopcornSSP NativeAdView
    • 스플래시 광고
    • 모달 광고
    • 팝콘텐츠 광고
    • 응답 에러 코드 및 샘플 프로젝트
    • 미디에이션(Android)
      • AdFit
      • Admob
      • AdForus
      • ADOP
      • GAM (Google Ad Manager)
      • Cauly
      • FAN(Facebook Audience Network)
      • MezzoMedia
      • Mintegral
      • Mobwith
      • UnityAds
      • Vungle(LiftOff)
      • Fyber
      • Pangle
      • AppLovin
      • AppLovinMax
      • NAM (Naver Ad Manager)
      • CoupangCPM
    • AppLovin Max Android Mediation 가이드
    • 릴리즈 노트
  • iOS
    • 기본 설정
      • CocoaPod 설치
      • SPM 설치
      • 수동 설치
    • 배너 광고
    • 전면 광고
    • 전면 비디오 광고
    • 리워드 비디오 광고
    • 보상형 광고 플러스 연동(beta)
    • 네이티브 광고
      • NativeAdView layout
        • 직접 설정
        • 템플릿 사용
    • 스플래시 광고
    • 모달 광고
    • 팝콘텐츠 광고
    • 응답 에러 코드 및 샘플 프로젝트
    • 미디에이션
      • NAM (Naver Ad Manager)
      • AdFit
      • AppLovin
      • AppLovinMAX
      • UnityAds
      • Vungle
      • FBAudienceNetwork (FaceBook)
      • AdMob
      • Google AdManager(GAM)
      • ADOP
      • Fyber
      • Mezzo
      • Mintegral
      • Pangle
      • Cauly
      • SDK, Mediation ver 호환성
    • AppLovin Max iOS Mediation 가이드
    • 릴리즈노트
  • Unity
    • Unity (Android)
      • 기본 설정
      • 배너 광고
      • 전면 광고
      • 리워드 비디오 광고
      • 네이티브 광고
      • 보상형 광고 플러스 연동(beta)
      • 미디에이션 Unity Android
    • Unity (iOS)
      • 기본 설정
      • 배너 광고
      • 전면 광고
      • 리워드 비디오 광고
      • 네이티브 광고
      • 보상형 광고 플러스 연동(beta)
      • 미디에이션 Unity iOS
    • 에러 코드
  • Flutter
    • 기본 설정
    • 배너 광고
    • 전면 광고
    • 전면 비디오 광고
    • 리워드 비디오 광고
    • 보상형 광고 플러스 연동(beta)
    • 네이티브 광고
    • 팝콘텐츠 광고
  • React Native(beta)
    • 기본 설정
    • 배너 광고
    • 전면 광고
    • 전면 비디오 광고
    • 리워드 비디오 광고
    • 네이티브 광고
  • Web SDK
  • 하이브리드 앱 - Web(APM + NAM)
    • 네이티브 Side 연동(Android)
    • 네이티브 Side 연동(iOS)
    • WebPage Side 연동
    • 광고 ID 수동 세팅
  • 하이브리드 앱- Web(Adfit)
    • Android
    • iOS
  • 테스트 코드
  • 리포트 API
    • 애드팝콘 SSP Report API
    • DSP Report API
    • Publisher API (Report)
    • Publisher API (Metadata)
    • Adserver Report API
    • Popcontent Report API
  • 추가 기능 연동가이드
    • Adfit Bizboard Android 연동 가이드
    • 웹 CS 페이지 연동
    • AppLovin Custom Network
      • Android
      • iOS
    • KT Library
    • 원스토어 연동가이드
      • 애드팝콘 SSP SDK for Onestore
      • 원스토어 Ads 래핑 가이드(내부용)
        • 배너 광고
        • 전면 광고
        • 전면 비디오 광고
        • 리워드 비디오 광고
        • 네이티브 광고
        • SSP 미디에이션
        • 에러 코드 및 외부 노출 함수
        • 테스트 지면 키
        • AAR 라이브러리 목록
    • 쿠팡 연동가이드
      • 쿠팡 포스트백 연동
      • 쿠팡 EP 리스트 연동
      • 쿠팡 리포트 API 연동
        • 쿠팡 일별 리포트 API
        • 쿠팡 API - Report
        • 쿠팡 API - Product list
    • Reward Banner 스크립트 연동가이드
      • Reward Banner 스크립트 Android
      • Reward Banner 스크립트 iOS
    • 차단관리 파일 가이드
    • 커스텀 타입 연동 가이드
      • 커스텀 타입(Android)
      • 커스텀 타입(iOS)
    • 쿠팡 클릭 이벤트 페이지 연동 가이드
  • 팝콘텐츠 연동가이드
    • WebView 직접 연동
    • 리워드 콜백
  • 웹 SSP
    • 쿠키 매칭
    • Web Header Bidding(WIP)
Powered by GitBook
On this page
  • 1. Handler 생성
  • 2. webView 객체 설정
  • 3. 델리게이트 설정

Was this helpful?

  1. 하이브리드 앱 - Web(APM + NAM)

네이티브 Side 연동(iOS)

Previous네이티브 Side 연동(Android)NextWebPage Side 연동

Last updated 11 months ago

Was this helpful?

1. Handler 생성

AdPopcornSSPWKScriptMessageHandler 생성 후, apssp 이름으로 scriptMessageHandler를 등록해 줍니다.

AdPopcornSSP SDK의 경우 Objective-C로 개발된 framework이므로, swift 사용 시 를 작성한 뒤 사용하시기 바랍니다.

#import "AdPopcornSSPWKScriptMessageHandler.h"

@interface AdPopcornSSPController() <WKNavigationDelegate, WKUIDelegate>
{

}

@implementation AdPopcornSSPController

- (void)viewDidLoad {
    webViewConfiguration = [[WKWebViewConfiguration alloc] init];
    wkContentController = [[WKUserContentController alloc] init];

    AdPopcornSSPWKScriptMessageHandler *scriptMessageHandler = [[AdPopcornSSPWKScriptMessageHandler alloc] initWithDelegate:nil];    
    [wkContentController addScriptMessageHandler:scriptMessageHandler name:@"apssp"];
    [webViewConfiguration setUserContentController:wkContentController];
    
    webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:webViewConfiguration];
    scriptMessageHandler.webView = webView;

    webView.navigationDelegate = self;
    webView.uiDelegate = self;
}
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{
		
    var webView : WKWebView!
    var webViewConfiguration : WKWebViewConfiguration!
    var wkContentController : WKUserContentController!
    var adpopcornSSPWKScriptMessageHandler : AdPopcornSSPWKScriptMessageHandler!
}

override func viewDidLoad() {
    super.viewDidLoad()

    webViewConfiguration = WKWebViewConfiguration.init()
    wkContentController = WKUserContentController.init()
        
    adpopcornSSPWKScriptMessageHandler = AdPopcornSSPWKScriptMessageHandler(delegate: nil)
    wkContentController.add(adpopcornSSPWKScriptMessageHandler, name: "apssp")
    webViewConfiguration.userContentController = wkContentController
        
    webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height), configuration: webViewConfiguration)
    adpopcornSSPWKScriptMessageHandler.webView = webView
        
    webView.navigationDelegate = self
    webView.uiDelegate = self
}

2. webView 객체 설정

생성된 scriptMessageHandler에 webView 객체를 설정해 줍니다.

#import "AdPopcornSSPWKScriptMessageHandler.h"

@interface AdPopcornSSPController() <WKNavigationDelegate, WKUIDelegate>
{

}

@implementation AdPopcornSSPController

- (void)viewDidLoad {
    webViewConfiguration = [[WKWebViewConfiguration alloc] init];
    wkContentController = [[WKUserContentController alloc] init];

    AdPopcornSSPWKScriptMessageHandler *scriptMessageHandler = [[AdPopcornSSPWKScriptMessageHandler alloc] initWithDelegate:nil];    
    [wkContentController addScriptMessageHandler:scriptMessageHandler name:@"apssp"];
    [webViewConfiguration setUserContentController:wkContentController];
    
    webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:webViewConfiguration];
    scriptMessageHandler.webView = webView;

    webView.navigationDelegate = self;
    webView.uiDelegate = self;
}
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{
		
    var webView : WKWebView!
    var webViewConfiguration : WKWebViewConfiguration!
    var wkContentController : WKUserContentController!
    var adpopcornSSPWKScriptMessageHandler : AdPopcornSSPWKScriptMessageHandler!
}

override func viewDidLoad() {
    super.viewDidLoad()

    webViewConfiguration = WKWebViewConfiguration.init()
    wkContentController = WKUserContentController.init()
        
    adpopcornSSPWKScriptMessageHandler = AdPopcornSSPWKScriptMessageHandler(delegate: nil)
    wkContentController.add(adpopcornSSPWKScriptMessageHandler, name: "apssp")
    webViewConfiguration.userContentController = wkContentController
        
    webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height), configuration: webViewConfiguration)
    adpopcornSSPWKScriptMessageHandler.webView = webView
        
    webView.navigationDelegate = self
    webView.uiDelegate = self
}

3. 델리게이트 설정

#import "AdPopcornSSPWKScriptMessageHandler.h"

@interface AdPopcornSSPController() <WKNavigationDelegate>
{

}

@implementation AdPopcornSSPController

- (void)viewDidLoad {
    webViewConfiguration = [[WKWebViewConfiguration alloc] init];
    wkContentController = [[WKUserContentController alloc] init];

    AdPopcornSSPWKScriptMessageHandler *scriptMessageHandler = [[AdPopcornSSPWKScriptMessageHandler alloc] initWithDelegate:nil];    
    [wkContentController addScriptMessageHandler:scriptMessageHandler name:@"apssp"];
    [webViewConfiguration setUserContentController:wkContentController];
    
    webView = [[WKWebView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height) configuration:webViewConfiguration];
    scriptMessageHandler.webView = webView;

    webView.navigationDelegate = self;
    webView.uiDelegate = self;
}

#pragma mark - WKNavigationDelegate
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler
{
    NSString *requestString = navigationAction.request.URL.absoluteString;

    if(navigationAction.navigationType == UIWebViewNavigationTypeLinkClicked)
    {
        decisionHandler(WKNavigationActionPolicyCancel);
        NSURL *requestURL = [NSURL URLWithString:requestString];
        if(@available(iOS 10, *))
        {
            [[UIApplication sharedApplication] openURL:requestURL options:@{} completionHandler:^(BOOL success) {
            }];
        }
        return;
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}

#pragma mark WKUIDelegate
- (nullable WKWebView *)webView:(WKWebView *)webView createWebViewWithConfiguration:(WKWebViewConfiguration *)configuration forNavigationAction:(WKNavigationAction *)navigationAction windowFeatures:(WKWindowFeatures *)windowFeatures
{
    NSString *requestString = navigationAction.request.URL.absoluteString;
    NSLog(@"createWebViewWithConfiguration requestURL : %@", requestString);
    NSLog(@"navigationAction.navigationType : %ld", (long)navigationAction.navigationType);
    if(navigationAction.navigationType == WKNavigationTypeLinkActivated ||
       navigationAction.navigationType == WKNavigationTypeOther)
    {
        NSURL *requestURL = [NSURL URLWithString:requestString];
        if(@available(iOS 10, *))
        {
            [[UIApplication sharedApplication] openURL:requestURL options:@{} completionHandler:^(BOOL success) {
            }];
        }
        else
        {
            [[UIApplication sharedApplication] openURL:requestURL];
        }
    }
    return nil;
}
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{
		
    var webView : WKWebView!
    var webViewConfiguration : WKWebViewConfiguration!
    var wkContentController : WKUserContentController!
    var adpopcornSSPWKScriptMessageHandler : AdPopcornSSPWKScriptMessageHandler!
}

override func viewDidLoad() {
    super.viewDidLoad()

    webViewConfiguration = WKWebViewConfiguration.init()
    wkContentController = WKUserContentController.init()
        
    adpopcornSSPWKScriptMessageHandler = AdPopcornSSPWKScriptMessageHandler(delegate: nil)
    wkContentController.add(adpopcornSSPWKScriptMessageHandler, name: "apssp")
    webViewConfiguration.userContentController = wkContentController
        
    webView = WKWebView(frame: CGRect(x: 0, y: 0, width: self.view.frame.size.width, height: self.view.frame.size.height), configuration: webViewConfiguration)
    adpopcornSSPWKScriptMessageHandler.webView = webView
        
    webView.navigationDelegate = self
    webView.uiDelegate = self
}

//pragma mark - WKNavigationDelegate
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    var requestString = navigationAction.request.url?.absoluteString

    if(navigationAction.navigationType == WKNavigationType.linkActivated)
    {
        decisionHandler(.cancel);
        if let url = URL(string: requestString!) {
            UIApplication.shared.open(url, options:[:], completionHandler: nil)
        }
    }
    decisionHandler(.allow);
}

//pragma mark WKUIDelegate
func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
    var requestString = navigationAction.request.url?.absoluteString

    if(navigationAction.navigationType == WKNavigationType.linkActivated
       ||  navigationAction.navigationType == WKNavigationType.other)
    {
        if let url = URL(string: requestString!) {
            UIApplication.shared.open(url, options:[:], completionHandler: nil)
        }
    }
    
    return nil
}

위 3가지 연동을 hybrid webview에 설정해주면 네이티브와 통신을 위한 준비가 마무리됩니다.

이후에는를 확인해 웹 페이지 내에 배너, 네이티브 영역을 지정하여 광고를 송출할 준비를 진행합니다.

[WebPage Side 연동]
[Bridge-Header]