> ## Documentation Index
> Fetch the complete documentation index at: https://docs.adrop.io/llms.txt
> Use this file to discover all available pages before exploring further.

# WebView 가이드

> iOS WKWebView에서 백필 광고를 표시하는 방법

## 개요

WKWebView를 Adrop SDK에 등록하여 앱 내 웹 콘텐츠에서 백필 광고를 표시할 수 있습니다.

***

## Info.plist 설정

WebView에서 백필 광고를 활성화하려면 `Info.plist`에 다음 키를 추가하세요:

```xml Info.plist theme={null}
<key>GADIntegrationManager</key>
<string>webview</string>
```

<Warning>
  이 설정은 WebView에서 백필 광고가 정상적으로 작동하는 데 필요합니다. 이 설정이 없으면 백필 광고가 표시되지 않을 수 있습니다.
</Warning>

***

## WebView 등록

<CodeGroup>
  ```swift Swift theme={null}
  import WebKit
  import AdropAds

  class WebViewController: UIViewController {

      @IBOutlet weak var webView: WKWebView!

      override func viewDidLoad() {
          super.viewDidLoad()

          // WKWebViewConfiguration 객체 초기화
          let webViewConfiguration = WKWebViewConfiguration()
          // "playsinline" 속성이 있는 HTML 비디오를 인라인으로 재생
          webViewConfiguration.allowsInlineMediaPlayback = true
          // "autoplay" 속성이 있는 HTML 비디오를 자동으로 재생
          webViewConfiguration.mediaTypesRequiringUserActionForPlayback = []

          // WKWebViewConfiguration 객체로 WKWebView 초기화
          webView = WKWebView(frame: view.frame, configuration: webViewConfiguration)
          // 백필 광고 지원을 위해 WebView 등록
          // 콘텐츠 로드 전에 가능한 빨리 호출
          Adrop.registerWebView(webView)

          // 웹 콘텐츠 로드
          if let url = URL(string: "https://your-website.com") {
              webView.load(URLRequest(url: url))
          }
      }
  }
  ```

  ```objc Objective-C theme={null}
  @import WebKit;
  @import AdropAds;

  @interface WebViewController ()
  @property (nonatomic, weak) IBOutlet WKWebView *webView;
  @end

  @implementation WebViewController

  - (void)viewDidLoad {
      [super viewDidLoad];

      // WKWebViewConfiguration 객체 초기화
      WKWebViewConfiguration *webViewConfiguration = [[WKWebViewConfiguration alloc] init];
      // "playsinline" 속성이 있는 HTML 비디오를 인라인으로 재생
      webViewConfiguration.allowsInlineMediaPlayback = YES;
      // "autoplay" 속성이 있는 HTML 비디오를 자동으로 재생
      webViewConfiguration.mediaTypesRequiringUserActionForPlayback = WKAudiovisualMediaTypeNone;

      // WKWebViewConfiguration 객체로 WKWebView 초기화
      self.webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:webViewConfiguration];
      [self.view addSubview:self.webView];

      // 백필 광고 지원을 위해 WebView 등록
      // 콘텐츠 로드 전에 가능한 빨리 호출
      [Adrop registerWebView:self.webView];

      // 웹 콘텐츠 로드
      NSURL *url = [NSURL URLWithString:@"https://your-website.com"];
      [self.webView loadRequest:[NSURLRequest requestWithURL:url]];
  }

  @end
  ```
</CodeGroup>

<Note>
  `registerWebView()`는 메인 스레드에서 호출해야 합니다.
  웹 콘텐츠를 로드하기 전에 가능한 빨리 호출하세요 (예: `viewDidLoad`).
</Note>

<Warning>
  WebView에서 백필 광고를 사용하려면 `adrop-ads-backfill` 모듈이 필요합니다. 모듈이 설치되지 않은 경우 `registerWebView()`는 조용히 무시됩니다.
</Warning>

***

## 외부 URL 처리

앱에서 자사 도메인이 아닌 URL을 외부 브라우저로 여는 로직이 있는 경우, 광고 리소스 요청(예: `googleads.g.doubleclick.net`)이 차단되지 않도록 해야 합니다.

광고 리소스(iframe, 스크립트 등)는 광고 SDK가 자동으로 로드하며, 사용자가 직접 클릭한 것이 아닙니다. **사용자가 직접 클릭한 메인 프레임 이동**에 한해서만 외부 브라우저로 전환하세요.

<CodeGroup>
  ```swift Swift theme={null}
  import UIKit
  import WebKit

  let allowedHost = "my-domain.com"

  func webView(_ webView: WKWebView,
               decidePolicyFor navigationAction: WKNavigationAction,
               decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {

      guard let url = navigationAction.request.url else {
          decisionHandler(.cancel)
          return
      }

      let host = url.host ?? ""

      // 사용자가 직접 클릭한 경우에만 외부 브라우저로 이동
      // 광고 리소스(예: googleads.g.doubleclick.net)는 iframe/스크립트로 로드되므로 차단하지 않음
      if !host.contains(allowedHost),
         navigationAction.navigationType == .linkActivated {
          UIApplication.shared.open(url, options: [:], completionHandler: nil)
          decisionHandler(.cancel)
          return
      }

      decisionHandler(.allow)
  }
  ```

  ```objc Objective-C theme={null}
  NSString *allowedHost = @"my-domain.com";

  - (void)webView:(WKWebView *)webView
      decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction
      decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {

      NSURL *url = navigationAction.request.URL;
      if (!url) {
          decisionHandler(WKNavigationActionPolicyCancel);
          return;
      }

      NSString *host = url.host ?: @"";

      // 사용자가 직접 클릭한 경우에만 외부 브라우저로 이동
      // 광고 리소스(예: googleads.g.doubleclick.net)는 iframe/스크립트로 로드되므로 차단하지 않음
      if (![host containsString:allowedHost] &&
          navigationAction.navigationType == WKNavigationTypeLinkActivated) {
          [[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
          decisionHandler(WKNavigationActionPolicyCancel);
          return;
      }

      decisionHandler(WKNavigationActionPolicyAllow);
  }
  ```
</CodeGroup>

<Warning>
  자사 도메인이 아닌 모든 요청을 차단하거나 리다이렉트하지 마세요. `googleads.g.doubleclick.net` 같은 광고 리소스는 백필 광고 과정에서 자동으로 로드되며, WebView 내에서 정상적으로 로드되어야 합니다.
</Warning>

***

## 관련 문서

<CardGroup cols={2}>
  <Card title="배너 광고" icon="rectangle-ad" href="/ko/sdk/ios/banner">
    배너 광고 연동 방법 알아보기
  </Card>

  <Card title="레퍼런스" icon="book" href="/ko/sdk/ios/reference">
    API 레퍼런스
  </Card>

  <Card title="예제" icon="code" href="/ko/sdk/ios/examples">
    예제 레포지토리
  </Card>
</CardGroup>
