ios无痕埋点_移动端无痕埋点实践详解(二)
0x01 前言
在移動端無痕埋點實踐詳解(一)這篇文章大致總結了移動端無痕埋點的基本原理。主要介紹了什么是無痕埋點,無痕埋點的基礎數據流程以及在Android系統上總體思路。這篇文章著重總結下無痕埋點方案的實施過程中在Android和iOS系統上幾個細節的解決方案。
0x02 xpath
2.1 什么是xpath
xpath是移動端定義可操作區域的數字標識,是用來標識可操作的控件的。既然想要通過一串字符標識在移動端app中的可操作控件,那么xpath的生成規則需要滿足以下幾個原則:
唯一性: 在當前app中不存在不同控件對應相同Xpath
穩定性: 不同版本app中,在沒有頁面結構變更的情況下,不同版本中相同頁面中相同控件的Xpath要保持不變
2.1 Android中如何生成xpath
在滿足上述xpath原則的基礎上,可通過以下幾個參數作為組成XPath的生成參數:
頁面:標記當前控件所在的頁面url,Webview頁面為其html的url,native頁面url可定義該頁面的virtual url
頁面中位置:如何描述一個控件在該頁面的位置,在Android系統中很容易想到DecorView和頁面子view的關系。使用View到DecorView的位置關系來描述視圖控件在該頁面中的相對位置。
控件標記:這里的控件標記指的是相對于相同父容器的兄弟視圖來說,如何更好的區別彼此。這里很容易能夠想到view id。但是這里并不推薦使用view id作為標記。因為id是在版本迭代過程中很容易因為資源數量的變化而發生變化。并不能滿足標記穩定性的原則,目前在Android上我選擇resource name作為視圖控件的標記。在ios上
綜上所述就可以得到以下的XPath生成方式。
$ xpath = Md5(url+root path + resource name)$
2.2 iOS系統中如何生成xpath
2.3 如何識別xpath
在用戶產生用戶點擊數據的過程中,埋點系統上報控件xpath給埋點后臺,但是在實際的數據分析過程中需要知道每個xpath對應的控件和區塊名稱具體是什么。在每個電商系統中針對埋點都會有一套自己的位置模型規范,簡稱SPM(super position model)。所以針對最終的數據分析和統計需要一個xpath到spm的映射關系,將實際產生的xpath埋點數據轉換成業務中的SPM。實現方式也很簡單,只需要在開發版本中提供一個編輯模式,將移動端本地生成的xpath通過一個編輯工具轉換成SPM數據就可以了,簡單的效果圖如下所示:
0x03 Android如何記錄頁面跳轉
在考慮記錄頁面跳轉的方案時,可能最先想到的是在通過統一路由跳轉的方式跟蹤所有頁面跳轉,但是實際的項目中首先你得有個統一的路由不是?在面對已有的項目代碼從工作量和效果上來說這種方式都不是最佳方案。即便是已有統一的路由方案也很難保證沒有錯埋漏埋的情況存在。別忘記 ActivityLifecycleCallbacks
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39public class RuntimeActivityCallbacks implements Application.ActivityLifecycleCallbacks {
private Map mPageResumeTime = new HashMap<>();
/**
* 頁面對應的referrerId,一個activity可能有多個子頁面,一個activity的referrerId為當前顯示的子頁面的referrerId
*/
private Map mPageReferrerMap = new HashMap<>();
@Override
public void onActivityResumed(Activity activity) {
// 針對頁面的跟蹤
if (activity instanceof IPageTracker) {
IPageTracker pageTracker = (IPageTracker) activity;
String url = pageTracker.getReferrerId();
mPageResumeTime.put(url, System.currentTimeMillis());
mPageReferrerMap.put(activity.hashCode(), url);
AppTraceTool.traceOpenPage(url, ModuleManager.getTopPageUrl());
// 保存當前頁面為top
ModuleManager.setTopPageUrl(url);
} else {
ModuleManager.setTopPageUrl("unknown");
}
}
@Override
public void onActivityStopped(Activity activity)
// 針對頁面的跟蹤
if (activity instanceof IPageTracker) {
IPageTracker pageTracker = (IPageTracker) activity;
String url = pageTracker.getReferrerId();
mPageResumeTime.remove(url);
mPageReferrerMap.remove(activity.hashCode());
AppTraceTool.traceLeavePage(url, second);
}
}
}
0x04 如何使用無痕埋點方案記錄業務數據
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的ios无痕埋点_移动端无痕埋点实践详解(二)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pilt图像处理_详解python op
- 下一篇: spark 写tidb_tidb使用坑记