索引
DOT
SDK 下载及安装
- SDK 下载
- 在 XCode CocoaPod 环境中下载 SDK 方法 在 XCode 项目文件中的 Podfile 文件中添加如下 SDK。
pod 'DOT'
如果之前已经安装了 SDK,则需要指定要安装的 SDK 版本。以下示例显示了如何明确指定要安装的 SDK 版本。
pod 'DOT', '~> 1.0.3'
在 Podfile 中添加相应的行后,在 Terminal 程序中执行以下命令。
cmd> pod install
如果项目不在 Cocoapod 环境中,可以从以下 Github 链接下载 SDK 库文件。请将下载的 Framework 文件设置为在 XCode 项目中可引用。
- SDK 요구사항
iOS 9.3 以上
- SDK 세팅
将提供的 App Analytics Key 信息添加到 XCode 项目的 info.plist 文件中。打开 info.plist 文件时,请选择 'Source Code' 而不是 'Property list',然后使用 Ctrl+V 粘贴提供的 Key。提供的 Key 值是以 XML 格式存在的数据,如下面的示例所示。
<key>dotAuthorizationKey</key>
<dict>
<key>domain</key>
<string>http://dev-collector001-ncl.nfra.io/collector</string>
<key>serviceNumber</key>
<string>103</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>
</dict>
为了允许 http 通信,请按照以下方式添加 NSAppTransportSecurity。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
基本分析应用(必需)
- SDK 初始化
在 XCode 项目的 AppDelegate 定义的类的 **didFinishLaunchingWithOptions** 函数中应用以下初始化 SDK 的代码。
- Objective-C
#import <DOT/DOT.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[DOT initialization];
}
- Swift
import DOT
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
DOT.initialization()
}
在 DOT 使用的位置,需要分别通过 #import <DOT/DOT.h> 和 import DOT 在 Objective-C 和 Swift 中进行 import。下面给出的应用示例中省略了 import 部分,以保持可读性。
- 访问与页面分析
为了对应用程序的执行和页面进行分析,需要在每个屏幕的移动时调用的回调函数中应用以下代码。在应用以下两种代码后,基本分析的范围大致如下。
- 应用程序执行、访问次数、日/周/月独立访问次数等相关访问指标
- 页面浏览量、页面停留时间
- 运营商、终端、国家等可以从访问者的设备环境中提取的指标
将以下代码应用于 XCode 项目中每个 View 屏幕的 viewWillAppear() 函数和 viewWillDisappear() 函数,以进行基本页面流量分析。
- Objective-C
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[DOT onStartPage];
}
- (void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
[DOT onStopPage];
}
- Swift
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
DOT.onStartPage()
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
DOT.onStopPage()
}
Hybrid 应用程序分析方法
对于 Hybrid 应用程序,它们也可以在应用程序中使用 WebView 来提供 Web 内容。对于通过 WebView 显示的 Web 内容,由于与上述本机屏幕的行为不同,因此需要应用单独的分析代码。如果分析应用是 Hybrid 应用程序,请参考以下代码以将 Web 内容也包含在分析中。
将以下分析代码应用于应用程序内使用的 WebView 的 Delegate 函数。
- 当使用 UIWebView 时,应用以下分析代码
- Objective-C
@property (nonatomic) BOOL webLoaded;
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
if(self.webLoaded) {
[DOT onStartWebPage];
}
self.webLoaded = NO;
if ([[[request URL] absoluteString] hasPrefix:@"jscall-dot:"]) {
[DOT setWebView:webView reqeust:request];
return NO;
}
return YES;
}
- (void)webViewDidFinishLoad:(UIWebView *)webView {
if(webView.isLoading) {
return;
}
self.webLoaded = YES;
}
- (void)viewDidLoad:(BOOL)animated{
[super viewDidLoad];
self.webLoaded = NO;
}
- Swift
var webLoaded : Bool!
func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebView.NavigationType) -> Bool {
if webLoaded {
DOT.onStartWebPage()
}
webLoaded = false
if let unwrappedUrl = request.url {
if unwrappedUrl.absoluteString.hasPrefix("jscall-dot:") {
DOT.setWebView(webView, reqeust: request)
return false
}
}
return true
}
func webViewDidFinishLoad(_ webView: UIWebView) {
if webView.isLoading {
return
}
webLoaded = true
}
override func viewDidLoad() {
super.viewDidLoad()
webLoaded = false
}
- 当使用 WKWebView 时,应用以下分析代码
- Objective-C
@property (nonatomic) BOOL webLoaded;
- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
if(self.webLoading) {
[DOT onStartWebPage];
}
self.webLoaded = NO;
NSURLRequest *request = navigationAction.request;
decisionHandler(WKNavigationActionPolicyAllow);
if ([[[request URL] absoluteString] hasPrefix:@"jscall-dot:"]) {
[DOT setWkWebView:webView reqeust:request];
}
}
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {
if(webView.isLoading) {
return;
}
self.webLoading = YES;
}
- (void)viewDidLoad:(BOOL)animated{
[super viewDidLoad];
self.webLoaded = NO;
}
- Swift
var webLoaded : Bool!
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if webLoading {
DOT.onStartWebPage()
}
webLoaded = false
var request: URLRequest? = navigationAction.request
decisionHandler(.allow)
if request?.url?.absoluteString.hasPrefix("jscall-dot:") ?? false {
DOT.setWkWebView(webView, reqeust: request)
}
}
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if webView.isLoading {
return
}
webLoaded = true
}
override func viewDidLoad() {
super.viewDidLoad()
webLoaded = false
}
流入路径分析
- 应用程序安装路径分析
应用程序安装路径的分析时间是在应用程序安装后首次运行时获得安装路径。因此,在基本情况下,当满足上述SDK的必备条件时,自动完成处理,不需要单独的分析代码。但是,如果需要在特殊情况下直接在应用程序中设置收到的安装路径信息到SDK中,请使用以下代码。
在AppDelegate中定义项目中的didFinishLaunchingWithOptions函数定义中,从传递给参数的launchOptions中直接获取安装路径后,可以使用setInstallReferrer函数通过SDK传递接收到的值。但是,请注意,以下直接将应用程序安装路径设置为SDK的情况,该代码应该在每次执行时不再重复执行,而应在应用程序安装后首次运行时仅执行一次。此外,以下代码必须在调用SDK initialization()函数之后应用。
- Objective-C
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
NSURL *referrer = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey];
if (referrer){
[DOT setInstallReferrer:referrer];
}
}
- Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if let referrer = launchOptions?[.url] as? URL {
DOT.setInstallReferrer(referrer);
}
}
- 外部导入路径分析(DeepLink)
如果需要分析应用安装后通过 DeepLink 运行的路径,可以使用以下 setDeepLink() 函数来进行分析。
- Objective-C
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options {
[DOT setDeepLink:[url absoluteString]];
return YES;
}
- Swift
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
DOT.setDeepLink(url.absoluteString)
return true
}
- Facebook 分析
为了分析通过 Facebook 应用进入的安装数量,需要在分析目标应用中先行安装 Facebook 提供的 SDK。
- FBSDK 下载方法
a. 在 XCode 项目文件中的 Podfile 文件中添加以下 SDK。
pod 'FacebookSDK'
b. 添加完 dependency 后,在终端程序中执行以下命令。
cmd> pod install
如果项目不是 Cocoapad 环境,可以从以下链接下载。请下载 Framework 文件,并将其设置为 XCode 项目可引用。
- FBSDK 安装方法
a. 将 info.plist 文件以 'Source Code' 打开 b. 在名称属性下方包含的内容中,用 Facebook 开发者网站上提供的值替换 [APP_ID] 和 [APP_NAME] 部分,然后将 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>
- 从 FBSDK 接收安装引用并传递给 SDK,用户点击 Facebook 上显示的广告并安装应用的情况下,可以从 FBSDK 收到 AppLinkData。下面可以查看从 FBSDK 接收 AppLinkData 并将其传递给 SDK 的方法。此函数应用于 appDelegate 的 didFinishLaunchingWithOptions 函数。
- Objective-C
- (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];
}
}];
}
- Swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
FBSDKAppLinkUtility.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)
}
})
}
- 推送消息分析
本文档说明如何收集与推送消息相关的Push Token值,以及如何通过点击接收到的消息来分析应用运行的打开数等。
- Push Token分析方法:Push Token是一种在推送消息发送系统中,用于识别特定收件人的唯一标识ID值。为了分析Push Token,可以将以下分析代码应用到AppDelegate中定义的didRegisterForRemoteNotificationsWithDeviceToken()函数中。
- Objective-C
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSString *strDeviceToken = [deviceToken description];
NSCharacterSet *characterSet = [NSCharacterSet characterSetWithCharactersInString:@"< >"];
NSString *strWithoutSpace = [[strDeviceToken stringByTrimmingCharactersInSet:characterSet] stringByReplacingOccurrencesOfString:@" " withString:@""];
[DOT setPushToken:strWithoutSpace];
}
- Swift
func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data -> String in
return String(format: "%02.2hhx", data)
}
let token = tokenParts.joined()
DOT.setPushToken(token)
}
- 通过点击收到的推送消息来分析应用运行的打开数方法:分析每个终端接收到的推送消息,当用户点击推送消息时。
- Objective-C
[DOT setPushClick:userInfo];
- Swift
DOT.setPushClick(userInfo)
- Universal Link分析
为了进行iOS提供的Universal Link分析,可以在进入Universal Link的delegate方法中添加以下代码。
- Objective-C
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray<id<UIUserActivityRestoring>> * _Nullable))restorationHandler {
[DOT setDeepLink:userActivity.webpageURL.absoluteString];
return false;
}
- Swift
func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
if let uniLink = userActivity.webpageURL?.absoluteString {
DOT.setDeepLink(uniLink)
}
return false;
}
}
고급 컨텐츠 분석 (optional)
为了分析App中发生的各种事件,需要在事件发生的时刻,将相关信息传递给SDK。下面将详细介绍主要事件的分析方法。
登录分析
- 如果分析目标App有登录功能,可以分析登录事件的发生情况。在登录处理完成后,可以在登录完成页面应用以下分析代码。
- Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
[page setPageIdentity:@"LIR"];
}]
];
}
- Swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DOT.onStartPage()
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setPageIdentity("LIR")
})
)
}
如果登录完成页面不存在,直接跳转至主界面或内容页面,在处理登录的Backend逻辑完成后,可以按以下方式发送登录完成事件。
Objective-C
... 로그인 처리 로직 수행 ...
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
[page setIdentity:@"LIR"];
}]
];
Swift
... 로그인 처리 로직 수행 ...
DOT.onStartPage()
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setPageIdentity("LIR")
})
)
- 当分析会员登录完成事件时,可以分析当前登录用户的多种信息。登录处理完成后,应用以下分析代码。
- Objective-C
[DOT setUser:
[User builder:^(User *user) {
[user setGender:@"M"];
[user setAge:@"A"];
[user setAttr1:@"attr1"];
}]
];
- Swift
DOT.setUser(
User.builder({ (builder) in
let user = builder as! User
user.setGender("M")
user.setAge("A")
user.setAttr1("attr1")
})
)
提供的与会员分析相关的分析项目如下 <User Class>
类名称 | 方法名称 | 参数 |
---|---|---|
User | setMember(isMember) | 传递表示会员状态的Y,N值 |
User | setMemberGrade(grade) | 传递表示会员等级的代码值 |
User | setMemberId(userId) | 传递会员的登录ID |
User | setGender(gender) | 传递表示会员性别的M,F,U中的一个值 |
User | setAge(age) | 传递表示会员年龄的代码值 |
User | setAttr1(attr) | 传递表示会员属性#1意义的代码值 |
User | setAttr2(attr) | 传递表示会员属性#2意义的代码值 |
User | setAttr3(attr) | 传递表示会员属性#3意义的代码值 |
User | setAttr4(attr) | 传递表示会员属性#4意义的代码值 |
User | setAttr5(attr) | 传递表示会员属性#5意义的代码值 |
in-App 分析
- 产品页面分析:在电子商务应用中,在产品详细页面应用分析代码,分析产品各自的查看次数。请在以下方式中应用分析代码。
- Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
[page setPageIdentity:@"PDV"];
page.product = [Product builder:^(Product *product) {
[product setFirstCategory:@"상품카테고리(대)"];
[product setProductCode:@"상품코드"];
[product setAttr1:@"상품속성#1"];
}];
}]
];
}
- Swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DOT.onStartPage()
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setPageIdentity("PDV")
page.product = Product.builder({ (builder) in
let product = builder as! Product
product.setFirstCategory("상품카테고리(대)")
product.setProductCode("상품코드")
product.setAttr1("상품속성#1")
})
})
)
}
与产品页面分析相关的产品分析项目如下 <Product Class>
类名称 | 方法名称 | 参数 |
---|---|---|
Product | setFirstCategory(value) | 传递商品大分类的值 |
Product | setSecondCategory(value) | 传递商品中分类的值 |
Product | setThirdCategory(value) | 传递商品小分类的值 |
Product | setDetailCategory(value) | 传递商品细分类的值 |
Product | setProductCode(value) | 传递商品代码的值 |
Product | setAttr1(attr) | 传递表示会员属性#1意义的代码值 |
Product | setAttr2(attr) | 传递表示会员属性#2意义的代码值 |
Product | setAttr3(attr) | 传递表示会员属性#3意义的代码值 |
Product | setAttr4(attr) | 传递表示会员属性#4意义的代码值 |
Product | setAttr5(attr) | 传递表示会员属性#5意义的代码值 |
Product | setAttr6(attr) | 传递表示成员属性#6含义的代码值 |
Product | setAttr7(attr) | 传递表示成员属性#7含义的代码值 |
Product | setAttr8(attr) | 传递表示成员属性#8含义的代码值 |
Product | setAttr9(attr) | 传递表示成员属性#9含义的代码值 |
Product | setAttr10(attr) | 传递表示成员属性#10含义的代码值 |
- 页面身份分析:用户可以定义应用中各页面的身份(Identity),将定义好的身份应用于各个屏幕,便可以了解应用中使用频率最高的屏幕排名。 注意:Identity值必须是最大长度为8、由字母和数字组成的代码值。
- Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
[page setIdentity:@"Your Page Identity Value"];
}]
];
}
- Swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DOT.onStartPage()
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setPageIdentity("Your Page Identity Value")
})
)
}
- 内容路径分析:给应用中的每个页面应用Hierarchical内容路径值,便可以根据各内容的类别进行分组并进行分析。内容路径以'%'字符为分隔符,且必须以'%'字符开头。 通过内容路径传递的值不得使用'《'和'》'字符。
- Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
[page setContentPath:@"^메인^계정정보 수정"];
}]
];
}
- Swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DOT.onStartPage()
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setContentsPath("^메인^계정정보 수정")
})
)
}
- 多变量分析(自定义变量):多变量分析项允许用户定义要传递的值。可以将所需的分析项通过SDK API函数传递,并根据这些值衡量页面的 viewership、visits 等。 注意:多变量分析值不得使用'《'和'》'字符(只能使用英文、数字、韩文)。
- Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
page.customValue = [CustomValue builder:^(CustomValue *customValue) {
[customValue setValue1:@"Multi Variables 값"];
}];
}]
];
}
- Swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DOT.onStartPage()
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setContentsPath("^메인^계정정보 수정")
page.customValue = CustomValue.builder({ (builder) in
let customValue = builder as! CustomValue
customValue.setValue1("Multi Variables 값")
})
})
)
}
类名称 | 方法名称 | 参数 |
---|---|---|
CustomValue | setValue1(value) | 多变量#1 传递值 |
CustomValue | setValue2(value) | 多变量#2 传递值 |
CustomValue | setValue3(value) | 多变量#3 传递值 |
CustomValue | setValue4(value) | 多变量#4 传递值 |
CustomValue | setValue5(value) | 多变量#5 传递值 |
CustomValue | setValue6(value) | 多变量#6 传递值 |
CustomValue | setValue7(value) | 多变量#7 传递值 |
CustomValue | setValue8(value) | 多变量#8 传递值 |
CustomValue | setValue9(value) | 多变量#9 传递值 |
CustomValue | setValue10(value) | 多变量#10 传递值 |
- 内部搜索词分析:如果应用有搜索功能,分析用户输入的搜索词、搜索的类别和搜索结果数量等,可以衡量搜索功能的实用性。将分析代码应用于显示搜索结果的页面。
- Objective-C
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
[DOT onStartPage];
[DOT setPage:
[Page builder:^(Page *page) {
// 사용자가 통합 검색 카테고리에서 청바지 검색어로 1200개의 검색 결과를 보았을떄 적용 예시
[page setSearchingResult:1200];
[page setKeywordCategory:@"통합검색"];
[page setKeyword:@"청바지"];
}]
];
}
- Swift
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
DOT.onStartPage()
// 사용자가 통합 검색 카테고리에서 청바지 검색어로 1200개의 검색 결과를 보았을떄 적용 예시
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setSearchResultCount(1200)
page.setKeywordCategory("통합검색")
page.setKeyword("청바지")
})
)
}
- 搜索结果点击分析:分析显示在搜索结果页面上的许多搜索结果项的点击数。通过这些分析结果,可以判断搜索结果上端的显示项目是否合适。如果在搜索结果页面点击特定项目,在转到该页面之前,请应用以下分析代码。
- Objective-C
DOT.setClick(
new Click.Builder()
.setSearchClickEvent("클릭된 검색 결과 항목 ID")
.build()
);
- Swift
DOT.setClick(
Click.builder({ (builder) in
let click = builder as! Click
click.setSearchClickEvent("클릭된 검색 결과 항목 ID")
})
)
- 购物车中商品分析:针对电子商务相关业务,可以分析购物车中的商品。在购物车事件发生时,应用以下代码。
- Objective-C
[DOT setClick:
[Click builder:^(Click *click) {
[click addCartProduct:[Product builder:^(Product *product) {
[product setFirstCategory:@"상품카테고리(대)"];
[product setProductCode:@"상품코드"];
[product setAttr1:@"상품속성#1"];
}]
];
}]
];
- Swift
DOT.setClick(
Click.builder({ (builder) in
let click = builder as! Click
click.addCartProduct(Product.builder({ (builder) in
let product = builder as! Product
product.setFirstCategory("상품카테고리(대)")
product.setProductCode("상품코드")
product.setAttr1("상품속성#1")
}))
})
)
- 点击事件分析:分析应用中存在的各种点击元素(横幅、按钮等)的点击次数。在点击某个元素时,在跳转到元素目标页面之前应用以下分析代码。
- Objective-C
[DOT setClick:
[Click builder:^(Click *click) {
[click setClickEvent:@"클릭 요소 ID"];
}]
];
- Swift
DOT.setClick(
Click.builder({ (builder) in
let click = builder as! Click
click.setClickEvent("클릭 요소 ID")
})
)
通过点击元素的ID值传递单个字符串值,也可以像之前所述的内容路径分析一样,传递层次化路径值,以便在后续数据查询时进行分类。要使用层次化路径值,值的相关约束条件与内容路径分析相同。
- 点击事件高级分析(多变量):
- Objective-C
// 클릭 이벤트 분석시 Multi Variables 분석값을 같이 전송하는 예시
[DOT setClick:
[Click builder:^(Click *click) {
[click setClickEvent:@"클릭 요소 ID"];
click.customValue = [CustomValue builder:^(CustomValue *customValue) {
[customValue setValue1:@"Multi Variables 값"];
}];
}]
];
- Swift
// 클릭 이벤트 분석시 Multi Variables 분석값을 같이 전송하는 예시
DOT.setClick(
Click.builder({ (builder) in
let click = builder as! Click
click.setClickEvent("클릭 요소 ID")
click.customValue = CustomValue.builder({ (builder) in
let customValue = builder as! CustomValue
customValue.setValue1("Multi Variables 값")
})
})
)
与Multi Variables分析相关提供的分析项目如下
类名称 | 方法名称 | 参数 |
---|---|---|
CustomValue | setValue1(value) | 多变量#1 传递值 |
CustomValue | setValue2(value) | 多变量#2 传递值 |
CustomValue | setValue3(value) | 多变量#3 传递值 |
CustomValue | setValue4(value) | 多变量#4 传递值 |
CustomValue | setValue5(value) | 多变量#5 传递值 |
CustomValue | setValue6(value) | 多变量#6 传递值 |
CustomValue | setValue7(value) | 多变量#7 传递值 |
CustomValue | setValue8(value) | 多变量#8 传递值 |
CustomValue | setValue9(value) | 多变量#9 传递值 |
CustomValue | setValue10(value) | 多变量#10 传递值 |
微小转化分析
- 在 Conversion 分析应用中,最典型的 Conversion 可能是 购买转化。但根据应用提供的服务,应用内存在非常多样的 Conversion。此外,即使已经定义的 Conversion,也可能因为服务的变更、时代的变迁而需要重新定义,或者因为不再使用而被废弃。SDK 允许用户自定义 80 个 Conversion,并通过应用发生的事件来测量 Conversion。这是独立于 购买转化 的分析,用户可以随时重新定义分析代码的应用标准。
- Objective-C
// Micro Conversion #1 번의 사용 예시
[DOT setConversion:
[Conversion builder:^(Conversion *conversion) {
[conversion setMicroConversion1:1];
}];
];
- Swift
// Micro Conversion #1 번의 사용 예시
DOT.setConversion(
Conversion.builder { (builder) in
let conversion = builder as! Conversion
conversion.setMicroConversion1(1)
}
)
- Conversion 高级分析(商品)Conversion 可以简单地通过发生次数来衡量,也可以通过关联商品来衡量商品特定的 Conversion 发生次数。请将以下 Conversion Data + Product Data 在事件发生时刻通过 SDK 发送到服务器。
- Objective-C
[DOT setConversion:
[Conversion builder:^(Conversion *conversion) {
[conversion setMicroConversion1:1];
conversion.product = [Product builder:^(Product *product) {
[product setFirstCategory:@"상품카테고리(대)"];
[product setProductCode:@"상품코드"];
[product setAttr1:@"상품속성#1"];
}];
}];
];
- Swift
DOT.setConversion(
Conversion.builder { (builder) in
let conversion = builder as! Conversion
conversion.setMicroConversion1(1)
conversion.product = Product.builder({ (builder) in
let product = builder as! Product
product.setFirstCategory("상품카테고리(대)")
product.setProductCode("상품코드")
product.setAttr1("상품속성#1")
})
}
)
Conversion 고급 분석( 상품 )과 관련되어 제공되는 상품 분석 항목은 다음과 같습니다
|Class 이름|Method 이름|파라미터|
|:--:|:--:|:--:|
|Product|setFirstCategory(value)|상품 카테고리(대) 값을 전달|
|Product|setSecondCategory(value)|상품 카테고리(중) 값을 전달|
|Product|setThirdCategory(value)|상품 카테고리(소) 값을 전달|
|Product|setDetailCategory(value)|상품 카테고리(세) 값을 전달|
|Product|setProductCode(value)|상품 코드 값을 전달|
|Product|setAttr1(value)|상품 속성 #1 값을 전달|
|Product|setAttr2(value)|상품 속성 #2 값을 전달|
|Product|setAttr3(value)|상품 속성 #3 값을 전달|
|Product|setAttr4(value)|상품 속성 #4 값을 전달|
|Product|setAttr5(value)|상품 속성 #5 값을 전달|
|Product|setAttr6(value)|상품 속성 #6 값을 전달|
|Product|setAttr7(value)|상품 속성 #7 값을 전달|
|Product|setAttr8(value)|상품 속성 #8 값을 전달|
|Product|setAttr9(value)|상품 속성 #9 값을 전달|
|Product|setAttr10(value)|상품 속성 #10 값을 전달|
- Conversion 고급 분석( Multi Variables )
Multi Variables 항목과 연계하여 Conversion의 발생 횟수 측정도 가능합니다. 이벤트가 발생한 시점에 아래와 같이 Conversion Data + Multi Variables Data를 SDK로 전달하세요.
##### - Objective-C
```Objective-C
[DOT setConversion:
[Conversion builder:^(Conversion *conversion) {
[conversion setMicroConversion1:1];
conversion.customValue = [CustomValue builder:^(CustomValue *customValue) {
[customValue setValue1:@"Multi Variables 값"];
}];
}];
];
- Swift
DOT.setConversion(
Conversion.builder { (builder) in
let conversion = builder as! Conversion
conversion.setMicroConversion1(1)
conversion.customValue = CustomValue.builder({ builder in
let customValue = builder as! CustomValue
customValue.setValue1("Multi Variables 값")
})
}
)
与 Conversion 高级分析(多变量)相关的分析项目包括以下内容
类名称 | 方法名称 | 参数 |
---|---|---|
CustomValue | setValue1(value) | 多变量#1 传递值 |
CustomValue | setValue2(value) | 多变量#2 传递值 |
CustomValue | setValue3(value) | 多变量#3 传递值 |
CustomValue | setValue4(value) | 多变量#4 传递值 |
CustomValue | setValue5(value) | 多变量#5 传递值 |
CustomValue | setValue6(value) | 多变量#6 传递值 |
CustomValue | setValue7(value) | 多变量#7 传递值 |
CustomValue | setValue8(value) | 多变量#8 传递值 |
CustomValue | setValue9(value) | 多变量#9 传递值 |
CustomValue | setValue10(value) | 多变量#10 传递值 |
购买分析
- 购买分析
分析应用内发生的购买事件。在购买完成页面,将以下与购买相关的信息通过SDK发送。
- Objective-C
[DOT setPage:
[Page builder:^(Page *page) {
[page setPageIdentity:@"ODR"];
}]
];
[DOT setPurchase:
[Purchase builder:^(Purchase *purchase) {
[purchase setOrderNo:@"Your Order Number"];
[purchase setCurrency:KRW"];
purchase.orderProduct = [Product builder:^(Product *product) {
[product setFirstCategory:@"상품카테고리(대)"];
[product setProductCode:@"상품코드"];
[product setOrderAmount:10000];
[product setOrderQuantity:1];
}];
}]
];
- Swift
DOT.setPurchase(
Purchase.builder({ (builder) in
let purchase = builder as! Purchase
purchase.setOrderNo("Your Order Number")
purchase.setCurrency("KRW")
purchase.orderProduct = Product.builder({ (builder) in
let product = builder as! Product
product.setFirstCategory("상품카테고리(대)")
product.setProductCode("상품코드")
product.setOrderAmount(10000)
product.setOrderQuantity(1)
})
})
)
提供的与分析购买相关的分析项目如下
类名称 | 方法名称 | 参数 |
---|---|---|
购买 | setOrderNumber(value) | 传递与购买事件相关的综合订单号码值 |
购买 | setCurrency(value) | 传递已支付金额的货币基准 |
Product | setFirstCategory(value) | 传递商品大分类的值 |
Product | setSecondCategory(value) | 传递商品中分类的值 |
Product | setThirdCategory(value) | 传递商品小分类的值 |
Product | setDetailCategory(value) | 传递商品细分类的值 |
Product | setProductCode(value) | 传递商品代码的值 |
Product | setAttr1(value) | 传递产品属性 #1 的值 |
Product | setAttr2(value) | 传递产品属性 #2 的值 |
Product | setAttr3(value) | 传递产品属性 #3 的值 |
Product | setAttr4(value) | 传递产品属性 #4 的值 |
Product | setAttr5(value) | 传递产品属性 #5 的值 |
Product | setAttr6(value) | 传递产品属性 #6 的值 |
Product | setAttr7(value) | 传递产品属性 #7 的值 |
Product | setAttr8(value) | 传递产品属性 #8 的值 |
Product | setAttr9(value) | 传递产品属性 #9 的值 |
Product | setAttr10(value) | 传递产品属性 #10 的值 |
Product | setProductOrderNumber(value) | 传递产品专属订单号码 |
Product | setOrderAmount(value) | 传递产品专属购买金额 |
Product | setOrderQuantity(value) | 传递产品专属购买数量 |
Product | setRefundAmount(value) | 传递产品专属退款金额 |
Product | setRefundQuantity(value) | 传递产品专属退款数量 |
- 购买高级分析(多变量)
与多变量项目相关联,也可以进行购买分析。事件发生时,将以下 Purchase Data + Multi Variables Data 以以下方式发送到 SDK。
- Objective-C
[DOT setPurchase:
[Purchase builder:^(Purchase *purchase) {
[purchase setOrderNo:@"Your Order Number"];
[purchase setCurrency:KRW"];
purchase.orderProduct = [Product builder:^(Product *product) {
[product setFirstCategory:@"상품카테고리(대)"];
[product setProductCode:@"상품코드"];
[product setOrderAmount:10000];
[product setOrderQuantity:1];
}];
purchase.customValue = [CustomValue builder:^(CustomValue *customValue) {
[customValue setValue1:@"Multi Variables 값"];
}];
}]
];
- Swift
DOT.setPage(
Page.builder({ (builder) in
let page = builder as! Page
page.setPageIdentity("ODR")
})
)
DOT.setPurchase(
Purchase.builder({ (builder) in
let purchase = builder as! Purchase
purchase.setOrderNo("Your Order Number")
purchase.setCurrency("KRW")
purchase.orderProduct = Product.builder({ (builder) in
let product = builder as! Product
product.setFirstCategory("상품카테고리(대)")
product.setProductCode("상품코드")
product.setOrderAmount(10000)
product.setOrderQuantity(1)
})
purchase.customValue = CustomValue.builder({ (builder) in
let customValue = builder as! CustomValue
customValue.setValue1("Multi Variables 값")
})
})
)