Hybrid 앱의 경우 앱 내에서 WebView 를 사용하여 웹 컨텐츠를 서비스 하기도 합니다. 이와 같이 Webview 에 의해서 보여지는 웹 컨텐츠의 경우에는 위에서 설명된 Native 화면과는 다른 방식으로 동작하기 때문에, 별도의 분석 코드 적용이 필요합니다. 분석 대상 앱이 만약 Hybrid 앱인 경우에는 아래의 코드를 참고하여 웹 컨텐츠도 분석할 수 있도록 적용을 해야합니다.
앱내에서 사용할 WKWebView의 Delegate 함수에 아래와 같이 분석코드를 적용합니다.
continueUserActivity 부분에 아래와 같이 적용이 되면 유니버셜 링크를 통한 광고분석이 가능합니다.
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
// 아래의 코드를 적용해주세요iflet uniLink = userActivity.webpageURL?.absoluteString { DOT.setDeepLink(uniLink)let landingUri :String= DOT.parseAttributionLink(toGetDeeplinkUrl: uniLink)// 리턴받은 landingUri값(DeepLink Sheme)으로 화면 진입 로직 구현(기존 open url에서 사용하던 화면 이동 로직과 동일하게 구현하면 됨) }//returnfalse; }
딥링크 설정
딥링크가 설정된 url 을 통해서 오픈된 이벤트를 분석합니다. 분석을 하기 위해서는 앱에 custom url scheme 설정해야 합니다.
✔️와이즈트래커 대시보드에서 생성한 어트리뷰션링크를 통해 테스트 및 광고집행을 진행하며, 딥링크 클릭 시 와이즈트래커 서버가 앱의 설치 여부를 판단하여 동작합니다. 다음과 같은 형태의 "https://xxxx.page.link" 링크를 클릭하게 되면 해당 URL이 가르키는 웹으로 이동함으로써 와이즈트래커가 수집하여야 하는 광고파라미터값이 유실될 수 있어, 앱으로 바로 이동 가능한 다음과 같은 형태의 Unique 한 커스텀스키마가 필요합니다.
이미 만들어진 유니버셜링크가 존재 한다면 와이즈트래커에서 사용할 딥링크 진입 스키마 설정을 '추가' 해 주세요. (딥링크스키마 설정 추가시 다른 링크에 어떠한 영향도 주지 않습니다.)
위와 같이 설정을 마치시게 되시면 예를들어 다음과 같 형태의 커스텀 스키마가 생성됩니다.
wisetracker://wisetracker.co.kr
여기서 wisetracker:// 부분이Scheme(혹은 프로토콜) 입니다. 개발자가 앱에 이 Scheme를 쓸 것이라고 결정하는 것이며, 해당 Scheme만 설정을 하셔도 됩니다.
이어서 wisetracker.co.kr 부분은 특정 페이지에 도달하도록 만들기 위한 host(혹은 path or 도메인) 입니다.
그리고 wisetracker://wisetracker.co.kr?product=1 이러한 형태로 만드는 경우는 특정 페이지로 이동하기 위한 parameter 값을 지정하는 것이며 해당 부분은 와이즈트래커의 SDK가 아닌 고객사측에서 직접 설정해주셔야 하는 값이며, 특정 페이지로 이동할 필요가 없다면 parameter 값은 꼭 설정하지 않아도 됩니다.
딥링크 분석
앱이 설치된 이후 DeepLink를 통해서 앱이 실행되는 경로 분석이 필요한 경우 아래와 같이 setDeepLink 함수를 사용하면 분석이 가능합니다.
와이즈트래커 SDK를 적용하고, 광고 분석을 하고자 하는 경우, 와이즈트래커 시스템에서 발급된 광고 분석 링크에 의해서 앱을 실행하는 딥링크 URL에 다음과 같이 광고 분석 목적의 파라미터가 추가될 수 있습니다.
특히 웹앱의 경우 url 이라는 파라미터를 사용하여 웹뷰에 로딩되어질 웹페이지 url을 전달하는 경우가 많은데, 이와 관련하여 아래의 케이스에도 문제가 없는지 반드시 확인하시기 바랍니다.
// 기존의 deeplink 에 광고 분석 파라미터가 추가된 예시를 보여주고 있습니다.
YOUR_SCHEMA://YOUR_HOST?url={YOUR_WEB_PAGE_URL}&trackId=M00200881641977334670
&w_start=h&_wtno=102&_wts=P1641977288745
... 중간 생략 ...
&w_end=h
Deffered Deep Link (지연된 딥링크) 적용
지연된 딥링크 기능은 Growth 레벨 이상의 사용자에게 제공됩니다.
지연된 딥링크 기능 제공 SDK 버전
- Android SDK: Base Modeul - 1.0.81 이상 / New Dot Module - 1.0.51 이상
- iOS SDK: RW 1.1.52 이상
아래와 같이 지연된 딥링크 기능을 위한 메소드를 호출하여 사용할 수 있습니다.
// your code...[DOT initializationForDeferredCallback:launchOptions application:application callback:^{// deferred deeplink 정보는 [DOT getDeferredUrl]로 사용이 가능하며,// 앱에서는 해당 변수를 다음과 같이 사용할 수 있음. // 1. callback 이 호출되는 시점에 즉시 __deferredUrl 화면으로 이동 처리. __deferredUrl 값이 nil 이면 메인 화면으로 이동 처리. // 2. __deferredUrl 변수값을 어딘가에 저장하고, 회원가입 이후, 로그인이 완료된 이후등과 같이 필요한 시점에 저장된 값을 꺼내서 이동 처리. // 3. 사용 가능한 Deferred deeplink 정보가 없는 경우에는, __deferredUrl 값이 널(NULL) 이 될 수 있음을 고려하여 사용. NSString* __deferredUrl = [DOT getDeferredUrl];NSLog(@"Deferred callback executed %@", __deferredUrl);}];// your code...
위와 같이 지연된 딥링크에 대한 대응 코드가 적용된 이후에 와이즈트래커 대쉬보드에서 아래와 같이 어트리뷰션 링크를 생성하였다고 가정해보겠습니다.
지연된 딥링크(디퍼드 딥링크)가 사용된 어트리뷰션 링크이기 때문에 만약 앱이 설치되어 있지 않았던 경우라면, 먼저 앱 설치를 위해 마켓(구글스토어, 앱스토어)으로 이동되고, 앱 설치 이후에 앱을 실행시키게 되면 NSString* __deferredUrl 변수에 설정한 앱 실행 링크가 들어가 있음을 확인할 수 있습니다. (예: wisetester://mainscreen)
따라서 들어가 있는 (디퍼드) 딥링크 값에 따라 어떻게 처리할지 이후 액션에 대해 대응되는 코드를 개발해 주시면 됩니다.
Facebook 광고 성과 측정
Facebook 앱에서 유입되는 설치수를 분석하기 위해서는 Facebook에서 제공하는 SDK가 분석 대상 앱에 설치가 선행되어야 합니다.
비즈니스 인증
Facebook Developer사이트의 앱설정-기본설정에서 비즈니스 인증 여부를 확인 해 주세요. 비즈니스 인증이 완료되지 않았을 경우, 리퍼러 정보가 수신되지 않아, facebook 광고 성과에 대한 측정이 어렵습니다.
FBSDK 다운로드 방법
1) XCode 프로젝트 파일중 Podfile 파일에 다음과 같이 SDK를 추가합니다
pod ‘FBSDKCoreKit’, ‘11.2.1’
2) Podfile 에 dependency 를 추가한 뒤에는 Terminal 프로그램을 실행하여 다음의 명령을 수행합니다
cmd> pod install
FBSDK 설치 방법
1) info.plist 파일을 source로 보기 로 오픈합니다
2) 이름 속성 아래에 포함된 내용중 [APP_ID] , [APP_NAME] , [CLIENT_TOKEN] 부분을 Facebook Developer Site 에서 제공하는 값으로 치환후 info.plist 파일에 저장합니다
이 과정에서 Facebook 지연된 앱 링크가 작동하려면 Facebook 앱과 앱 모두 ATT(앱 추적 투명성) 권한이 부여되어야 합니다. FACEBOOK 앱과 귀하의 앱 모두에서 ATT를 활성화한 후 referrer 수신 여부를 체크 해 주세요.
사용자가 Facebook에 노출된 광고를 클릭하고 앱을 설치한 경우 설치된 앱에서는 FBSDK를 통해서 AppLinkData를 수신받을 수 있습니다.
아래의 코드에서 FBSDK로부터 AppLinkData를 수신 받고, 수신 받은 AppLinkData 를 SDK로 전달하는 방법을 확인할 수 있습니다. 이 함수는 appDelegate의 didFinishLaunchingWithOptions 함수에 적용하세요. SDK 초기화 이 후에 DOT.setFacebookreferrerData() 호출을 통해 SDK에 리퍼러 url 이 전달될 수 있도록 합니다.
아래는 Facebook 으로부터 Install Referrer를 수신받기 위해, ATT 동의 확인 > 동의 여부에 따라 SDK에 Facebook 리퍼러 데이터를 전달 하는 예제 코드 입니다.
importAppTrackingTransparencyimportAdSupportimportFBSDKCoreKitimportDOTfuncrequestTrackingPermission() {// iOS 14 이상인지 체크if#available(iOS14, *) { ATTrackingManager.requestTrackingAuthorization { (AuthorizationStatus) inswitch AuthorizationStatus {// ATT 동의case .authorized: Settings.setAdvertiserTrackingEnabled(true) DispatchQueue.main.async(execute: { [] in AppLinkUtility.fetchDeferredAppLink({ url, error inif error !=nil {iflet anError = error { print("😀 Received error while fetching deferred app link: \(anError)") } }iflet unwrappedUrl = url {// Facebook Deferred link 수신 & SDK 전달. print("😀 fetchDeferredAppLink: \(url.absoluteString)") DOT.setFacebookreferrerData(url) } }) })// SDK에 IDFA 설정 DOT.setIDFA(ASIdentifierManager.shared().advertisingIdentifier.uuidString)// ATT 거부 및 기타@unknowndefault: DOT.denyATT(); } } }// iOS 14 이하else { DOT.setATTAuthorizationStatus(3) AppLinkUtility.fetchDeferredAppLink({ url, error inif error !=nil {iflet anError = error { print("😀 Received error while fetching deferred app link: \(anError)") } }iflet unwrappedUrl = url {// Facebook Deferred link 수신 & SDK 전달. DOT.setFacebookreferrerData(unwrappedUrl) } }); }}
#import "AppDelegate.h"
#import <DOT/DOT.h>
#import <AppTrackingTransparency/ATTrackingManager.h>
#import <AdSupport/AdSupport.h>
#import <FBSDKCoreKit/FBSDKCoreKit.h>
- (void)requestTrackingPermission {
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus authorizationStatus) {
switch (authorizationStatus) {
case ATTrackingManagerAuthorizationStatusAuthorized:
[FBSDKSettings setAdvertiserTrackingEnabled:YES];
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"FBSDKAppLinkUtility fetchDeferredAppLink started.");
[FBSDKAppLinkUtility fetchDeferredAppLink:^(NSURL *_Nullable url, NSError *_Nullable error) {
if (error) {
NSLog(@"😀 Received error while fetching deferred app link : %@", error);
}
if (url) {
NSLog(@"😀 fetchDeferredAppLink : %@", [url absoluteString]);
[DOT setFacebookreferrerData:url];
}
else{
NSLog(@"😀 fetchDeferredAppLink is nil");
}
NSLog(@"FBSDKAppLinkUtility fetchDeferredAppLink finished.");
}];
});
[DOT setIDFA:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]];
break;
default:
[DOT denyATT];
break;
}
}];
} else {
// 14 이하 IDFA 처리
[DOT setATTAuthorizationStatus:3];
// 14.0 미만인 경우...
dispatch_async(dispatch_get_main_queue(), ^{
[FBSDKAppLinkUtility fetchDeferredAppLink:^(NSURL *_Nullable url, NSError *_Nullable error) {
if (error) {
NSLog(@"😀 Received error while fetching deferred app link: %@", error);
}
if (url) {
[DOT setFacebookreferrerData:url];
}
}];
});
}
}
Facebook SDK와 관련하여 보다 자세한 설치 방법은 아래의 링크에서 확인이 가능합니다.
iOS의 경우 Facebook Developer - 앱 광고 지원 도구를 통해 '앱 설치형 광고테스트' 시 iOS 보내기 버튼을 클릭하여도 지연된 딥링크가 아닌 일반적 딥링크로 동작하게 됩니다.
iOS테스트이지만 "Android에 보내기" 버튼을 클릭하여 아래와 같은 지연된 딥링크 처리 팝업이 발생되는지 확인 후 테스트를 진행 해 주세요.
4. iOS 14 개인정보방침 변경 관련 가이드
iOS 14부터 IDFA를 획득하기 위해서는 사용자의 동의를 얻어야 합니다.
3.1 info.plist파일에 NSUserTrackingUsageDescription 설정 추가
<key>NSUserTrackingUsageDescription</key>
<string>Your data will be used to deliver personalized ads to you.</string>
3.2 App Tracking Transparency 동의 System Alert 노출 & API 호출
IDFA 획득을 위해 앱 추적 투명성 동의 요청 System Alert(대화 상자)을 띄워야 합니다. 동의 요청 System Alert(대화 상자) 화면에 띄우려면 requestTrackingAuthorizationWithCompletionHandler:를 호출합니다. completionHandler에서 동의 시 SDK API를 호출하도록 위와 같이 구현하시면 됩니다.