알립니다
하이브리드 앱에서 웹 사이트 코드를 변경하지 않아도 인앱 웹 사이트에서 발생하는 에어브릿지 관련 작업을 iOS SDK가 처리하도록 설정할 수 있습니다.
iOS SDK는 웹 SDK에서 진행되는 이벤트 전송, 디바이스 설정, 유저 설정에 관한 명령을 대신 처리할 수 있습니다. 웹뷰에 웹 사이트를 표시하기 전에 Airbridge.setWebInterface
함수를 설정해 주세요.
YOUR_WEB_SDK_TOKEN
은 웹 SDK 토큰입니다. 웹 SDK 토큰은 에어브릿지 대시보드의 [설정]>[토큰 관리]에서 확인할 수 있습니다.
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")!))
}
}
#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
Airbridge.click 함수를 추가하여 웹뷰에서 딥링크를 정상적으로 실행할 수 있습니다. 웹뷰는 기본적으로 딥링크를 지원하지 않습니다. 따라서 Airbridge.click 함수로 SDK가 대신 트래킹 링크의 딥링크를 실행하도록 설정해야 합니다.
Airbridge.click
함수는 입력된 주소가 트래킹 링크면 true를 반환합니다. 그리고 주소로 앱을 실행하면 onSuccess
함수를 호출합니다. 인터넷이 없거나 다른 앱이 실행되면 onFailure
함수가 호출됩니다.
Airbridge.click
함수는 입력된 주소가 트래킹 링크가 아니면 false를 반환하고 어떠한 동작을 하지 않습니다.
WKWebView
에서 webView(_,decidePolicyFor:,decisionHandler:)
를 구현하면 특정 URL이 로딩되는 것을 확인한 후에 계속 로딩할지 또는 로딩하지 않을지 결정할 수 있습니다.
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)
}
- (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);
}
아래 사항을 주의해 주세요.
하이브리드 앱 설정을 하면 웹 SDK만으로 인앱 웹뷰에서 발생하는 이벤트를 수집해야 합니다. 앱 SDK로 이벤트를 추가로 수집하면 해당 이벤트가 중복해서 집계됩니다.
인앱 웹뷰에 실제 모바일 웹사이트를 사용하면 웹 SDK만으로 이벤트를 수집해 주세요.
도움이 되었나요?