日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

1 如何查看埋點(diǎn)方案

在進(jìn)行埋點(diǎn)前,需要確定在哪里埋點(diǎn)、埋哪些點(diǎn)等,即需要梳理清楚明確的埋點(diǎn)需求。在QuickTracking平臺中將明確的埋點(diǎn)需求稱為埋點(diǎn)方案,并為埋點(diǎn)方案設(shè)計(jì)了規(guī)范模板。如下:

image

在埋點(diǎn)方案中,明確的所需埋點(diǎn)內(nèi)容有:

1、事件主體:指“誰”觸發(fā)了這個(gè)事件,分為設(shè)備ID賬號ID,上報(bào)的事件務(wù)必具備其中之一。

  • 設(shè)備ID:Android設(shè)備和iOS設(shè)備的默認(rèn)設(shè)備ID為應(yīng)用級別唯一的設(shè)備ID,由Quicktracking自動生成

    • Android9及以下設(shè)備:SDK自動采集imei、wifimac、androidid、SN生成設(shè)備ID,生成后存入本地,只有卸載應(yīng)用或者刪除應(yīng)用數(shù)據(jù)才會重新生成設(shè)備ID。

    • Android10級以上設(shè)備:SDK自動采集oaid、gaid、androidid、SN生成設(shè)備ID,生成后存入本地,只有卸載應(yīng)用或者刪除應(yīng)用數(shù)據(jù)才會重新生成設(shè)備ID。

    • iOS設(shè)備:SDK自動采集openudid生成設(shè)備ID,生成后放入keychain中,只有恢復(fù)出廠設(shè)置或者刪除應(yīng)用數(shù)據(jù)才會重新生成設(shè)備ID。

    • 使用應(yīng)用的C端用戶同意采集idfa和oaid,QuickTracking SDK才會采集,只有QuickTracking app SDK可以采集到oaid、gaid、imei、wifimac、androidid、SN、idfa、idfv。

  • 賬號ID:客戶端用戶登錄后賬號標(biāo)識,當(dāng)一個(gè)用戶在不同的設(shè)備進(jìn)行登錄時(shí),設(shè)備ID會發(fā)生變化,但是賬號ID不會發(fā)生變化。例如一個(gè)用戶使用手機(jī)和pad分別登錄。

2、用戶屬性:針對賬號ID的屬性,例如賬號ID為“testdemo@111”的用戶,“生日”為“1999-02-13”,“會員等級”為“鉑金”等。“生日”和“會員”等級就為用戶屬性。

3、渠道屬性:廣告投放的屬性,例如投放渠道、投放方式、投放內(nèi)容等。

4、全局屬性:在全局設(shè)置一次后,每一個(gè)事件都會攜帶的屬性

5、頁面瀏覽事件:頁面加載時(shí)上報(bào)的事件(埋點(diǎn)方案中頁面編碼和事件編碼相等的事件,也是標(biāo)記為藍(lán)色的事件)

6、點(diǎn)擊、曝光、自定義事件:客戶端用戶與客戶端發(fā)生任意交互時(shí)上報(bào)的事件。

2 設(shè)置設(shè)備ID&賬號ID

2.1 設(shè)備ID設(shè)置

SDK 內(nèi)部默認(rèn)會采集如下參數(shù)。

設(shè)備標(biāo)識或設(shè)備信息

采集方法

備注

idfa

[ASIdentifierManager advertisingIdentifier].UUIDString

蘋果廣告標(biāo)識

idfv

[[UIDevice currentDevice].identifierForVendor UUIDString]

應(yīng)用級標(biāo)識

openudid

[UIPasteboardpasteboardWithName:slotPBid create:NO]

openUdid(三方)

淘寶utdid

[UTDevice utdid]

若您集成了淘寶utdid SDK,QuickTracking才會采集

mcc

[UMUtils mccString]

移動信號國家碼

mnc

[UMUtils mncString]

移動網(wǎng)絡(luò)號碼

如果開發(fā)者希望針對上表中的某幾個(gè)設(shè)備標(biāo)識符采集行為做控制,如:不采集或自行實(shí)現(xiàn)采集方法。可以實(shí)現(xiàn)對應(yīng)block回調(diào),如下示例:

[QTConfigure customSetIdfaBlock:^NSString *{
  return @"";
}];
[QTConfigure customSetIdfvBlock:^NSString *{
  return @"";
}];
[QTConfigure customSetOpenUdidBlock:^NSString *{
  return @"custom-openudid";
}];
[QTConfigure customSetUtdidBlock:^NSString *{
  return @"custom-utdid";
}];
[QTConfigure customSetMccBlock:^NSString *{
  return @"custom-mcc";
}];
[QTConfigure customSetMncBlock:^NSString *{
  return @"custom-mnc";
}];

注意:請謹(jǐn)慎決定是否實(shí)現(xiàn)對應(yīng)方法,一旦您選擇自己實(shí)現(xiàn)采集方法,此設(shè)備標(biāo)識的采集工作就由你全權(quán)接管了,SDK不會再試圖采集此設(shè)備標(biāo)識。SDK能采集到的設(shè)備標(biāo)識越少,對統(tǒng)計(jì)數(shù)據(jù)的準(zhǔn)確性和穩(wěn)定性的負(fù)面影響越大。

// 請?jiān)谠O(shè)置收數(shù)域名之前,調(diào)用SDK預(yù)初始化函數(shù)之前,先調(diào)用采集工具類注冊函數(shù)
// 如果不需要對設(shè)備標(biāo)識采集行為做控制,就不需要實(shí)現(xiàn)自定義工具類并注冊它
[QTConfigure customSetIdfvBlock:^NSString *{
    return [[UIDevice currentDevice].identifierForVendor UUIDString];
}];
[QTConfigure setCustomDomain:@"您的收數(shù)域名" standbyDomain:nil];
[QTConfigure initWithAppKey:@"您的appkey" channel:@"App Store"];

SDK支持自定義設(shè)備ID,如果要使用自定義設(shè)備ID需要在初始化前(即init前) 設(shè)置setCustomDeviceId:接口為有效值(非空)。

+ (void)setCustomDeviceId:(NSString *)devID;

使用示例:

[QTConfigure setCustomDeviceId:@"xxxxxx"];

注意:因該功能在未獲取到設(shè)備ID時(shí)生效,如果本地已存在設(shè)備ID,設(shè)置后無效。如果本地已獲取到設(shè)備ID可以通過卸載重裝方式驗(yàn)證此功能。

2.2 賬號ID設(shè)置

1、QT在統(tǒng)計(jì)用戶時(shí)以設(shè)備為標(biāo)準(zhǔn),如果需要統(tǒng)計(jì)應(yīng)用自身的賬號,請使用以下接口:

接口函數(shù):

+ (void)profileSignInWithPUID:(NSString *)puid;

參數(shù):

參數(shù)

類型

描述

備注

puid

NSString

用戶賬號ID

長度小于64字節(jié)

注意:賬號ID設(shè)置后將被存入本地存儲,只有卸載App、清空應(yīng)用數(shù)據(jù)或者調(diào)用下述的登出接口時(shí),賬號ID才會失效,否則每一個(gè)事件都將攜帶賬號ID。

示例代碼:

[QTMobClick profileSignInWithPUID:@"UserID"];

如果不再需要綁定用戶賬號,可以調(diào)用登出接口,調(diào)用后,不再發(fā)送賬號相關(guān)內(nèi)容。

+ (void)profileSignOff;

示例代碼:

[QTMobClick profileSignOff];

2.3 設(shè)備ID獲取

接口函數(shù):

+ (NSString *)umidString;

示例代碼:

NSString *deviceID = [QTConfigure umidString];

3 用戶屬性上傳

1、使用事件編碼固定為"$$_user_profile"的自定義事件上傳,該事件所攜帶的事件屬性會被作為用戶屬性放在用戶表中。

NSDictionary *dict = @{@"sex" : @"girl", @"age" : @"8"};
[QTMobClick event:@"$$_user_profile" attributes:dict];

請注意:用戶屬性上傳一定要在賬號統(tǒng)計(jì)調(diào)用后

4 渠道屬性

4.1 H5鏈接喚起App

  1. 喚起App的URL Scheme中攜帶這些渠道屬性,且屬性key務(wù)必以“utm_”開頭,因?yàn)镾DK識別的關(guān)鍵字為“utm_”。例如:<URL scheme>?utm_channel=gzh

  2. 添加您的 URL Scheme 到項(xiàng)目中,URL Scheme 位于項(xiàng)目設(shè)置 target ->選項(xiàng)卡 Info ->URL Types。填入的scheme。在AppDelegate中調(diào)用函數(shù)[MobClick handleUrl:url]來接收 URL

AppDelegate調(diào)用:

- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
 if ([QTMobClick handleUrl:url]) {
 return YES;
 }

 return YES;
}

SceneDelegate調(diào)用:

- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {

 for (UIOpenURLContext *context in connectionOptions.URLContexts) {
 [QTMobClick handleUrl:context.URL];
 }
}

- (void)scene:(UIScene *)scene openURLContexts:(NSSet<UIOpenURLContext *> *)URLContexts {

 [QTMobClick handleUrl:URLContexts.allObjects.firstObject.URL];
}

PS:如果渠道屬性已經(jīng)與市面上渠道投放公司進(jìn)行了合作,無法使用utm_開頭,可以使用全局屬性API將渠道屬性進(jìn)行埋點(diǎn)上報(bào)(屬性key依然需要以“utm_”開頭)。

4.2 H5鏈接喚起應(yīng)用市場下載并啟動App

該場景下,如果僅是H5鏈接中攜帶“utm_”參數(shù),已經(jīng)無法做到下載App后的啟動事件攜帶“utm_”參數(shù)。所以需要進(jìn)行“H5喚起事件”與“應(yīng)用激活事件”做關(guān)于“IP地址和瀏覽器UserAgent”的模糊匹配。

  1. 當(dāng)用戶在H5中點(diǎn)擊「喚起/下載App」的按鈕時(shí),上報(bào)“應(yīng)用喚起事件($$_app_link)”,在事件中需要攜帶喚起App的appkey和渠道屬性。

//示例
aplus_queue.push({
  action:'aplus.recordAppLink',
  arguments:[{
    targetAppKey: '要喚起的應(yīng)用appKey',  // 必填,要喚起的應(yīng)用appKey
    custom1: 'custom1', // 選填,自定義參數(shù)
    ...
  }]
})
  1. App下載后的第一次啟動事件“應(yīng)用激活事件($$_app_install)”由QT App SDK自動采集上報(bào)。

  2. QuickTracking系統(tǒng)進(jìn)行應(yīng)用喚起事件($$_app_link)和應(yīng)用激活事件($$_app_install)關(guān)于“IP地址和瀏覽器UserAgent”的模糊匹配。您使用時(shí),可以直接在app應(yīng)用中分析“應(yīng)用激活(預(yù)置)”的渠道屬性即可。

4.3 App各應(yīng)用市場活躍數(shù)據(jù)統(tǒng)計(jì)

在初始化函數(shù)中的第二個(gè)入?yún)hannel即為設(shè)置該應(yīng)用的應(yīng)用市場:[QTConfigure initWithAppkey:@"您的appkey" channel:@"App Store"];,在分析中可使用“系統(tǒng)屬性-升級渠道”查看。

5 全局屬性

注冊全局屬性后,后續(xù)觸發(fā)的所有事件都將自動包含這些屬性,并且這些屬性及屬性值存入緩存,APP進(jìn)程結(jié)束后清除。在分析數(shù)據(jù)時(shí),可根據(jù)此屬性進(jìn)行查看和篩選。

5.1 注冊全局屬性

/**
 * 設(shè)置全局屬性 鍵值對 
 * 如果和已經(jīng)存在的全局屬性key重復(fù),則更新已有值
 * 如果和已經(jīng)存在的全局屬性key不一致,則插入新的全局屬性
 */
+(void) registerGlobalProperty:(NSDictionary *)property;

參數(shù)

類型

描述

備注

property

NSDictionary

全局屬性的屬性名稱和屬性值

-

示例:

NSDictionary *firstPropertyDict = @{
     @"a" : @"1",
     @"b" : @"2"
};
[QTMobClick registerGlobalProperty:firstPropertyDict];//當(dāng)前globalproperty為a:1和b:2
    
NSDictionary *secondPropertyDict = @{
     @"b" : @"3",
     @"c" : @"4"
};
[QTMobClick registerGlobalProperty:secondPropertyDict];//當(dāng)前globalproperty為a:1、b:3和c:4

5.2 獲取一個(gè)全局屬性

/**
 * 獲取一個(gè)全局屬性;如果不存在,則返回空。
 */
+(NSString *) getGlobalProperty:(NSString *)propertyName;

參數(shù)

類型

描述

備注

propertyName

NSString

屬性名,只支持大小寫字母、數(shù)字及下劃線!

-

返回值

NSString

-

5.3 刪除一個(gè)全局屬性

刪除一個(gè)特定的全局屬性,刪除后,后續(xù)觸發(fā)的所有事件都不再攜帶該屬性。

/**
 *
 * 刪除指定全局屬性
 @param key
 */
+(void) unregisterGlobalProperty:(NSString *)propertyName;

參數(shù)

類型

描述

備注

propertyName

NSString

屬性名,只支持大小寫字母、數(shù)字及下劃線!

-

5.4 獲取所有全局屬性

/**
 * 獲取所有全局屬性;如果不存在,則返回空。
 */
+(NSDictionary *)getGlobalProperties;

參數(shù)

類型

描述

備注

返回值

NSDictionary

返回的全局屬性值類型為字符型,必須和注冊此全局屬性時(shí)傳入?yún)?shù)類型一致。

-

5.5 清除所有的全局屬性

/**
 * 清空所有全局屬性。
 */
+(void)clearGlobalProperties;

6 頁面瀏覽事件API

SDK提供頁面自動采集和頁面手動采集兩種方式上報(bào)頁面瀏覽事件,兩種方式也可以混用。

6.1 頁面自動采集

頁面自動采集是hook系統(tǒng)viewWillAppear和viewWillDisappear,獲取className 實(shí)現(xiàn)。SDK默認(rèn)不開啟頁面自動采集,如果需要開啟,建議在初始化之前調(diào)用。

接口函數(shù):

+ (void)setAutoPageEnabled:(BOOL)value;

參數(shù)

類型

描述

備注

value

BOOL

是否開啟頁面自動采集

  • YES:開啟

  • NO:關(guān)閉 (默認(rèn)關(guān)閉)

示例代碼:

//設(shè)置為開啟頁面自動采集
[QTMobClick setAutoPageEnabled:YES];

6.1.1 禁止單個(gè)頁面的自動上報(bào)

如果全局設(shè)置了開啟頁面自動采集,可以通過此接口設(shè)置跳過單個(gè)頁面的自動采集。建議在viewWillAppear最開始調(diào)用,如只不統(tǒng)計(jì)當(dāng)前自動頁面采集,可以將pageName參數(shù)設(shè)置成nil。

接口函數(shù):

+ (void)skipMe:(id)PageObject pageName:(NSString *)pageName;

示例:

#import <QTCommon/UMSpmHybrid.h>

- (void)viewWillAppear:(BOOL)animated
{
  
    [super viewWillAppear:animated];

    //不統(tǒng)計(jì)當(dāng)前class自動頁面采集
    [UMSpmHybrid skipMe:[self class] pageName:nil];
}

6.2 頁面手動采集

接口函數(shù):

/** 自動頁面時(shí)長統(tǒng)計(jì), 開始記錄某個(gè)頁面展示時(shí)長.
 使用方法:必須配對調(diào)用beginLogPageView:和endLogPageView:兩個(gè)函數(shù)來完成自動統(tǒng)計(jì),若只調(diào)用某一個(gè)函數(shù)不會生成有效數(shù)據(jù)。
 在該頁面展示時(shí)調(diào)用beginLogPageView:,當(dāng)退出該頁面時(shí)調(diào)用endLogPageView:
 @param pageName 統(tǒng)計(jì)的頁面名稱.
 @return void.
 */
+ (void)beginLogPageView:(NSString *)pageName;

/** 自動頁面時(shí)長統(tǒng)計(jì), 結(jié)束記錄某個(gè)頁面展示時(shí)長.
 使用方法:必須配對調(diào)用beginLogPageView:和endLogPageView:兩個(gè)函數(shù)來完成自動統(tǒng)計(jì),若只調(diào)用某一個(gè)函數(shù)不會生成有效數(shù)據(jù)。
 在該頁面展示時(shí)調(diào)用beginLogPageView:,當(dāng)退出該頁面時(shí)調(diào)用endLogPageView:
 @param pageName 統(tǒng)計(jì)的頁面名稱.
 @return void.
 */
+ (void)endLogPageView:(NSString *)pageName;

參數(shù):

參數(shù)

類型

描述

備注

pageName

NSString

統(tǒng)計(jì)的頁面編碼

beginLogPageView 和 endLogPageView中的值必須一致

注意:

  • 必須配對調(diào)用beginLogPageView:和endLogPageView:兩個(gè)函數(shù)來完成自動統(tǒng)計(jì),若只調(diào)用某一個(gè)函數(shù)不會生成有效數(shù)據(jù);

  • 在該頁面展示時(shí)調(diào)用beginLogPageView:,當(dāng)退出該頁面時(shí)調(diào)用endLogPageView:。

示例代碼:

在ViewController類的viewWillAppear: 和 viewWillDisappear:中配對調(diào)用如下方法:

- (void)viewWillAppear:(BOOL)animated
{
 [super viewWillAppear:animated];
 [QTMobClick beginLogPageView:@"Pagename"]; //("Pagename"為頁面名稱,可自定義)
}

- (void)viewWillDisappear:(BOOL)animated 
{
 [super viewWillDisappear:animated];
 [QTMobClick endLogPageView:@"Pagename"];
}

您也可以根據(jù)您自己的業(yè)務(wù)場景,在viewDidAppear:和viewDidDisappear:等方法中配對調(diào)用beginLogPageView:和endLogPageView:兩個(gè)函數(shù)來完成自動統(tǒng)計(jì)。

6.2.1 頁面屬性設(shè)置

iOS端頁面屬性設(shè)置接口updatePageProperties,支持給當(dāng)前頁面附加自定義屬性。 接口:

/**
 * @brief 更新頁面業(yè)務(wù)參數(shù).
 *
 * @param pageName 頁面名稱,如Page_Detail
 * @param pProperties 業(yè)務(wù)參數(shù),kv對
 *
 * @warning 調(diào)用說明:必須在viewWillDisappear之前調(diào)用
 *
 * 最佳位置:在viewWillDisappear之前調(diào)用即可
 */
+(void) updatePageProperties:(NSString *)pageName properties:(NSDictionary *) pProperties;

參數(shù):

參數(shù)

類型

描述

備注

pageName

NSString

頁面編碼,如Page_Detail

pProperties

NSDictionary

業(yè)務(wù)參數(shù),kv對

請注意:請?jiān)谡{(diào)用beginLogPageView之后設(shè)置頁面屬性。

引入頭文件:

#import <QTCommon/UMSpm.h>

示例:

[UMSpm updatePageProperties:@"page_home" properties: @{@"page_home_key":@"page_home_val"}];

請注意:頁面屬性設(shè)置只支持頁面手動埋點(diǎn)

6.2.2 透傳頁面屬性

此外,QuickTracking SDK還提供透傳頁面屬性埋點(diǎn)接口updateNextPageProperties,支持給下一個(gè)頁面附加自定義屬性。

/**
 * @brief  更新下一個(gè)頁面業(yè)務(wù)參數(shù).
 *
 * @param properties 傳給下一個(gè)頁面業(yè)務(wù)參數(shù),kv對
 *
 * @warning  調(diào)用說明:必須在下一個(gè)頁面pageAppear之前調(diào)用,否則會攜帶錯(cuò)誤
 *
 * 最佳位置:必須在下一個(gè)頁面pageAppear之前調(diào)用
 */
+(void) updateNextPageProperties:(NSDictionary *) properties;

參數(shù):

參數(shù)

類型

描述

備注

properties

NSDictionary

傳給下一個(gè)頁面業(yè)務(wù)參數(shù),kv對

示例:

必須在下一個(gè)頁面beginLogPageView之前調(diào)用。

[UMSpm updateNextPageProperties:@{@"news_next_key":@"news_next_val"}];

請注意:透傳頁面屬性只支持頁面手動埋點(diǎn)

7 事件埋點(diǎn)

自定義事件可以用于追蹤用戶行為,記錄行為發(fā)生的具體細(xì)節(jié)。

7.1 事件埋點(diǎn)

接口:

+ (void)event:(NSString *)eventCode; 

+ (void)event:(NSString *)eventCode attributes:(NSDictionary *)attributes;

+ (void)event:(NSString *)eventId pageName:(NSString *)pageName attributes:(NSDictionary *)attributes;

參數(shù)說明:

參數(shù)

類型

描述

備注

eventCode

NSString

事件編碼

埋點(diǎn)方案中點(diǎn)擊、曝光、自定義事件的事件編碼

attributes

NSDictionary

自定義屬性

-屬性中的key的value不可以是空

-value的類型只能是String、Long、Integer、Float、Double、Short,或數(shù)組(數(shù)組中的元素必須為String)類型。

pageName

NSString

頁面編碼

事件所在頁面,埋點(diǎn)方案中點(diǎn)擊、曝光、自定義事件的所在頁面編碼。

事件上傳數(shù)量限制:

  • 自定義屬性key字符串長度上限:1024

  • 自定義屬性value字符串長度上限:1024*4

  • 自定義屬性map長度(參數(shù)個(gè)數(shù)):100 個(gè)鍵值對

  • 當(dāng)自定義屬性值value為數(shù)組元素時(shí),屬性值的數(shù)組長度上限:100

  • 單條日志報(bào)文的總長度限制:2MB

示例1:

統(tǒng)計(jì)應(yīng)用中”轉(zhuǎn)發(fā)”事件發(fā)生的次數(shù),那么在轉(zhuǎn)發(fā)的函數(shù)里調(diào)用:

[QTMobClick event:@"Forward"];

示例2:

統(tǒng)計(jì)應(yīng)用中“購買”事件發(fā)生的次數(shù),以及購買的商品類型及數(shù)量,那么在購買的函數(shù)里調(diào)用:

NSDictionary *dict = @{@"type" : @"book", @"quantity" : @"3"};
[QTMobClick event:@"purchase" attributes:dict];

示例3:

NSDictionary *dict = @{@"type" : @"book", @"quantity" : @"3"};
[QTMobClick event:@"purchase" pageName:@"ViewController" attributes:dict];

8 全埋點(diǎn)(自動埋點(diǎn))

8.1 全埋點(diǎn)適用范圍

SDK適用于iOS 8.0及以上操作系統(tǒng)。

8.2 全埋點(diǎn)接口說明

8.2.1 自動頁面采集接口

說明

自動采集頁面是hook系統(tǒng)viewWillAppear和viewWillDisappear,獲取className 實(shí)現(xiàn),建議在初始化之前調(diào)用,默認(rèn)是關(guān)閉

/** 設(shè)置是否自動采集頁面, 默認(rèn)NO(不自動采集).
 @param value 設(shè)置為YES, QT SDK 會自動采集頁面信息
 */
+ (void)setAutoPageEnabled:(BOOL)value;

示例:

 [QTMobClick setAutoPageEnabled:YES];
 //設(shè)置域名
 [QTConfigure setCustomDomain:@"您的收數(shù)域名" standbyDomain:nil]; 
 //初始化appkey
 [QTConfigure initWithAppkey:@"您應(yīng)用的appKey" channel:@"App Store"];

關(guān)閉某個(gè)頁面的自動頁面采集

/**
 * @brief                   跳過當(dāng)前頁面統(tǒng)計(jì).
 *
 * @param     PageObject    容器對象(自動獲取頁面時(shí)使用,默認(rèn)手動可填nil)
 * @param     pageName      頁面名稱(手動設(shè)置頁面時(shí)使用,當(dāng)設(shè)置自動獲取頁面時(shí)可填nil)
 * @warning                 建議在設(shè)置頁面之前調(diào)用此接口,調(diào)用后設(shè)置的native頁面將不發(fā)送數(shù)據(jù)
 *                          
 */
+ (void)skipMe:(id)PageObject pageName:(NSString *)pageName;

示例:

[UMSpmHybrid skipMe:self pageName:nil];

8.2.2 開啟控件點(diǎn)擊數(shù)據(jù)全埋點(diǎn)

說明

自動采集事件是:

  • hook系統(tǒng)sendAction:to:from:forEvent:實(shí)現(xiàn)控件執(zhí)行方法監(jiān)測

  • 監(jiān)聽addGestureRecognizer:實(shí)現(xiàn)所有點(diǎn)擊行為

  • hook tableView:didSelectRowAtIndexPath:支持tableView的點(diǎn)擊行為

  • hook collectionView:didSelectItemAtIndexPath: 支持collectionView的點(diǎn)擊行為

建議在初始化之前調(diào)用,默認(rèn)是關(guān)閉

/** 設(shè)置是否自動采集點(diǎn)擊事件, 默認(rèn)NO(不自動采集)
 @param value 設(shè)置為YES, QT SDK 會將自動采集點(diǎn)擊事件
 */
+ (void)setAutoEventEnabled:(BOOL)value;

示例:

 [QTMobClick setAutoEventEnabled:YES];
 //設(shè)置域名
 [QTConfigure setCustomDomain:@"您的收數(shù)域名" standbyDomain:nil]; 
 //初始化appkey
 [QTConfigure initWithAppkey:@"您應(yīng)用的appKey" channel:@"App Store"];

支持的控件:

控件名稱

備注

UITableView

UICollectionView

UIImageView

有加UITapGestureRecognizer行為的才可以

UILabel

有加UITapGestureRecognizer行為的才可以

UIButton

UISwitch

UIStepper

UISegmentedControl

UISlider

UIPageControl

UITabBarItem

UIBarButtonItem

忽略某個(gè)容器的點(diǎn)擊事件

/**
 * @abstract
 * 忽略某一頁面的點(diǎn)擊
 *
 * @param PageObject 對應(yīng)容器
 */
+(void)ignorePageView:(id)PageObject;

例:

// 該方法支持多次調(diào)用,對合集進(jìn)行忽略    
[QTAutoTrack ignorePageView:self];

忽略特定類型控件點(diǎn)擊事件的自動采集

通過 ignoreViewType 方法忽略特定類型控件點(diǎn)擊事件的自動采集。

/**
 * @abstract
 * 忽略某一類型的點(diǎn)擊
 *
 * @param aClass View 對應(yīng)的 Class
 */
+(void)ignoreViewType:(Class)aclass;

示例:

// 該方法支持多次調(diào)用,對合集進(jìn)行忽略    
[QTAutoTrack ignoreViewType:[UIButton class]];    
[QTAutoTrack ignoreViewType:[UISwitch class]];

忽略特定控件點(diǎn)擊事件的自動采集

通過 UMAnalyticsIgnoreView 方法忽略特定控件點(diǎn)擊事件的自動采集。

button.UMAnalyticsIgnoreView=YES;

8.2.3 頁面設(shè)置自定義信息

頁面設(shè)置自定義編碼

通過實(shí)現(xiàn) -(NSString *)getUMPageName 方法,返回一個(gè)自定義編碼

-(NSString *)getUMPageName
{
   return @"testPageCode";
}

頁面設(shè)置自定義屬性

通過實(shí)現(xiàn) -(NSDictionary *)getUMPageProperties 方法,給頁面設(shè)置自定義屬性

-(NSDictionary *)getUMPageProperties
{
   return @{@"key1":@"val1",@"key2":@"val2"};
}

頁面設(shè)置來源(page_referrer)信息

通過實(shí)現(xiàn) -(NSString *) getUMScreenUrl 方法,返回一個(gè)自定義來源信息

- (NSString *)getUMScreenUrl {
    return @"um//um/page";
}

8.2.4 設(shè)置控件點(diǎn)擊事件自定義屬性

通過該方法,可以對特定控件設(shè)置自定義屬性,自定義屬性可以設(shè)置多個(gè)鍵值對,Key和Value都需要是字符串類型。自定義屬性和值會包含在此控件全埋點(diǎn)點(diǎn)擊事件數(shù)據(jù)中。

button.UMAnalyticsViewProperties=@{@"key11":@"val11"};

控件設(shè)置Event Code

通過該方法,可以對特定控件設(shè)置事件編碼

button.UMAnalyticsEventCode=@"abcd123";

9 分享裂變

分享裂變是增長黑客策略的一個(gè)關(guān)鍵概念,它依靠用戶之間的社交聯(lián)系來實(shí)現(xiàn)信息的相互傳遞,從而促進(jìn)新用戶的獲取。

完成分享裂變的SDK功能集成,您將可以使用QuickTracking平臺分享趨勢模型,通過分享回流相關(guān)指標(biāo)衡量營銷活動的拉新效益。

  1. 支持查看TOP分享用戶和不同分享回流層級的分享回流效果指標(biāo)。

  2. 支持回流指標(biāo)靈活組合配置,查看最具裂變拉新能力和分享回流轉(zhuǎn)化能力的TOP用戶,追蹤用戶分享裂變鏈路與分享回流關(guān)系,快速定位關(guān)鍵意見消費(fèi)者。

9.1 獲取來源分享參數(shù)

/*
 * 來源分享參數(shù)獲取 API
 * return @{ @"$$_ref_share_id": @"xxxxx", @"$$_ref_share_url": @"xxxxx"}
 **/

+(nullable NSDictionary *)getRefShareParams;

版本要求

iOS sdk 在v1.5.0.PX 版本及以上

功能

當(dāng)被分享人打開app時(shí),用于獲取來源分享id 和來源分享 url 的 API

請求參數(shù)

返回參數(shù)

默認(rèn)返回空字典{},如果有值時(shí)返回如下:

參數(shù)

類型

默認(rèn)值

含義

備注

$$_ref_share_url

String

""

不包含分享 id 的來源分享 url

$$_ref_share_id

String

""

來源分享 id

調(diào)用示例

-(void)onShare {
    __weak typeof(self) weakSelf = self;
    NSDictionary* refShareParams = [QTMobClick getRefShareParams];
    NSString* $$_ref_share_id = [refShareParams objectForKey:@"$sid"];
    
    [QTMobClick requestShareParams:@"https://www.lydaas.com/?utm_source=share" params:@{
        @"title": @"這是一個(gè)分享標(biāo)題",
        @"campaign":@"這是一個(gè)分享活動",
        @"shareId": $$_ref_share_id
    } timeout:0 shareResultHandler:^(id  _Nullable result, NSError * _Nullable error) {
        NSLog(@"result === %@", result);
        if (error) {
            NSLog(@"error === %@", error);
        }
        __block NSString *shareId = [(NSDictionary*)result objectForKey:@"$sid"];
        
        NSDictionary *dict = @{
            @"$$_share_id": shareId,
            @"$$_share_url" : @"https://www.lydaas.com/?utm_source=share",
            @"$$_share_title" : @"分享活動A",
            @"$$_share_campaign_id" : @"這是一個(gè)自定義分享活動",
            @"$$_share_type" : @"用戶自定義分享平臺"
        };
        [QTMobClick event:@"$$_share" attributes:dict];
        dispatch_async(dispatch_get_main_queue(), ^{
            UIAlertController *alertController = [UIAlertController 
                alertControllerWithTitle:@"分享參數(shù)" message:[NSString 
                stringWithFormat:@"請求分享參數(shù)結(jié)果如下:\n\n {\n $sid:%@ \n} \n", shareId] 
                preferredStyle:UIAlertControllerStyleAlert];
            // 創(chuàng)建UIAlertAction
            UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"知道了" 
                style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
                // 點(diǎn)擊確定按鈕后的處理
                NSLog(@"用戶已復(fù)制");
                UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
                pasteboard.string = shareId;
            }];
            [alertController addAction:confirmAction];
            [weakSelf presentViewController:alertController animated:YES completion:nil];
        });
    }];
}

9.2 請求分享參數(shù)

#import <QTCommon/MobClick.h>

/*
 * 分享參數(shù)獲取API
 * @param url, 分享頁面的url,必須傳入
 * @param params 可能的分享參數(shù),可以為null
 * {
 *   @"title": 分享標(biāo)題, //可為null,最大長度 4*1024
 *   @"shareId": 來源分享Id, //可為 null
 *   @"campaign": 分享活動, //可為 null,最大長度 4*1024
 *   ... 待擴(kuò)展
 * }
 * @param timeout 請求超時(shí)時(shí)間,單位秒,有效值范圍:0~10(包含0和10),如果傳入0,則使用sdk內(nèi)部默認(rèn)值3秒
 * @param shareResultHandler 結(jié)果回調(diào)對象,必須傳入,不能為null
 */

+(void)requestShareParams:(nonnull NSString *)url
                   params:(nonnull NSDictionary *)params
                  timeout:(int)timeout
       shareResultHandler:(nonnull QTShareResultHandler)shareResultHandler;

版本要求

iOS sdk 在v1.5.0.PX 版本及以上

功能

請求用于構(gòu)建分享鏈需要的分享id

請求參數(shù)

參數(shù)

類型

默認(rèn)值

含義

備注

url

NSString

nil

分享頁面的 url

必須傳入,不能為 nil

params

NSDictionary

nil

分享參數(shù)獲取 API 請求參數(shù)

  • 可選參數(shù)

campaign:分享活動標(biāo)識。String 類型,默認(rèn)值為 "",最大長度為 4*1024 個(gè)字符

title:分享標(biāo)題。String類型,默認(rèn)值為 "",最大長度為 4*1024個(gè)長度

shareId:來源分享Id。String 類型,默認(rèn)值為""

timeout

int

0

接口超時(shí)時(shí)間

取值范圍1~10,單位為秒。 sdk 默認(rèn)超時(shí)時(shí)間為3秒

shareResultHandler

QTShareResultHandler

nil

結(jié)果回調(diào)對象

必須傳入,不能為 nil

注:此結(jié)果回調(diào)上下文為SDK內(nèi)部網(wǎng)絡(luò)請求后臺工作線程,如果需要在回調(diào)方法中操作UI控件,請通過UI線程Handler執(zhí)行相關(guān)操作

返回參數(shù)

參數(shù)

類型

默認(rèn)值

含義

備注

result

NSDictionary

nil

分享參數(shù) API 請求結(jié)果

包含一個(gè)屬性

$sid, NSString 類型, 分享id

error

NSError

nil

分享參數(shù) API 請求報(bào)錯(cuò)

調(diào)用示例

-(void)onShare {
  __weak typeof(self) * weakSelf = self;
 	[QTMobClick requestShareParams:@"https://www.lydaas.com/?utm_source=share" 
   	params:@{
     @"title": @"這是一個(gè)分享標(biāo)題",
     @"campaign":@"這是一個(gè)分享活動",
     @"shareId": @"這是一個(gè)分享 id"
     } 
   timeout:0 
   shareResultHandler:^(id  _Nullable result, NSError * _Nullable error) {
     NSLog(@"result === %@", result);
     if (error) {
       NSLog(@"error === %@", error);
     }
     __block NSString *shareId = [(NSDictionary*)result objectForKey:@"$sid"]; 
     NSDictionary *dict = @{
       @"$$_share_id": shareId, 
       @"$$_share_url" : @"https://www.lydaas.com/?utm_source=share",
       @"$$_share_title" : @"分享活動A",
       @"$$_share_campaign_id" : @"這是一個(gè)自定義分享活動",
       @"$$_share_type" : @"用戶自定義分享平臺"
     };
     [QTMobClick event:@"$$_share" attributes:dict];
     dispatch_async(dispatch_get_main_queue(), ^{
       UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"分享參數(shù)"
                                             message:[NSString stringWithFormat:
                                             @"請求分享參數(shù)結(jié)果如下:\n\n {\n $sid:%@ \n} \n", shareId] 
                                             preferredStyle:UIAlertControllerStyleAlert];
       // 創(chuàng)建UIAlertAction
       UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"知道了"
                                       style:UIAlertActionStyleDefault
                                       handler:^(UIAlertAction * _Nonnull action) {
                                         // 點(diǎn)擊確定按鈕后的處理
                                         NSLog(@"用戶已復(fù)制");
                                         UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
                                         pasteboard.string = shareId;                                                     
                                       }];
       [alertController addAction:confirmAction];
       [weakSelf presentViewController:alertController animated:YES completion:nil];
     });
   }];
}

9.3 上報(bào)分享事件

通過預(yù)置事件編碼 $$_share 上報(bào)分享事件

示例:

[QTMobClick requestShareParams:@"https://www.lydaas.com/?utm_source=share"
                        params:@{
    @"title": @"這是一個(gè)分享標(biāo)題",
    @"campaign":@"這是一個(gè)分享活動",
    @"shareId": @"這是一個(gè)分享 id"
}
                        timeout:0
            shareResultHandler:^(id  _Nullable result, NSError * _Nullable error) {
    NSLog(@"result === %@", result);
    if (error) {
        NSLog(@"error === %@", error);
    }
    __block NSString *shareId = [(NSDictionary*)result objectForKey:@"$sid"];
    NSDictionary *dict = @{
        @"$$_share_id": shareId,
        @"$$_share_url" : @"https://www.lydaas.com/?utm_source=share",
        @"$$_share_title" : @"分享活動A",
        @"$$_share_campaign_id" : @"這是一個(gè)自定義分享活動",
        @"$$_share_type" : @"用戶自定義分享平臺"
    };
    [QTMobClick event:@"$$_share" attributes:dict];   
}];

請注意:喚起的鏈接需要攜帶key為"$sid",value為分享Id的參數(shù),如:https://example.aliyun.com/path/to/content?$sid=123456"