SDK 삽입
XCode 프로ì 트 파ì¼ì¤‘ Podfile 파ì¼ì— 다ìŒê³¼ ê°™ì´ SDK를 추가합니다
pod 'RW'
ê¸°ì¡´ì— SDK를 한번 설치한 경우ì—는 ì„¤ì¹˜í• SDK ë²„ì „ì„ í‘œì‹œí•´ì•¼ 하는 ê²½ìš°ë„ ìžˆìŠµë‹ˆë‹¤. 아래와 ê°™ì´ ì„¤ì¹˜í• SDKë²„ì „ì„ ëª…ì‹œì 으로 표시하면 ë©ë‹ˆë‹¤.
pod 'RW', '~> 1.1.38'
Podfile ì— í•´ë‹¹ë¼ì¸ì„ 추가한 후 Terminal í”„ë¡œê·¸ëž¨ì„ ì‹¤í–‰í•˜ì—¬ 다ìŒì˜ ëª…ë ¹ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤
pod install
SDK ë²„ì „ ì—…ë°ì´íŠ¸ì˜ ê²½ìš° 다ìŒì˜ ëª…ë ¹ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤.
pod update
ì •ìƒì 으로 설치가 ë˜ë©´ 아래와 ê°™ì€ í´ë” 구조를 확ì¸í• 수 있습니다.

ë‹¤ìš´ëœ íŒŒì¼ì„ ì••ì¶• í•´ì œí•˜ë©´ 다ìŒê³¼ ê°™ì€ íŒŒì¼ì´ í™•ì¸ ê°€ëŠ¥í•˜ê³ ì´ì¤‘ ì•„ëž˜ì— ì„ íƒëœ 3ê°œì˜ íŒŒì¼ì„ ë¶„ì„ ëŒ€ìƒ ì•± 프로ì íŠ¸ì— ì¶” 가합니다.

프로ì 트 ì„ íƒí›„ 마우스 ìš°í´ë¦, Add Files to 메뉴를 ì„ íƒí•©ë‹ˆë‹¤.
​
​

앞ì—서 다운로드 ë°›ê³ , ì••ì¶• í•´ì œí•œ í´ë”ì— ë“¤ì–´ê°€ì„œ 아래와 ê°™ì´ ì¶”ê°€ ëŒ€ìƒ íŒŒì¼ì„ ì„ íƒí•˜ê³ , 화면 아래쪽 ì„¤ì •ì€ ì¡´ìž¬í•˜ëŠ” ëª¨ë“ targetì— í¬í•¨ë˜ì—ˆëŠ”ì§€ 확ì¸í›„ 추가 하면 ë©ë‹ˆë‹¤.

BuildSetting ì— ì•„ëž˜ì™€ ê°™ì´ ì„¤ì •ì„ ì¶”ê°€í•©ë‹ˆë‹¤.

xcode ê°€ 12.3 ì´í›„ ë²„ì „ì´ê³ 빌드 ê³¼ì •ì—서 아래와 ìœ ì‚¬í•œ 오류가 ë°œìƒí•˜ëŠ” 경우가 있으며,

ìœ„ì˜ ê²½ìš°ì—는 아래와 ê°™ì´ ì„¤ì •ì„ í•˜ê³ , 빌드를 하면ë©ë‹ˆë‹¤.

마지막으로, SDK ê°€ Dependencies 로 사용하는 Couchbase-Lite framework 를 ì•„ëž˜ì˜ ì£¼ì†Œì—서 다운로드 합니다. ê·¸ë¦¬ê³ ìœ„ì™€ ë™ì¼í•œ 방법으로 ëŒ€ìƒ í”„ë¡œì íŠ¸ì— ì¶”ê°€í•˜ì—¬ ì¤ë‹ˆë‹¤.
ì•„ëž˜ì˜ íŒŒì¼ì€ 다운로드 편ì˜ë¥¼ 위해서 zip 파ì¼ë¡œ 압축하였습니다. 다운로드 ë°›ì€ íŒŒì¼ì„ ì••ì¶• í•´ì œí•˜ì‹œê³ , CouchbaseLite.xcframework í´ë”를 프로ì íŠ¸ì— framework 로 추가합니다.
https://wisetracker-public.s3.ap-northeast-2.amazonaws.com/CouchbaseLite.xcframework.zip​
info.plist 파ì¼ì„ Open As Source Code ë°©ì‹ìœ¼ë¡œ 오픈한 후, 아래 코드를 추가합니다.
XML
<key>dotAuthorizationKey</key>
<dict>
<key>serviceNumber</key>
<string>xxxxx</string>
<key>expireDate</key>
<string>14</string>
<key>isDebug</key>
<string>true</string>
<key>isInstallRetention</key>
<string>true</string>
<key>isFingerPrint</key>
<string>true</string>
<key>accessToken</key>
<string></string>
<key>useMode</key>
<string>2</string>
</dict>
추가한 코드 중
serviceNumber
ì˜ value를 올바른 값으로 변경해야 합니다. 와ì´ì¦ˆíŠ¸ëž˜ì»¤ì— ë¡œê·¸ì¸í•˜ì—¬ 화면 ìƒë‹¨ì˜ Service ë¶€ë¶„ì„ ì„ íƒí•˜ë©´ 앱 ì´ë¦„ê³¼ 함께 올바른 Service Number ê°€ 나타납니다. Service No. ì˜†ì˜ ìˆ«ìžë¥¼ 복사하여 serviceNumber
ì˜ value로 ìž…ë ¥í•´ì£¼ì„¸ìš”.
httpí†µì‹ ì„ í—ˆìš©í•˜ê¸° 위해 NSAppTransportSecurity 를 아래와 ê°™ì´ ì¶”ê°€í•©ë‹ˆë‹¤.
ì´ì „ê³¼ 마찬가지로 info.plist 파ì¼ì„ Open As Source Code ë°©ì‹ìœ¼ë¡œ 오픈한 후, 아래 코드를 추가합니다.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
- 초기화 ë°©ë²•ì€ SceneDelegate ê°€ ì„¤ì •ëœ ê²½ìš°ì™€ ì„¤ì •ë˜ì§€ ì•Šì€ ê²½ìš°ì— ë”°ë¼ ë‹¬ë¼ì§‘니다.
- SceneDelegate를 사용하지 않으면 AppDelegateì—서 ì´ˆê¸°í™”ìž‘ì—…ì„ í•˜ê³ , ê·¸ë ‡ì§€ ì•Šê³ SceneDelegate를 사용하면 SceneDelegateì—서 ì´ ìž‘ì—…ì„ í•´ì•¼ 합니다.
AppDelegateì˜
didFinishLaunchingWithOptions
í•¨ìˆ˜ì— SDK를 Initialization하기 위한 코드를 다ìŒê³¼ ê°™ì´ ì 용합니다. SDKê°€ ì •ìƒì 으로 초기화 ë˜ì—ˆì„ 때 아래와 ê°™ì€ ê¸°ë³¸ ë¶„ì„ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.- 앱 실행 ë° ë°©ë¬¸ìˆ˜, ì¼/주/월순수방문수 등 방문과 ê´€ë ¨ëœ ì§€í‘œ
- í†µì‹ ì‚¬, 단ë§ê¸°, êµê°€ 등 방문ìžì˜ 단ë§ê¸° 환경으로 부터 추출ë 수 있는 지표
Swift
Objective-C
import DOT
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// S: Wisetracker SDK init
DOT.initialization(launchOptions, application: application)
#if DEBUG
DOT.checkDebugMode(true)
#else
DOT.checkDebugMode(false)
#endif
// E: Wisetracker SDK init
}
#import <DOT/DOT.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// S: Wisetracker SDK init
[DOT initialization:launchOptions application:application];
#ifdef DEBUG
[DOT checkDebugMode:true]
#else
[DOT checkDebugMode:false]
#endif
// E: Wisetracker SDK init
}
DOTê°€ 사용ë˜ëŠ” ê³³ì—서는
import DOT
ì„ í†µí•´ importê°€ 필요합니다. ì´í•˜ ì ìš© 예시ì—서는 import하는 ë¶€ë¶„ì´ ìƒëžµë˜ì–´ 있습니다.SceneDelegate
ì˜ sceneDidBecomeActive
í•¨ìˆ˜ì— SDK를 Initialization하기 위한 코드를 다ìŒê³¼ ê°™ì´ ì 용합니다. SDKê°€ ì •ìƒì 으로 초기화 ë˜ì—ˆì„ 때 아래와 ê°™ì€ ê¸°ë³¸ ë¶„ì„ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.- 앱 실행 ë° ë°©ë¬¸ìˆ˜, ì¼/주/월순수방문수 등 방문과 ê´€ë ¨ëœ ì§€í‘œ
- í†µì‹ ì‚¬, 단ë§ê¸°, êµê°€ 등 방문ìžì˜ 단ë§ê¸° 환경으로 부터 추출ë 수 있는 지표
Swift
Objective-C
import DOT
​
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
...
func sceneDidBecomeActive(_ scene: UIScene) {
// S: Wisetracker SDK init
DOT.initialization(nil, application: UIApplication.shared)
#if DEBUG
DOT.checkDebugMode(true)
#else
DOT.checkDebugMode(false)
#endif
// E: Wisetracker SDK init
}
...
}
#import <DOT/DOT.h>
​
@implementation SceneDelegate
...
- (void)sceneDidBecomeActive:(UIScene *)scene {
// S: Wisetracker SDK init
[DOT initialization:nil application:[UIApplication sharedApplication]];
#ifdef DEBUG
[DOT checkDebugMode:true]
#else
[DOT checkDebugMode:false]
#endif
// E: Wisetracker SDK init
}
...
@end
Hybrid ì•±ì˜ ê²½ìš° 앱 ë‚´ì—서 WebView 를 사용하여 웹 컨í…ì¸ ë¥¼ 서비스 í•˜ê¸°ë„ í•©ë‹ˆë‹¤. ì´ì™€ ê°™ì´ Webview ì— ì˜í•´ì„œ 보여지는 웹 컨í…ì¸ ì˜ ê²½ìš°ì—는 위ì—서 ì„¤ëª…ëœ Native 화면과는 다른 ë°©ì‹ìœ¼ë¡œ ë™ìž‘하기 때문ì—, 별ë„ì˜ ë¶„ì„ ì½”ë“œ ì ìš©ì´ í•„ìš”í•©ë‹ˆë‹¤. ë¶„ì„ ëŒ€ìƒ ì•±ì´ ë§Œì•½ Hybrid ì•±ì¸ ê²½ìš°ì—는 ì•„ëž˜ì˜ ì½”ë“œë¥¼ ì°¸ê³ í•˜ì—¬ 웹 컨í…ì¸ ë„ ë¶„ì„í• ìˆ˜ 있ë„ë¡ ì ìš©ì„ í•´ì•¼í•©ë‹ˆë‹¤.
앱내ì—서 ì‚¬ìš©í• WKWebViewì˜ Delegate í•¨ìˆ˜ì— ì•„ëž˜ì™€ ê°™ì´ ë¶„ì„코드를 ì 용합니다.
Swift
Objective-C
extension WebViewController: WKUIDelegate, WKNavigationDelegate {
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
DOT.injectSdk(toHtmlDocument: webView, withStartPage: true );
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
DOT.injectSdk(toHtmlDocument: webView, withStartPage: false);
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
DOT.injectJavascript(withDomSearch: webView, isOnPageFinished: true)
}
​
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
...
if let url = navigationAction.request.url{
let absoluteString = url.absoluteString
if (absoluteString.hasPrefix("jscall-dot")) {
let request: URLRequest? = navigationAction.request
DOT.setWkWebView(webView, reqeust: request)
decisionHandler(.cancel)
return;
}
...
}
...
}
- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation{
[DOT injectSdkToHtmlDocument:webView withStartPage:true];
}
​
- (void)webView:(WKWebView *)webView didCommitNavigation:(null_unspecified WKNavigation *)navigation {
[DOT injectSdkToHtmlDocument:webView withStartPage:false];
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(null_unspecified WKNavigation *)navigation {
NSLog(@"2. didFinishNavigation");
[DOT injectJavascriptWithDomSearch:webView isOnPageFinished:true];
}
​
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if([@"jscall-dot" isEqualToString:navigationAction.request.URL.scheme]) {
NSURLRequest *request = navigationAction.request;
decisionHandler(WKNavigationActionPolicyCancel);
[DOT setWkWebView:webView reqeust:request];
return;
​
}
}
모바ì¼ì•±ë‚´ 웹뷰와 PC í˜¹ì€ ëª¨ë°”ì¼ì›¹ë·°ë¡œ ë™ì‹œì— 사용하는 í™”ë©´ì¸ ê²½ìš° 아래와 ê°™ì€ ì›¹í‚·ë·°ë¥¼ í¬í•¨í•œ viewControllerì˜ viewWillApeearì— ì•„ëž˜ì™€ ê°™ì´ ì 용해주세요.
Swift
Objective-C
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
webView.evaluateJavaScript("navigator.userAgent") { (userAgent, error) in
if let ua = userAgent {
self.webView.customUserAgent = ua as! String + " RW2SDK"
}
}
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[[self webview] evaluateJavaScript:@"navigator.userAgent" completionHandler:^(id _Nullable userAgent, NSError * _Nullable error) {
NSString* addSuffix = [NSString stringWithFormat:@"%@ RW2SDK", userAgent];
if( @available(iOS 9.0,*)){
[self webview].customUserAgent = addSuffix;
}
else{
NSDictionary *dictionary = [NSDictionary dictionaryWithObjectsAndKeys:userAgent, @"UserAgent", nil];
[[NSUserDefaults standardUserDefaults] registerDefaults:dictionary];
}
}];
}
â€‹í™”ë©´ì „í™˜ ë˜ëŠ” ì´ë²¤íЏ ë¶„ì„ì„ ìœ„í•œ ì ìš© ë°©ë²•ì€ í”ŒëŸ¬ê·¸ì¸ ì„¤ì • ë° ì´ˆê¸°í™” ì´í›„ì— ì•„ëž˜ ë§í¬ë¥¼ í´ë¦í•˜ê±°ë‚˜, 좌측 IN-APP EVENT 메뉴를 통해 ê°€ì´ë“œë¥¼ 확ì¸í•˜ì‹¤ 수 있습니다.
✅
ê³ ê¸‰ ì„¤ì •ì´ëž€ 반드시 ì ìš©í• í•„ìš”ëŠ” 없지만 와ì´ì¦ˆíŠ¸ëž˜ì»¤ì˜ í™•ìž¥ëœ ë¶„ì„ê¸°ëŠ¥ì„ í™œìš©í•˜ê¸° 위해 추가해야 하는 ì„¤ì •ì„ ë§í•©ë‹ˆë‹¤. í•„ ìš”ì— ë”°ë¼ ì„ íƒì 으로 ì„¤ì •ì„ ì¶”ê°€í•´ì£¼ì‹œê¸° ë°”ëžë‹ˆë‹¤.
ìœ ë‹ˆë²„ì…œ ë§í¬ ì„¤ì • ê°€ì´ë“œëŠ” 별ë„ì˜ ë¬¸ì„œì— ì •ë¦¬ë˜ì–´ 있습니다.
continueUserActivity ë¶€ë¶„ì— ì•„ëž˜ì™€ ê°™ì´ ì ìš©ì´ ë˜ë©´ ìœ ë‹ˆë²„ì…œ ë§í¬ë¥¼ 통한 ê´‘ê³ ë¶„ì„ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.
Swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if let uniLink = userActivity.webpageURL?.absoluteString {
DOT.setDeepLink(uniLink)
}
return false;
}
- 딥ë§í¬ê°€ ì„¤ì •ëœ url ì„ í†µí•´ì„œ ì˜¤í”ˆëœ ì´ë²¤íŠ¸ë¥¼ ë¶„ì„합니다. ë¶„ì„ì„ í•˜ê¸° 위해서는 앱ì—
custom url scheme
ì„¤ì •í•´ì•¼ 합니다.

​
✔
와ì´ì¦ˆíŠ¸ëž˜ì»¤ 대시보드ì—서 ìƒì„±í•œ 어트리뷰션ë§í¬ë¥¼ 통해 테스트 ë° ê´‘ê³ ì§‘í–‰
ì„ ì§„í–‰í•˜ë©°, 딥ë§í¬ í´ë¦ 시 와ì´ì¦ˆíŠ¸ëž˜ì»¤ 서버가 ì•±ì˜ ì„¤ì¹˜ 여부를 íŒë‹¨í•˜ì—¬ ë™ìž‘합니다. 다ìŒê³¼ ê°™ì€ í˜•íƒœì˜ "https://xxxx.page.link" ë§í¬ë¥¼ í´ë¦í•˜ê²Œ ë˜ë©´ 해당 URLì´ ê°€ë¥´í‚¤ëŠ” 웹으로 ì´ë™í•¨ìœ¼ë¡œì¨ 와ì´ì¦ˆíŠ¸ëž˜ì»¤ê°€ 수집하여야 하는 ê´‘ê³ íŒŒë¼ë¯¸í„°ê°’ì´ ìœ ì‹¤
ë 수 있어, 앱으로 바로 ì´ë™ 가능한 다ìŒê³¼ ê°™ì€ í˜•íƒœì˜ Unique 한 커스텀스키마가 필요합니다. ì´ë¯¸ 만들어진 ìœ ë‹ˆë²„ì…œë§í¬ê°€ 존재 한다면 와ì´ì¦ˆíŠ¸ëž˜ì»¤ì—서 ì‚¬ìš©í• ë”¥ë§í¬ ì§„ìž… 스키마 ì„¤ì •ì„
'추가'
í•´ 주세요. (딥ë§í¬ìŠ¤í‚¤ë§ˆ ì„¤ì • 추가시 다른 ë§í¬ì— ì–´ë– í•œ ì˜í–¥ë„ 주지 않습니다.)​
위와 ê°™ì´ ì„¤ì •ì„ ë§ˆì¹˜ì‹œê²Œ ë˜ì‹œë©´ 예를들어 다ìŒê³¼ ê°™ í˜•íƒœì˜ ì»¤ìŠ¤í…€ 스키마가 ìƒì„±ë©ë‹ˆë‹¤.
여기서 wisetracker:// 부분ì´
Scheme(í˜¹ì€ í”„ë¡œí† ì½œ)
입니다. 개발ìžê°€ ì•±ì— ì´ Scheme를 쓸 것ì´ë¼ê³ ê²°ì •í•˜ëŠ” 것ì´ë©°, 해당 Schemeë§Œ ì„¤ì •ì„ í•˜ì…”ë„ ë©ë‹ˆë‹¤.ì´ì–´ì„œ wisetracker.co.kr ë¶€ë¶„ì€ íŠ¹ì • 페ì´ì§€ì— ë„달하ë„ë¡ ë§Œë“¤ê¸° 위한
host(í˜¹ì€ path or ë„ë©”ì¸)
입니다.ê·¸ë¦¬ê³ wisetracker://wisetracker.co.kr?product=1 ì´ëŸ¬í•œ 형태로 만드는 경우는
íŠ¹ì • 페ì´ì§€ë¡œ ì´ë™í•˜ê¸° 위한 parameter ê°’ì„ ì§€ì •
하는 것ì´ë©° 해당 ë¶€ë¶„ì€ ì™€ì´ì¦ˆíŠ¸ëž˜ì»¤ì˜ SDKê°€ 아닌 ê³ ê°ì‚¬ì¸¡ì—서 ì§ì ‘ ì„¤ì •í•´ì£¼ì…”ì•¼ 하는 ê°’ì´ë©°, íŠ¹ì • 페ì´ì§€ë¡œ ì´ë™í• 필요가 없다면 parameter ê°’ì€ ê¼ ì„¤ì •í•˜ì§€ ì•Šì•„ë„ ë©ë‹ˆë‹¤.- ì•±ì´ ì„¤ì¹˜ëœ ì´í›„ DeepLink를 통해서 ì•±ì´ ì‹¤í–‰ë˜ëŠ” 경로 ë¶„ì„ì´ í•„ìš”í•œ 경우 아래와 ê°™ì´
setDeepLink
함수를 사용하면 ë¶„ì„ì´ ê°€ëŠ¥í•©ë‹ˆë‹¤.
Swift
Objective-C
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
DOT.setDeepLink(url.absoluteString)
return true
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
[DOT setDeepLink:[url absoluteString]];
return YES;
}
​
와ì´ì¦ˆíŠ¸ëž˜ì»¤ 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
SDKë°ì´í„°ê²€ì¦ ê°€ì´ë“œë¶.pdf
8MB
PDF
딥ë§í¬ ì„¤ì • 후 테스트시 ê°€ì´ë“œë¶ì„ ì°¸ê³ í•´ 주세요.
Facebook 앱ì—서 ìœ ìž…ë˜ëŠ” 설치수를 ë¶„ì„하기 위해서는 Facebookì—서 ì œê³µí•˜ëŠ” SDKê°€ ë¶„ì„ ëŒ€ìƒ ì•±ì— ì„¤ì¹˜ê°€ ì„ í–‰ë˜ì–´ì•¼ 합니다.
1) XCode 프로ì 트 파ì¼ì¤‘ Podfile 파ì¼ì— 다ìŒê³¼ ê°™ì´ SDK를 추가합니다
pod 'FacebookSDK'
2) Podfile ì— dependency 를 추가한 ë’¤ì—는 Terminal í”„ë¡œê·¸ëž¨ì„ ì‹¤í–‰í•˜ì—¬ 다ìŒì˜ ëª…ë ¹ì„ ìˆ˜í–‰í•©ë‹ˆë‹¤
cmd> pod install
1) info.plist 파ì¼ì„ source로 보기 로 오픈합니다
2) ì´ë¦„ ì†ì„± ì•„ëž˜ì— í¬í•¨ëœ 내용중 [APP_ID] 와 [APP_NAME] ë¶€ë¶„ì„ Facebook Developer Site ì—서 ì œê³µí•˜ëŠ” 값으로 치환후 info.plist 파ì¼ì— ì €ìž¥í•©ë‹ˆë‹¤
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>fb[APP_ID]</string>
</array>
</dict>
</array>
<key>FacebookAppID</key>
<string>[APP_ID]</string>
<key>FacebookDisplayName</key>
<string>[APP_NAME]</string>
사용ìžê°€ Facebookì— ë…¸ì¶œëœ ê´‘ê³ ë¥¼ í´ë¦í•˜ê³ ì•±ì„ ì„¤ì¹˜í•œ 경우 ì„¤ì¹˜ëœ ì•±ì—서는 FBSDK를 통해서 AppLinkData를 ìˆ˜ì‹ ë°›ì„ ìˆ˜ 있습니다. ì•„ëž˜ì˜ ì½”ë“œì—서 FBSDK로부터 AppLinkData를 ìˆ˜ì‹ ë°›ê³ , ìˆ˜ì‹ ë°›ì€ AppLinkData 를 SDK로 ì „ë‹¬í•˜ëŠ” ë°©ë²•ì„ í™•ì¸í• 수 있습니다. ì´ í•¨ìˆ˜ëŠ” appDelegateì˜
didFinishLaunchingWithOptions
í•¨ìˆ˜ì— ì 용하세요. SDK 초기화 API initialization
호출 ì „ì— ì 용해주세요.Swift
Objective-C
import FBSDKCoreKit
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
AppLinkUtility.fetchDeferredAppLink({ url, error in
if error != nil {
if let anError = error {
print("Received error while fetching deferred app link \(anError)")
}
}
if let unwrappedUrl = url {
DOT.setFacebookreferrerData(unwrappedUrl)
}
})
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[FBSDKAppLinkUtility fetchDeferredAppLink:^(NSURL *url, NSError *error) {
if(error) {
NSLog(@"Received error while fetching deferred app link %@", error);
}
if(url) {
[DOT setFacebookreferrerData:url];
}
}];
}
Facebook SDK와 ê´€ë ¨í•˜ì—¬ 보다 ìžì„¸í•œ 설치 ë°©ë²•ì€ ì•„ëž˜ì˜ ë§í¬ì—서 확ì¸ì´ 가능합니다.
ì•±ì´ ì„¤ì¹˜ëœ ê²½ë¡œë¥¼ ë¶„ì„하는 시ì ì€ ì•± 설치 후 ì²˜ìŒ ì‹¤í–‰ë 때 설치 경로를 íšë“하게 ë©ë‹ˆë‹¤. ì´ì— 대한 처리는 기본ì 으로 위ì—서 ì„¤ëª…ëœ SDK 필수 ì ìš© 사í•ì´ ì ìš©ëœ ìƒíƒœì—서는 ìžë™ìœ¼ë¡œ 처리가 ë˜ê¸° ë•Œë¬¸ì— ë³„ë„ì˜ ë¶„ì„코드 ì ìš©ì´ í•„ìš”í•˜ì§€ 않습니다. 다만 ì•±ì˜ íŠ¹ë³„í•œ ìƒí™©ì— ì˜í•´ì„œ 앱ì—서 ìˆ˜ì‹ ëœ ì„¤ì¹˜ 경로 ì •ë³´ë¥¼ SDKì— ì§ì ‘ ì„¤ì •í•˜ê³ ìž í•˜ëŠ” 경우ì—는 다ìŒì˜ 코드를 사용하세요.
AppDelegate ì •ì˜ í•목중
didFinishLaunchingWithOptions
함수 ì •ì˜ì—서 파ë¼ë¯¸í„°ë¡œ ì „ë‹¬ë°›ì€ launchOptions 로 부터 설치 경로를 ì§ì ‘ íšë“ 후 ìˆ˜ì‹ ëœ ê°’ì„ setInstallReferrer
함수를 사용해서 SDK로 ì „ë‹¬í• ìˆ˜ 있습니다. 다만 주ì˜í• 사í•ì€ ì•„ëž˜ì™€ ê°™ì´ ì§ì ‘ 앱 설치 경로를 SDKì— ì„¤ì •í•˜ëŠ” 경우 해당 코드가 매 실행 시ì 마다 반복해서 실행ë˜ì§€ ì•Šê³ ì•± 설치 후 최초 1회만 ë™ìž‘하ë„ë¡ ì ìš©ë˜ì–´ì•¼ 합니다. ë˜í•œ ì•„ëž˜ì˜ ì½”ë“œëŠ” 반드시 SDK initialization() 함수 호출 ì´í›„ ì— ì ìš©ë˜ì–´ì•¼ 합니다.Swift
Objective-C
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let referrer = launchOptions?[.url] as? URL {
let _installReferrer:Referrer = Referrer();
_installReferrer.referrer = referrer.absoluteString;
DOT.setInstallReferrer(_installReferrer);
}
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURL *referrer = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (referrer){
Referrer *_installReferrer = [Referrer alloc];
_installReferrer.referrer = referrer.absoluteString;
[DOT setInstallReferrer:_installReferrer];
}
}
- iOS 14부터 IDFA를 íšë“하기 위해서는 사용ìžì˜ ë™ì˜ë¥¼ 얻어야 합니다.
<key>NSUserTrackingUsageDescription</key>
<string>Your data will be used to deliver personalized ads to you.</string>


- IDFA íšë“ì„ ìœ„í•´ 앱 ì¶”ì 투명성 ë™ì˜ ìš”ì² System Alert(대화 ìƒìž)ì„ ë„워야 합니다. ë™ì˜ ìš”ì² System Alert(대화 ìƒìž) í™”ë©´ì— ë„ìš°ë ¤ë©´ requestTrackingAuthorizationWithCompletionHandler:를 호출합니다. completionHandlerì—서 ë™ì˜ 시 SDK API를 호출하ë„ë¡ ìœ„ì™€ ê°™ì´ êµ¬í˜„í•˜ì‹œ ë©´ ë©ë‹ˆë‹¤.
Swift
Objective-C
import AppTrackingTransparency
import AdSupport
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { (AuthorizationStatus) in
if(AuthorizationStatus == .authorized) {
DOT.setIDFA(ASIdentifierManager.shared().advertisingIdentifier.uuidString)
}
}
} else {
DOT.setATTAuthorizationStatus(3)
}
#import <AppTrackingTransparency/ATTrackingManager.h>
#import <AdSupport/AdSupport.h>
if (@available(iOS 14, *)) {
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
if(status == ATTrackingManagerAuthorizationStatusAuthorized) {
[DOT setIDFA:[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]];
}
}];
} else {
[DOT setATTAuthorizationStatus:3];
}
​
Last modified 2mo ago