1 如何查看埋點方案
在進行埋點前,需要確定在哪里埋點、埋哪些點等,即需要梳理清楚明確的埋點需求。在QuickTracking平臺中將明確的埋點需求稱為埋點方案,并為埋點方案設計了規范模板。如下:
在埋點方案中,明確的所需埋點內容有:
1、事件主體:指“誰”觸發了這個事件,分為設備ID和賬號ID,上報的事件務必具備其中之一。
設備ID:Android設備和iOS設備的默認設備ID為應用級別唯一的設備ID,由Quicktracking自動生成:
Android9及以下設備:SDK自動采集imei、wifimac、androidid、SN生成設備ID,生成后存入本地,只有卸載應用或者刪除應用數據才會重新生成設備ID。
Android10級以上設備:SDK自動采集oaid、gaid、androidid、SN生成設備ID,生成后存入本地,只有卸載應用或者刪除應用數據才會重新生成設備ID。
iOS設備:SDK自動采集openudid生成設備ID,生成后放入keychain中,只有恢復出廠設置或者刪除應用數據才會重新生成設備ID。
使用應用的C端用戶同意采集idfa和oaid,QuickTracking SDK才會采集,只有QuickTracking app SDK可以采集到oaid、gaid、imei、wifimac、androidid、SN、idfa、idfv。
賬號ID:客戶端用戶登錄后賬號標識,當一個用戶在不同的設備進行登錄時,設備ID會發生變化,但是賬號ID不會發生變化。例如一個用戶使用手機和pad分別登錄。
2、用戶屬性:針對賬號ID的屬性,例如賬號ID為“testdemo@111”的用戶,“生日”為“1999-02-13”,“會員等級”為“鉑金”等。“生日”和“會員”等級就為用戶屬性。
3、渠道屬性:廣告投放的屬性,例如投放渠道、投放方式、投放內容等。
4、全局屬性:在全局設置一次后,每一個事件都會攜帶的屬性
5、頁面瀏覽事件:頁面加載時上報的事件(埋點方案中頁面編碼和事件編碼相等的事件,也是標記為藍色的事件)
6、點擊、曝光、自定義事件:客戶端用戶與客戶端發生任意交互時上報的事件。
2 設置設備ID&賬號ID
2.1 設備ID設置
SDK 內部默認會采集如下參數。
設備標識或設備信息 | 采集方法 | 備注 |
idfa | [ASIdentifierManager advertisingIdentifier].UUIDString | 蘋果廣告標識 |
idfv | [[UIDevice currentDevice].identifierForVendor UUIDString] | 應用級標識 |
openudid | [UIPasteboardpasteboardWithName:slotPBid create:NO] | openUdid(三方) |
淘寶utdid | [UTDevice utdid] | 若您集成了淘寶utdid SDK,QuickTracking才會采集 |
mcc | [UMUtils mccString] | 移動信號國家碼 |
mnc | [UMUtils mncString] | 移動網絡號碼 |
如果開發者希望針對上表中的某幾個設備標識符采集行為做控制,如:不采集或自行實現采集方法。可以實現對應block回調,如下示例:
[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";
}];
注意:請謹慎決定是否實現對應方法,一旦您選擇自己實現采集方法,此設備標識的采集工作就由你全權接管了,SDK不會再試圖采集此設備標識。SDK能采集到的設備標識越少,對統計數據的準確性和穩定性的負面影響越大。
// 請在設置收數域名之前,調用SDK預初始化函數之前,先調用采集工具類注冊函數
// 如果不需要對設備標識采集行為做控制,就不需要實現自定義工具類并注冊它
[QTConfigure customSetIdfvBlock:^NSString *{
return [[UIDevice currentDevice].identifierForVendor UUIDString];
}];
[QTConfigure setCustomDomain:@"您的收數域名" standbyDomain:nil];
[QTConfigure initWithAppKey:@"您的appkey" channel:@"App Store"];
SDK支持自定義設備ID,如果要使用自定義設備ID需要在初始化前(即init前) 設置setCustomDeviceId:接口為有效值(非空)。
+ (void)setCustomDeviceId:(NSString *)devID;
使用示例:
[QTConfigure setCustomDeviceId:@"xxxxxx"];
注意:因該功能在未獲取到設備ID時生效,如果本地已存在設備ID,設置后無效。如果本地已獲取到設備ID可以通過卸載重裝方式驗證此功能。
2.2 賬號ID設置
1、QT在統計用戶時以設備為標準,如果需要統計應用自身的賬號,請使用以下接口:
接口函數:
+ (void)profileSignInWithPUID:(NSString *)puid;
參數:
參數 | 類型 | 描述 | 備注 |
puid | NSString | 用戶賬號ID | 長度小于64字節 |
注意:賬號ID設置后將被存入本地存儲,只有卸載App、清空應用數據或者調用下述的登出接口時,賬號ID才會失效,否則每一個事件都將攜帶賬號ID。
示例代碼:
[QTMobClick profileSignInWithPUID:@"UserID"];
如果不再需要綁定用戶賬號,可以調用登出接口,調用后,不再發送賬號相關內容。
+ (void)profileSignOff;
示例代碼:
[QTMobClick profileSignOff];
2.3 設備ID獲取
接口函數:
+ (NSString *)umidString;
示例代碼:
NSString *deviceID = [QTConfigure umidString];
3 用戶屬性上傳
1、使用事件編碼固定為"$$_user_profile"的自定義事件上傳,該事件所攜帶的事件屬性會被作為用戶屬性放在用戶表中。
NSDictionary *dict = @{@"sex" : @"girl", @"age" : @"8"};
[QTMobClick event:@"$$_user_profile" attributes:dict];
請注意:用戶屬性上傳一定要在賬號統計調用后
4 渠道屬性
4.1 H5鏈接喚起App
喚起App的URL Scheme中攜帶這些渠道屬性,且屬性key務必以“utm_”開頭,因為SDK識別的關鍵字為“utm_”。例如:<URL scheme>?utm_channel=gzh
添加您的 URL Scheme 到項目中,URL Scheme 位于項目設置 target ->選項卡 Info ->URL Types。填入的scheme。在AppDelegate中調用函數[MobClick handleUrl:url]來接收 URL
AppDelegate調用:
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
if ([QTMobClick handleUrl:url]) {
return YES;
}
return YES;
}
SceneDelegate調用:
- (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:如果渠道屬性已經與市面上渠道投放公司進行了合作,無法使用utm_開頭,可以使用全局屬性API將渠道屬性進行埋點上報(屬性key依然需要以“utm_”開頭)。
4.2 H5鏈接喚起應用市場下載并啟動App
該場景下,如果僅是H5鏈接中攜帶“utm_”參數,已經無法做到下載App后的啟動事件攜帶“utm_”參數。所以需要進行“H5喚起事件”與“應用激活事件”做關于“IP地址和瀏覽器UserAgent”的模糊匹配。
當用戶在H5中點擊「喚起/下載App」的按鈕時,上報“應用喚起事件($$_app_link)”,在事件中需要攜帶喚起App的appkey和渠道屬性。
//示例
aplus_queue.push({
action:'aplus.recordAppLink',
arguments:[{
targetAppKey: '要喚起的應用appKey', // 必填,要喚起的應用appKey
custom1: 'custom1', // 選填,自定義參數
...
}]
})
App下載后的第一次啟動事件“應用激活事件($$_app_install)”由QT App SDK自動采集上報。
QuickTracking系統進行應用喚起事件($$_app_link)和應用激活事件($$_app_install)關于“IP地址和瀏覽器UserAgent”的模糊匹配。您使用時,可以直接在app應用中分析“應用激活(預置)”的渠道屬性即可。
4.3 App各應用市場活躍數據統計
在初始化函數中的第二個入參Channel即為設置該應用的應用市場:[QTConfigure initWithAppkey:@"您的appkey" channel:@"App Store"];
,在分析中可使用“系統屬性-升級渠道”查看。
5 全局屬性
注冊全局屬性后,后續觸發的所有事件都將自動包含這些屬性,并且這些屬性及屬性值存入緩存,APP進程結束后清除。在分析數據時,可根據此屬性進行查看和篩選。
5.1 注冊全局屬性
/**
* 設置全局屬性 鍵值對
* 如果和已經存在的全局屬性key重復,則更新已有值
* 如果和已經存在的全局屬性key不一致,則插入新的全局屬性
*/
+(void) registerGlobalProperty:(NSDictionary *)property;
參數 | 類型 | 描述 | 備注 |
property | NSDictionary | 全局屬性的屬性名稱和屬性值 | - |
示例:
NSDictionary *firstPropertyDict = @{
@"a" : @"1",
@"b" : @"2"
};
[QTMobClick registerGlobalProperty:firstPropertyDict];//當前globalproperty為a:1和b:2
NSDictionary *secondPropertyDict = @{
@"b" : @"3",
@"c" : @"4"
};
[QTMobClick registerGlobalProperty:secondPropertyDict];//當前globalproperty為a:1、b:3和c:4
5.2 獲取一個全局屬性
/**
* 獲取一個全局屬性;如果不存在,則返回空。
*/
+(NSString *) getGlobalProperty:(NSString *)propertyName;
參數 | 類型 | 描述 | 備注 |
propertyName | NSString | 屬性名,只支持大小寫字母、數字及下劃線! | - |
返回值 | NSString | - |
5.3 刪除一個全局屬性
刪除一個特定的全局屬性,刪除后,后續觸發的所有事件都不再攜帶該屬性。
/**
*
* 刪除指定全局屬性
@param key
*/
+(void) unregisterGlobalProperty:(NSString *)propertyName;
參數 | 類型 | 描述 | 備注 |
propertyName | NSString | 屬性名,只支持大小寫字母、數字及下劃線! | - |
5.4 獲取所有全局屬性
/**
* 獲取所有全局屬性;如果不存在,則返回空。
*/
+(NSDictionary *)getGlobalProperties;
參數 | 類型 | 描述 | 備注 |
返回值 | NSDictionary | 返回的全局屬性值類型為字符型,必須和注冊此全局屬性時傳入參數類型一致。 | - |
5.5 清除所有的全局屬性
/**
* 清空所有全局屬性。
*/
+(void)clearGlobalProperties;
6 頁面瀏覽事件API
SDK提供頁面自動采集和頁面手動采集兩種方式上報頁面瀏覽事件,兩種方式也可以混用。
6.1 頁面自動采集
頁面自動采集是hook系統viewWillAppear和viewWillDisappear,獲取className 實現。SDK默認不開啟頁面自動采集,如果需要開啟,建議在初始化之前調用。
接口函數:
+ (void)setAutoPageEnabled:(BOOL)value;
參數 | 類型 | 描述 | 備注 |
value | BOOL | 是否開啟頁面自動采集 |
|
示例代碼:
//設置為開啟頁面自動采集
[QTMobClick setAutoPageEnabled:YES];
6.1.1 禁止單個頁面的自動上報
如果全局設置了開啟頁面自動采集,可以通過此接口設置跳過單個頁面的自動采集。建議在viewWillAppear最開始調用,如只不統計當前自動頁面采集,可以將pageName參數設置成nil。
接口函數:
+ (void)skipMe:(id)PageObject pageName:(NSString *)pageName;
示例:
#import <QTCommon/UMSpmHybrid.h>
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//不統計當前class自動頁面采集
[UMSpmHybrid skipMe:[self class] pageName:nil];
}
6.2 頁面手動采集
接口函數:
/** 自動頁面時長統計, 開始記錄某個頁面展示時長.
使用方法:必須配對調用beginLogPageView:和endLogPageView:兩個函數來完成自動統計,若只調用某一個函數不會生成有效數據。
在該頁面展示時調用beginLogPageView:,當退出該頁面時調用endLogPageView:
@param pageName 統計的頁面名稱.
@return void.
*/
+ (void)beginLogPageView:(NSString *)pageName;
/** 自動頁面時長統計, 結束記錄某個頁面展示時長.
使用方法:必須配對調用beginLogPageView:和endLogPageView:兩個函數來完成自動統計,若只調用某一個函數不會生成有效數據。
在該頁面展示時調用beginLogPageView:,當退出該頁面時調用endLogPageView:
@param pageName 統計的頁面名稱.
@return void.
*/
+ (void)endLogPageView:(NSString *)pageName;
參數:
參數 | 類型 | 描述 | 備注 |
pageName | NSString | 統計的頁面編碼 | beginLogPageView 和 endLogPageView中的值必須一致 |
注意:
必須配對調用beginLogPageView:和endLogPageView:兩個函數來完成自動統計,若只調用某一個函數不會生成有效數據;
在該頁面展示時調用beginLogPageView:,當退出該頁面時調用endLogPageView:。
示例代碼:
在ViewController類的viewWillAppear: 和 viewWillDisappear:中配對調用如下方法:
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
[QTMobClick beginLogPageView:@"Pagename"]; //("Pagename"為頁面名稱,可自定義)
}
- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
[QTMobClick endLogPageView:@"Pagename"];
}
您也可以根據您自己的業務場景,在viewDidAppear:和viewDidDisappear:等方法中配對調用beginLogPageView:和endLogPageView:兩個函數來完成自動統計。
6.2.1 頁面屬性設置
iOS端頁面屬性設置接口updatePageProperties,支持給當前頁面附加自定義屬性。 接口:
/**
* @brief 更新頁面業務參數.
*
* @param pageName 頁面名稱,如Page_Detail
* @param pProperties 業務參數,kv對
*
* @warning 調用說明:必須在viewWillDisappear之前調用
*
* 最佳位置:在viewWillDisappear之前調用即可
*/
+(void) updatePageProperties:(NSString *)pageName properties:(NSDictionary *) pProperties;
參數:
參數 | 類型 | 描述 | 備注 |
pageName | NSString | 頁面編碼,如Page_Detail | |
pProperties | NSDictionary | 業務參數,kv對 |
請注意:請在調用beginLogPageView之后設置頁面屬性。
引入頭文件:
#import <QTCommon/UMSpm.h>
示例:
[UMSpm updatePageProperties:@"page_home" properties: @{@"page_home_key":@"page_home_val"}];
請注意:頁面屬性設置只支持頁面手動埋點
6.2.2 透傳頁面屬性
此外,QuickTracking SDK還提供透傳頁面屬性埋點接口updateNextPageProperties,支持給下一個頁面附加自定義屬性。
/**
* @brief 更新下一個頁面業務參數.
*
* @param properties 傳給下一個頁面業務參數,kv對
*
* @warning 調用說明:必須在下一個頁面pageAppear之前調用,否則會攜帶錯誤
*
* 最佳位置:必須在下一個頁面pageAppear之前調用
*/
+(void) updateNextPageProperties:(NSDictionary *) properties;
參數:
參數 | 類型 | 描述 | 備注 |
properties | NSDictionary | 傳給下一個頁面業務參數,kv對 |
示例:
必須在下一個頁面beginLogPageView之前調用。
[UMSpm updateNextPageProperties:@{@"news_next_key":@"news_next_val"}];
請注意:透傳頁面屬性只支持頁面手動埋點
7 事件埋點
自定義事件可以用于追蹤用戶行為,記錄行為發生的具體細節。
7.1 事件埋點
接口:
+ (void)event:(NSString *)eventCode;
+ (void)event:(NSString *)eventCode attributes:(NSDictionary *)attributes;
+ (void)event:(NSString *)eventId pageName:(NSString *)pageName attributes:(NSDictionary *)attributes;
參數說明:
參數 | 類型 | 描述 | 備注 |
eventCode | NSString | 事件編碼 | 埋點方案中點擊、曝光、自定義事件的事件編碼 |
attributes | NSDictionary | 自定義屬性 | -屬性中的key的value不可以是空 -value的類型只能是String、Long、Integer、Float、Double、Short,或數組(數組中的元素必須為String)類型。 |
pageName | NSString | 頁面編碼 | 事件所在頁面,埋點方案中點擊、曝光、自定義事件的所在頁面編碼。 |
事件上傳數量限制:
自定義屬性key字符串長度上限:1024
自定義屬性value字符串長度上限:1024*4
自定義屬性map長度(參數個數):100 個鍵值對
當自定義屬性值value為數組元素時,屬性值的數組長度上限:100
單條日志報文的總長度限制:2MB
示例1:
統計應用中”轉發”事件發生的次數,那么在轉發的函數里調用:
[QTMobClick event:@"Forward"];
示例2:
統計應用中“購買”事件發生的次數,以及購買的商品類型及數量,那么在購買的函數里調用:
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 全埋點(自動埋點)
8.1 全埋點適用范圍
SDK適用于iOS 8.0及以上操作系統。
8.2 全埋點接口說明
8.2.1 自動頁面采集接口
自動采集頁面是hook系統viewWillAppear和viewWillDisappear,獲取className 實現,建議在初始化之前調用,默認是關閉
/** 設置是否自動采集頁面, 默認NO(不自動采集).
@param value 設置為YES, QT SDK 會自動采集頁面信息
*/
+ (void)setAutoPageEnabled:(BOOL)value;
示例:
[QTMobClick setAutoPageEnabled:YES];
//設置域名
[QTConfigure setCustomDomain:@"您的收數域名" standbyDomain:nil];
//初始化appkey
[QTConfigure initWithAppkey:@"您應用的appKey" channel:@"App Store"];
關閉某個頁面的自動頁面采集
/**
* @brief 跳過當前頁面統計.
*
* @param PageObject 容器對象(自動獲取頁面時使用,默認手動可填nil)
* @param pageName 頁面名稱(手動設置頁面時使用,當設置自動獲取頁面時可填nil)
* @warning 建議在設置頁面之前調用此接口,調用后設置的native頁面將不發送數據
*
*/
+ (void)skipMe:(id)PageObject pageName:(NSString *)pageName;
示例:
[UMSpmHybrid skipMe:self pageName:nil];
8.2.2 開啟控件點擊數據全埋點
自動采集事件是:
hook系統sendAction:to:from:forEvent:實現控件執行方法監測
監聽addGestureRecognizer:實現所有點擊行為
hook tableView:didSelectRowAtIndexPath:支持tableView的點擊行為
hook collectionView:didSelectItemAtIndexPath: 支持collectionView的點擊行為
建議在初始化之前調用,默認是關閉
/** 設置是否自動采集點擊事件, 默認NO(不自動采集)
@param value 設置為YES, QT SDK 會將自動采集點擊事件
*/
+ (void)setAutoEventEnabled:(BOOL)value;
示例:
[QTMobClick setAutoEventEnabled:YES];
//設置域名
[QTConfigure setCustomDomain:@"您的收數域名" standbyDomain:nil];
//初始化appkey
[QTConfigure initWithAppkey:@"您應用的appKey" channel:@"App Store"];
支持的控件:
控件名稱 | 備注 |
UITableView | |
UICollectionView | |
UIImageView | 有加UITapGestureRecognizer行為的才可以 |
UILabel | 有加UITapGestureRecognizer行為的才可以 |
UIButton | |
UISwitch | |
UIStepper | |
UISegmentedControl | |
UISlider | |
UIPageControl | |
UITabBarItem | |
UIBarButtonItem |
忽略某個容器的點擊事件
/**
* @abstract
* 忽略某一頁面的點擊
*
* @param PageObject 對應容器
*/
+(void)ignorePageView:(id)PageObject;
例:
// 該方法支持多次調用,對合集進行忽略
[QTAutoTrack ignorePageView:self];
忽略特定類型控件點擊事件的自動采集
通過 ignoreViewType 方法忽略特定類型控件點擊事件的自動采集。
/**
* @abstract
* 忽略某一類型的點擊
*
* @param aClass View 對應的 Class
*/
+(void)ignoreViewType:(Class)aclass;
示例:
// 該方法支持多次調用,對合集進行忽略
[QTAutoTrack ignoreViewType:[UIButton class]];
[QTAutoTrack ignoreViewType:[UISwitch class]];
忽略特定控件點擊事件的自動采集
通過 UMAnalyticsIgnoreView 方法忽略特定控件點擊事件的自動采集。
button.UMAnalyticsIgnoreView=YES;
8.2.3 頁面設置自定義信息
頁面設置自定義編碼
通過實現 -(NSString *)getUMPageName 方法,返回一個自定義編碼
-(NSString *)getUMPageName
{
return @"testPageCode";
}
頁面設置自定義屬性
通過實現 -(NSDictionary *)getUMPageProperties 方法,給頁面設置自定義屬性
-(NSDictionary *)getUMPageProperties
{
return @{@"key1":@"val1",@"key2":@"val2"};
}
頁面設置來源(page_referrer)信息
通過實現 -(NSString *) getUMScreenUrl 方法,返回一個自定義來源信息
- (NSString *)getUMScreenUrl {
return @"um//um/page";
}
8.2.4 設置控件點擊事件自定義屬性
通過該方法,可以對特定控件設置自定義屬性,自定義屬性可以設置多個鍵值對,Key和Value都需要是字符串類型。自定義屬性和值會包含在此控件全埋點點擊事件數據中。
button.UMAnalyticsViewProperties=@{@"key11":@"val11"};
控件設置Event Code
通過該方法,可以對特定控件設置事件編碼
button.UMAnalyticsEventCode=@"abcd123";
9 分享裂變
分享裂變是增長黑客策略的一個關鍵概念,它依靠用戶之間的社交聯系來實現信息的相互傳遞,從而促進新用戶的獲取。
完成分享裂變的SDK功能集成,您將可以使用QuickTracking平臺分享趨勢模型,通過分享回流相關指標衡量營銷活動的拉新效益。
支持查看TOP分享用戶和不同分享回流層級的分享回流效果指標。
支持回流指標靈活組合配置,查看最具裂變拉新能力和分享回流轉化能力的TOP用戶,追蹤用戶分享裂變鏈路與分享回流關系,快速定位關鍵意見消費者。
9.1 獲取來源分享參數
/*
* 來源分享參數獲取 API
* return @{ @"$$_ref_share_id": @"xxxxx", @"$$_ref_share_url": @"xxxxx"}
**/
+(nullable NSDictionary *)getRefShareParams;
版本要求
iOS sdk 在v1.5.0.PX 版本及以上
功能
當被分享人打開app時,用于獲取來源分享id 和來源分享 url 的 API
請求參數
無
返回參數
默認返回空字典{},如果有值時返回如下:
參數 | 類型 | 默認值 | 含義 | 備注 |
$$_ref_share_url | String | "" | 不包含分享 id 的來源分享 url | 無 |
$$_ref_share_id | String | "" | 來源分享 id | 無 |
調用示例
-(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": @"這是一個分享標題",
@"campaign":@"這是一個分享活動",
@"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" : @"這是一個自定義分享活動",
@"$$_share_type" : @"用戶自定義分享平臺"
};
[QTMobClick event:@"$$_share" attributes:dict];
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alertController = [UIAlertController
alertControllerWithTitle:@"分享參數" message:[NSString
stringWithFormat:@"請求分享參數結果如下:\n\n {\n $sid:%@ \n} \n", shareId]
preferredStyle:UIAlertControllerStyleAlert];
// 創建UIAlertAction
UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"知道了"
style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {
// 點擊確定按鈕后的處理
NSLog(@"用戶已復制");
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = shareId;
}];
[alertController addAction:confirmAction];
[weakSelf presentViewController:alertController animated:YES completion:nil];
});
}];
}
9.2 請求分享參數
#import <QTCommon/MobClick.h>
/*
* 分享參數獲取API
* @param url, 分享頁面的url,必須傳入
* @param params 可能的分享參數,可以為null
* {
* @"title": 分享標題, //可為null,最大長度 4*1024
* @"shareId": 來源分享Id, //可為 null
* @"campaign": 分享活動, //可為 null,最大長度 4*1024
* ... 待擴展
* }
* @param timeout 請求超時時間,單位秒,有效值范圍:0~10(包含0和10),如果傳入0,則使用sdk內部默認值3秒
* @param shareResultHandler 結果回調對象,必須傳入,不能為null
*/
+(void)requestShareParams:(nonnull NSString *)url
params:(nonnull NSDictionary *)params
timeout:(int)timeout
shareResultHandler:(nonnull QTShareResultHandler)shareResultHandler;
版本要求
iOS sdk 在v1.5.0.PX 版本及以上
功能
請求用于構建分享鏈需要的分享id
請求參數
參數 | 類型 | 默認值 | 含義 | 備注 |
url | NSString | nil | 分享頁面的 url | 必須傳入,不能為 nil |
params | NSDictionary | nil | 分享參數獲取 API 請求參數 |
campaign:分享活動標識。String 類型,默認值為 "",最大長度為 4*1024 個字符 title:分享標題。String類型,默認值為 "",最大長度為 4*1024個長度 shareId:來源分享Id。String 類型,默認值為"" |
timeout | int | 0 | 接口超時時間 | 取值范圍1~10,單位為秒。 sdk 默認超時時間為3秒 |
shareResultHandler | QTShareResultHandler | nil | 結果回調對象 | 必須傳入,不能為 nil 注:此結果回調上下文為SDK內部網絡請求后臺工作線程,如果需要在回調方法中操作UI控件,請通過UI線程Handler執行相關操作。 |
返回參數
參數 | 類型 | 默認值 | 含義 | 備注 |
result | NSDictionary | nil | 分享參數 API 請求結果 | 包含一個屬性 $sid, NSString 類型, 分享id |
error | NSError | nil | 分享參數 API 請求報錯 | 無 |
調用示例
-(void)onShare {
__weak typeof(self) * weakSelf = self;
[QTMobClick requestShareParams:@"https://www.lydaas.com/?utm_source=share"
params:@{
@"title": @"這是一個分享標題",
@"campaign":@"這是一個分享活動",
@"shareId": @"這是一個分享 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" : @"這是一個自定義分享活動",
@"$$_share_type" : @"用戶自定義分享平臺"
};
[QTMobClick event:@"$$_share" attributes:dict];
dispatch_async(dispatch_get_main_queue(), ^{
UIAlertController *alertController = [UIAlertController alertControllerWithTitle:@"分享參數"
message:[NSString stringWithFormat:
@"請求分享參數結果如下:\n\n {\n $sid:%@ \n} \n", shareId]
preferredStyle:UIAlertControllerStyleAlert];
// 創建UIAlertAction
UIAlertAction *confirmAction = [UIAlertAction actionWithTitle:@"知道了"
style:UIAlertActionStyleDefault
handler:^(UIAlertAction * _Nonnull action) {
// 點擊確定按鈕后的處理
NSLog(@"用戶已復制");
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
pasteboard.string = shareId;
}];
[alertController addAction:confirmAction];
[weakSelf presentViewController:alertController animated:YES completion:nil];
});
}];
}
9.3 上報分享事件
通過預置事件編碼 $$_share 上報分享事件
示例:
[QTMobClick requestShareParams:@"https://www.lydaas.com/?utm_source=share"
params:@{
@"title": @"這是一個分享標題",
@"campaign":@"這是一個分享活動",
@"shareId": @"這是一個分享 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" : @"這是一個自定義分享活動",
@"$$_share_type" : @"用戶自定義分享平臺"
};
[QTMobClick event:@"$$_share" attributes:dict];
}];
請注意:喚起的鏈接需要攜帶key為"$sid",value為分享Id的參數,如:https://example.aliyun.com/path/to/content?$sid=123456"