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

# 하이브리드 앱 설정하기 - iOS SDK

<div id="알립니다" />

<Info>
  **알립니다**

  하이브리드 앱 설정을 하기 전에 앱과 웹사이트에 각각 [iOS SDK](/ko/developers/ios-sdk-v4)와 [웹 SDK](/ko/developers/web-sdk)를 설치해 주세요.
</Info>

하이브리드 앱에서 웹 사이트 코드를 변경하지 않아도 인앱 웹 사이트에서 발생하는 에어브릿지 관련 작업을 iOS SDK가 처리하도록 설정할 수 있습니다.

<h2 id="ios-sdk가-웹-sdk-동작-처리하기">
  iOS SDK가 웹 SDK 동작 처리하기
</h2>

iOS SDK는 웹 SDK에서 진행되는 이벤트 전송, 디바이스 설정, 유저 설정에 관한 명령을 대신 처리할 수 있습니다. 웹뷰에 웹 사이트를 표시하기 전에 `Airbridge.setWebInterface` 함수를 설정해 주세요.

`YOUR_WEB_SDK_TOKEN`은 [웹 SDK 토큰](/ko/guides/tokens#웹-sdk-토큰)입니다. 웹 SDK 토큰은 에어브릿지 대시보드의 \[설정]>\[토큰 관리]에서 확인할 수 있습니다.

<CodeGroup>
  ```swift Swift lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  import UIKit
  import WebKit
  import Airbridge

  class ViewController: UIViewController, WKNavigationDelegate {
      let webView = {
          let configuration = WKWebViewConfiguration()
          let controller = WKUserContentController()
          Airbridge.setWebInterface(
              controller: controller,
              webToken: "YOUR_WEB_SDK_TOKEN"
          )
          
          configuration.userContentController = controller
          
          return WKWebView(frame: .null, configuration: configuration)
      }()

      override func viewDidLoad() {
          super.viewDidLoad()

          webView.navigationDelegate = self
          self.view = webView

          webView.load(URLRequest(url: URL(string: "YOUR_WEBSITE_URL")!))
      }
  }
  ```

  ```objective-c Objective-C lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  #import <UIKit/UIKit.h>

  @interface ViewController : UIViewController

  @end
  ...
  #import "ViewController.h"

  #import <WebKit/WebKit.h>
  #import <Airbridge/Airbridge.h>

  @interface ViewController () <WKNavigationDelegate>

  @end

  @implementation ViewController {
      WKWebView* webView;
  }

  - (instancetype)init
  {
      self = [super init];
      if (self) {
          WKWebViewConfiguration* configuration = [[WKWebViewConfiguration alloc] init];
          WKUserContentController* controller = [[WKUserContentController alloc] init];
          [Airbridge setWebInterfaceWithController:controller webToken:@"YOUR_WEB_SDK_TOKEN"];

          configuration.userContentController = controller;
          
          webView = [[WKWebView alloc] initWithFrame:CGRectNull configuration:configuration];
      }
      return self;
  }

  - (void)viewDidLoad {
      [super viewDidLoad];
      
      webView.navigationDelegate = self;
      self.view = webView;
      
      [webView loadRequest:[[NSURLRequest alloc] initWithURL:[NSURL URLWithString:@"YOUR_WEBSITE_URL"]]];
  }

  @end
  ```
</CodeGroup>

<h2 id="웹뷰에서-딥링크-동작하기">
  웹뷰에서 딥링크 동작하기
</h2>

[Airbridge.click 함수](/ko/developers/ios-sdk-v4#인앱에서-트래킹-링크를-클릭)를 추가하여 웹뷰에서 딥링크를 정상적으로 실행할 수 있습니다. 웹뷰는 기본적으로 딥링크를 지원하지 않습니다. 따라서 Airbridge.click 함수로 SDK가 대신 트래킹 링크의 딥링크를 실행하도록 설정해야 합니다.

`Airbridge.click` 함수는 입력된 주소가 트래킹 링크면 true를 반환합니다. 그리고 주소로 앱을 실행하면 `onSuccess` 함수를 호출합니다. 인터넷이 없거나 다른 앱이 실행되면 `onFailure` 함수가 호출됩니다.

`Airbridge.click` 함수는 입력된 주소가 트래킹 링크가 아니면 false를 반환하고 어떠한 동작을 하지 않습니다.

`WKWebView`에서 `webView(_,decidePolicyFor:,decisionHandler:)`를 구현하면 특정 URL이 로딩되는 것을 확인한 후에 계속 로딩할지 또는 로딩하지 않을지 결정할 수 있습니다.

<CodeGroup>
  ```swift Swift lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  func webView(
      _ webView: WKWebView,
      decidePolicyFor navigationAction: WKNavigationAction,
      decisionHandler: @escaping (WKNavigationActionPolicy
  ) -> Void) {
      if let url = navigationAction.request.url {
          let isHandled = Airbridge.click(trackingLink: url) {
              // when url is tracking link and succeed
              // do nothing
          } onFailure: { error in
              // when url is tracking link and failed
              // example: url is another app's tracking link, internet is not connected
              webView.load(URLRequest(url: url))
          }
          if isHandled {
              // when url is tracking link
              decisionHandler(.cancel)
              return
          }
      }
      
      // when url is not tracking link
      decisionHandler(.allow)
  }
  ```

  ```objective-c Objective-C lines theme={"theme":{"light":"github-dark-dimmed","dark":"github-dark-dimmed"}}
  - (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
      NSURL* url = navigationAction.request.URL;
      if (url != nil) {
          BOOL isHandled = [Airbridge clickWithTrackingLink:url onSuccess:^{
              // when url is tracking link and succeed
              // do nothing
          } onFailure:^(NSError* error) {
              // when url is tracking link and failed
              // example: url is another app's tracking link, internet is not connected
              [webView loadRequest:[[NSURLRequest alloc] initWithURL:url]];
          }];
          if (isHandled) {
              // when url is tracking link
              decisionHandler(WKNavigationActionPolicyCancel);
              return;
          }
      }
      
      // when url is not tracking link
      decisionHandler(WKNavigationActionPolicyAllow);
  }
  ```
</CodeGroup>

<h2 id="주의사항">
  주의사항
</h2>

아래 사항을 주의해 주세요.

<Accordion title="인앱 웹뷰의 이벤트 수집">
  하이브리드 앱 설정을 하면 웹 SDK만으로 인앱 웹뷰에서 발생하는 이벤트를 수집해야 합니다. 앱 SDK로 이벤트를 추가로 수집하면 해당 이벤트가 중복해서 집계됩니다.

  인앱 웹뷰에 실제 모바일 웹사이트를 사용하면 웹 SDK만으로 이벤트를 수집해 주세요.
</Accordion>

<link rel="alternate" hrefLang="en" href="https://help.airbridge.io/en/developers/hybrid-app-settings-ios-sdk-v4" />

<link rel="alternate" hrefLang="ko" href="https://help.airbridge.io/ko/developers/hybrid-app-settings-ios-sdk-v4" />
