애드팝콘 SSP SDK 연동가이드
애드팝콘 홈페이지애드팝콘 SSP 콘솔 바로가기
  • 개요
  • Android
    • 기본 설정
    • 배너 광고
    • 전면 광고
    • 전면 비디오 광고
    • 리워드 비디오 광고
    • 비디오 믹스 광고
    • 보상형 광고 플러스 연동(v1.0)
    • 보상형 광고 플러스 연동(v1.5)
    • 네이티브 광고
      • 네이티브 광고 레이아웃 구성 가이드
        • 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 설치
      • 수동 설치
    • 배너 광고
    • 전면 광고
    • 전면 비디오 광고
    • 리워드 비디오 광고
    • 비디오 믹스 광고
    • 보상형 광고 플러스 연동(1.0)
    • 보상형 광고 플러스 연동(v1.5)
    • 네이티브 광고
      • 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)
      • 기본 설정
      • 배너 광고
      • 전면 광고
      • 리워드 비디오 광고
      • 비디오 믹스 광고
      • 네이티브 광고
      • 보상형 광고 플러스 연동(v1.0)
      • 보상형 광고 플러스 연동(v1.5)
      • 미디에이션 Unity Android
    • Unity (iOS)
      • 기본 설정
      • 배너 광고
      • 전면 광고
      • 리워드 비디오 광고
      • 비디오 믹스 광고
      • 네이티브 광고
      • 보상형 광고 플러스 연동(v1.0)
      • 보상형 광고 플러스 연동(v1.5)
      • 미디에이션 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)

1. Handler 생성

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

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

#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 연동] 를 확인해 웹 페이지 내에 배너, 네이티브 영역을 지정하여 광고를 송출할 준비를 진행합니다.

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

Last updated 1 year ago

Was this helpful?