全埋點功能
環(huán)境準備
qt_common_sdk: ^2.1.0
|---依賴原生iOS 1.5.8.PX 版本
|---依賴原生 Android 1.6.3.PX 版本
初始化部分:
要使用SDK 的全埋點功能首先得完整集成FlutterSDK 詳情參照
flutter SDK的集成教程
1. 使用全埋點
全埋點默認關(guān)閉,可通過以下方法打開:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
QTAutoTrack().enable();
關(guān)閉全埋點:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
QTAutoTrack().disable();
完整 Demo
import 'package:qt_common_sdk/qt_common_sdk.dart';
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
class _MyAppState extends State<MyApp> {
@override
void initState() {
if (!sdkHasInit) {
sdkHasInit = true;
QTCommonSdk.setCustomDomain(DOMAIN, DOMAIN);
QTCommonSdk.setLogEnabled(true);
QTCommonSdk.initCommon(APP_KEY, APP_KEY, '配置發(fā)布渠道');
}
// 全埋點相關(guān)的依賴QTCommonSdk初始化
QTAutoTrack()
.config(QTAutoTrackConfig(
pageConfigs: [
QTAutoTrackPageConfig<AutoTrackPage>(
pageName: 'Home',
pagePath: '/Home',
pageTitle: 'test Home',
),
QTAutoTrackPageConfig<AutoTrackPageA>(
pageName: 'Page2',
pagePath: '/Page2',
pageTitle: 'test Page2',
),
QTAutoTrackPageConfig<AutoTrackPageSkip>(
pageName: 'Page3',
pagePath: '/Home',
pageTitle: 'test Page3',
skipMe: true
)
],
eventHandler: (model) => {
// 前置回調(diào)函數(shù)
QTTrackLogger.i("測試頁面",model)
},
))
.enable() // 開啟埋點
.enableLog();
super.initState();
}
...
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: QTTrackNavigationObserver.wrap([]),
initialRoute: '/',
routes: {
'/': ((context) => Home()),
'/page2': ((context) => Page2()),
'/page3': ((context) => Page3()),
},
);
}
}
2. 使用頁面全埋點
2.1. 添加頁面路由監(jiān)聽
使用Flutter頁面全埋點需要手動開啟。全埋點中頁面PV事件是通過監(jiān)聽NavigatorObserver
采集的,因此想要頁面全埋點生效我們需要直接在 MaterialApp 中配置 QTTrackNavigationObserver
如下所示:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: [QTTrackNavigationObserver()],
...
);
}
...
也可以在已有的 navigatorObservers
列表中,通過 QTTrackNavigationObserver.wrap
包裹:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
@override
Widget build(BuildContext context) {
return MaterialApp(
navigatorObservers: QTTrackNavigationObserver.wrap([]),
...
);
}
...
2.2. 設(shè)置頁面自動埋點
開啟全埋點后頁面自動上報默認是開啟的,如果需要設(shè)置頁面采集相關(guān)功能,可以調(diào)用如下api:
// 啟用頁面埋點
QTAutoTrack().enablePageTrack();
/// 禁用頁面埋點
QTAutoTrack().disablePageTrack();
若只需禁止某頁面的自動采集上報的接口,您可以在pageConfigs里面配置對應(yīng)的屬性:
QTAutoTrack()
.config(QTAutoTrackConfig(
pageConfigs: [
...,
QTAutoTrackPageConfig<AutoTrackPageSkip>(
pageName: 'Page3', // 頁面編碼
pagePath: '/Home', // 頁面路由對應(yīng)的路徑
pageTitle: 'test Page3', // 頁面標題
skipMe: true
)
],
eventHandler: (model) => {
// 前置回調(diào)函數(shù)
QTTrackLogger.i("測試頁面",model)
},
))
.enable() // 開啟埋點
.enableLog();
其中
pageName 表示頁面編碼
pagePath 路由對應(yīng)的路徑
skipMe 為是否關(guān)閉該頁面的自動瀏覽事件采集(true表示關(guān)閉,false表示開啟)
注意:skipMe設(shè)置的優(yōu)先級低于關(guān)閉頁面瀏覽事件自動采集的總開關(guān)QTAutoTrack().disablePageTrack()
3. 使用自動點擊全埋點
重要: Android端需要開啟全埋點上報功能后事件才能正確上報集成代碼如下:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
QtConfigure.setCustomDomain("您的收數(shù)服務(wù)域名", null);
// 打開調(diào)試log
QtConfigure.setLogEnabled(true);
// 采樣率拉取依賴全埋點開關(guān)設(shè)置,如需要事件采樣率控制功能,請按需調(diào)用此API
QtTrackAgent.setAutoEventEnabled(true);
//...
}
//...
}
開啟全埋點后頁面自動上報默認是開啟的,如果需要設(shè)置頁面采集相關(guān)功能,可以調(diào)用如下api:
// 啟用點擊全埋點
QTAutoTrack().enableClick();
/// 禁用頁面埋點
QTAutoTrack().disableClick();
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
@override
void initState() {
QTAutoTrack().enable().disableClick(); // 開啟全埋點,禁用自動點擊埋點
super.initState();
}
...
3.1. 設(shè)置 click 元素的自定義ID
我們通過 Key 來設(shè)置元素的自定義 ID,自定義 ID 在 click 埋點中會作為事件id進行上報,值是 Key 的 toString()
方法返回值,可以直接使用 QTElementKey
觸發(fā) click 埋點的元素目前支持以下組件:
GestureDetector
InkWell
ElevatedButton
ListTile
對于支持列表以外的組件,則無法通過 Key 設(shè)置自定義 ID,click 埋點會觸發(fā)在組件內(nèi)部的 GestureDetector 上。
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
ListTile(
key: QTElementKey('custom-key'),
title: Text("Click Me"),
onTap: () {}
)
...
3.2. 忽略 click 元素
如果不希望統(tǒng)計某些元素的 click 埋點,可以通過以下辦法忽略 click 元素:
通過 QTElementKey
設(shè)置 skipMe
:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
ListTile(
key: QTElementKey('custom-key', skipMe: true),
title: Text("Click Me"),
onTap: () {},
)
...
通過 ignoreElementKeys()
方法指定元素的 key:
import 'package:qt_common_sdk/qt_common_auto_track.dart'
...
final customKey = QTElementKey('custom-key');
...
QTAutoTrack().ignoreElementKeys([customKey]);
...
ListTile(
key: Key("custom-key"),
title: Text("Click Me"),
onTap: () {},
)
...
通過 ignoreElementStringKeys()
方法指定元素 key 的 string 值,只要與 key 的 toString()
返回值匹配即可生效,這里建議使用 QTElementKey
:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
...
QTAutoTrack().ignoreElementStringKeys(['custom-key']);
...
ListTile(
key: QTElementKey('custom-key'),
title: Text("Click Me"),
onTap: () {},
)
...
2.8 開啟日志
日志默認關(guān)閉,可通過以下方式開啟:
import 'package:qt_common_sdk/qt_common_auto_track.dart';
QTAutoTrack().enableLog();
3.1 配置相關(guān)(可選)
3.1 示例
pageConfigs:用于配置頁面的參數(shù),影響 pageview,pageleave 埋點。需要指定頁面的類型,配置只對指定頁面生效。
pageName:頁面的自定義 ID,對應(yīng)埋點方案中的事件編碼。
pageTitle:頁面的標題,如果不配置,則使用 AppBar 中指定的 title,配置后優(yōu)先使用配置的值。在
pagePath:頁面的路徑,如果不配置,則使用 MaterialApp 中通過 routes 配置的路徑,配置后優(yōu)先使用配置的值。在 page_end,pageleave 埋點中會放在
page_path
字段上報。zskipMe:默認為 false,設(shè)置為 true 后會忽略當前頁面的 pageview,pageleave 埋點。
ignoreElementKeys:忽略入?yún)⒅型ㄟ^ Key 指定元素的 click 埋點。
ignoreElementStringKeys:忽略入?yún)⒅型ㄟ^字符串指定元素的 click 埋點,匹配方式是字符串內(nèi)容必須與元素 key 的
toString()
返回值相同。enablePageTrack:默認為 true,設(shè)置為 false 后會關(guān)閉所有的 pageview 埋點。
enableClick:默認為 true,設(shè)置為 false 后會關(guān)閉所有的 click 埋點。
import 'package:qt_common_sdk/qt_common_auto_track.dart';
QTAutoTrack().config(QTAutoTrackConfig(
pageConfigs: [
QTAutoTrackPageConfig<AutoTrackPage>(
pageName: 'Home',
pagePath: '/Home',
pageTitle: 'test Home',
),
QTAutoTrackPageConfig<AutoTrackPageA>(
pageName: 'Page2',
pagePath: '/Page2',
pageTitle: 'test Page2',
),
QTAutoTrackPageConfig<AutoTrackPageSkip>(
pageName: 'Page3',
pagePath: '/Home',
pageTitle: 'test Page3',
skipMe: true
)
],
eventHandler: (model) => {
// 前置回調(diào)函數(shù)
QTTrackLogger.i("測試頁面",model)
},
ignoreElementKeys: [],
ignoreElementStringKeys: [],
enablePageTrack: true,
enableClick: true,
));