日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python埋点自动化_iOS自动化埋点的实现

發布時間:2025/4/16 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python埋点自动化_iOS自动化埋点的实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、埋點的作用:

應用趨勢分析:清晰展現應用的新增用戶、活躍用戶、啟動次數、版本分布、行業指標等數據,方便從整體掌控應用的運營情況及增長動態。

渠道分析:在哪里推廣最有效?從哪里獲取的用戶最有價值?通過數據對比評估不同渠道的用戶質量和活躍程度,從而衡量推廣效果。

留存分析:可以掌握每日(周/月)的新增用戶在初次使用后一段時間內的留存率,留存率的高低一定程度上反映了產品和用戶質量的好壞。

用戶屬性:用戶的基本屬性和行為特征,全面了解用戶。

行為分析:針對性地進行應用內的數據統計,了解用戶的產品使用細節及行為特征,幫助團隊尋找產品改進的突破點,評估產品優化的效果。

二、自動化埋點SDK的研發背景

1、代碼埋點

優點:靈活性高,能滿足大量個性化需求。

缺點:開發者需要手動在需要埋點的節點植入埋點代碼,可能埋點代碼也需要植入一定的業務邏輯。

? 代碼耦合嚴重,復用性差,工作量大,難以維護。

2、自動化埋點

優點:

可以較大程度降低開發成本,不受版本更新影響 。

解耦業務代碼,易維護,可移植性強。

解決了數據回溯問題,可查看歷史數據。

避免了使用三方SDK可能造成用戶關鍵數據丟失及企業泄密等問題。

缺點:未解決個性化自定義獲取數據的問題,缺乏數據獲取的靈活性。

三、數據采集

數據采集原理:利用object-c的runtime機制,對有需要的類和事件進行方法交換,進行事件攔截,注入埋點代碼,實現數據統計的功能,具體做法是:

重載類的+(void)load方法,在進程加載到內存時利用runtime的method_exchangeImplementations等接口,

將方法(設為M)的實現互相交換,當方法M被調用時就會被Hook,執行我們的方法。

1234567891011

/// ClickKit 類+ (void)swapMethod:(Class)class origMethod:(SEL)origSelector newMethod:(SEL)newSelector{

Method originalMethod = class_getInstanceMethod(class, origSelector);

Method swizzledMethod = class_getInstanceMethod(class, newSelector);

method_exchangeImplementations(originalMethod, swizzledMethod);

}

+ (BOOL)addMethod:(Class)class sel:(SEL)sel method:(IMP)method

{

return class_addMethod(class, sel, method, "v@:@@");

}

(1)頁面統計(PV)

PV統計原理:通過hook UIViewController的以下函數,達到采集類名等功能:

特別注意:必須實現以下三個函數的super調用,否則,頁面自動化埋點無法觸發

123

- (void)viewDidLoad;

- (void)viewDidAppear:(BOOL)animated;

- (void)viewDidDisappear:(BOOL)animated;

(2)事件統計(event)

事件id:通過對點擊事件進行方法攔截,獲取當前點擊控件及控件所屬target,根據點擊視圖的響應者鏈,逐級取到控件的所屬view tree,建議點擊視圖增加tag。

針對單一點擊事件,以UIControl為例:

1234567891011121314151617181920

@implementation UIControl (ClickKit)

+ (void)load

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

[ClickKit swapMethod:[self class]

origMethod:@selector(sendAction:to:forEvent:)

newMethod:@selector(swizzle_sendAction:to:forEvent:)];

});

}

- (void)swizzle_sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event

{

[self swizzle_sendAction:action to:target forEvent:event];

/// 收集數據}

@end

針對列表點擊事件,以UITableView為例:

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354

@implementation UIScrollView (ClickKit)

+ (void)load

{

static dispatch_once_t onceToken;

dispatch_once(&onceToken, ^{

[ClickKit swapMethod:[self class]

origMethod:@selector(setDelegate:)

newMethod:@selector(swizzle_setDelegate:)];

});

}

- (void)swizzle_setDelegate:(id)delegate

{

[self swizzle_setDelegate:delegate];

if ([self isKindOfClass:[UITableView class]]) {

[(UITableView *)self swizzle_tableViewDidSelectRowAtIndexPathInClass:delegate];

}

else if ([self isKindOfClass:[UICollectionView class]]) {

[(UICollectionView *)self swizzle_collectionViewDidSelectRowAtIndexPathInClass:delegate];

}

}

@end

@implementation UITableView (ClickKit)

- (void)swizzle_tableViewDidSelectRowAtIndexPathInClass:(id)delegate

{

if ([delegate isKindOfClass:[UITableView class]]) {

return;

}

if ([ClickKit hasMethod:[delegate class] sel:@selector(tableView:didSelectRowAtIndexPath:)])

{

SEL swizSel = NSSelectorFromString(@"swizzle_didSelectRowAtIndexPath");

if ([ClickKit addMethod:[delegate class] sel:swizSel method:(IMP)swizzle_didSelectRowAtIndexPath]) {

[ClickKit swapMethod:[delegate class] origMethod:swizSel newMethod:@selector(tableView:didSelectRowAtIndexPath:)];

}

}

}

void swizzle_didSelectRowAtIndexPath(id self, SEL _cmd, id tableView, id indexPath)

{

SEL selector = NSSelectorFromString(@"swizzle_didSelectRowAtIndexPath");

((void(*)(id, SEL, id, id))objc_msgSend)(self, selector, tableView, indexPath);

/// 收集數據

}

@end

四、數據存儲

埋點數據采用db方式進行數據存儲,一般依據事件類型,db結構由啟動表、pv表和event表組成。具體怎么組織數據結構,需要上報什么數據,需要和大數據溝通。

五、數據上報

上報策略:

1、采用實時上傳和離線上傳相結合的方式,wifi和4G模式下,pv采用實時上報的方式,事件是隨著下一個pv同時上傳。

2、離線上傳:其它網絡情況下只做存儲處理。

這個策略也只是建議,具體還看業務需求。

總結

以上是生活随笔為你收集整理的python埋点自动化_iOS自动化埋点的实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。