Integrasi
QuickTracking React Native SDK merupakan ekstensi berbasis QuickTracking native client tracking SDK. SDK ini mengenkapsulasi API yang sering digunakan dalam pelacakan QT, seperti properti global, properti halaman, dan acara kustom.
Integrasi React Native SDK
Alamat Online Npm: react-native-quicktracking-analytics-module
Unduh paket npm ke proyek
# npm
npm install react-native-quicktracking-analytics-module
# yarn
yarn add react-native-quicktracking-analytics-module
# pnpm
pnpm add react-native-quicktracking-analytics-modulePerkenalkan variabel lingkungan SDK
import { QT } from "react-native-quicktracking-analytics-module";Integrasi Dock Android
Pergi ke konsol MPS.
Masuk ke latar belakang QT dan klik "Management Console".

Aplikasi terintegrasi
Temukan aplikasi yang ingin diintegrasikan dengan titik pelacakan: Pergi ke halaman Aplikasi, pilih organisasi yang digunakan, lalu klik Detail atau Integrasikan.

Konfigurasi alamat Maven
Tambahkan URL repositori maven SDK ke bagian buildscript dan allprojects dalam skrip konfigurasi build.gradle proyek.
buildscript {
repositories {
google()
jcenter()
maven { url 'https://repo1.maven.org/maven2/' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.4.0'}
// CATATAN: Jangan letakkan dependensi aplikasi Anda di sini; mereka termasuk
// dalam file build.gradle modul individu
}
}
allprojects {
repositories {
google()
jcenter()
maven { url 'https://repo1.maven.org/maven2/' }
}
}Referensi Komponen
Dalam bagian dependensi skrip konfigurasi build.gradle yang sesuai dengan aplikasi proyek, tambahkan dependensi yang diperlukan untuk integrasi.
dependencies {
implementation fileTree(include the following:['*.jar'], dir:'libs')
// QuickTracking analisis statistik SDK
implementation 'com.lydaas.qtsdk:qt-px-common:1.6.3.PX'
}Catatan: Jika Anda telah menambahkan dependensi QuickTracking ReactNative SDK menggunakan package.json, tidak perlu secara terpisah mengintegrasikan QuickTracking SDK untuk Android.
Konfigurasi verifikasi pelacakan
Dalam Android.manifest, temukan tag activity yang sesuai dengan MainActivity, tempel kode berikut, dan ganti appkey dengan milik Anda sendiri.
//1. Kode evokasi defaultnya adalah "atm. Appkey yang sesuai dengan aplikasi, yang tidak dapat diubah.
//2. Gunakan intent-filter tunggal dan intent-filter lainnya berdampingan.
// Jangan tambahkan kode berikut ke intent-filter lainnya.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="atm.appkey" />
</intent-filter>Tambahkan izin
SDK statistik memerlukan aplikasi host untuk diberikan izin berikut:
Izin | Tujuan |
ACCESS_NETWORK_STATE | Mendeteksi mode jaringan dan menghindari pengiriman data dalam kondisi jaringan abnormal untuk menghemat kuota dan daya. |
READ_PHONE_STATE (opsional) | IMEI perangkat pengguna diperoleh, dan pengguna diidentifikasi secara unik oleh IMEI, sehingga menyediakan layanan analisis statistik. |
ACCESS_WIFI_STATE | Memperoleh alamat MAC WIFI. Pada perangkat tablet atau kotak TV, perangkat tidak dapat diidentifikasi oleh IMEI. Kami akan menggunakan alamat MAC WIFI sebagai pengenal unik pengguna untuk menyediakan layanan analisis statistik secara normal. |
INTERNET | Izin yang memungkinkan aplikasi untuk terhubung ke jaringan dan mengirimkan data statistik untuk menyediakan layanan analisis statistik. |
Contoh file manifest AndroidManifest.xml diberikan di bawah ini:
<manifest ……>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<application ……>
</manifest>Konfigurasikan obfuscation
Jika aplikasi Anda menggunakan obfuscation kode, tambahkan konfigurasi berikut untuk mencegah SDK menjadi tidak tersedia karena obfuscation Quick Tracking SDK.
-keep class com.umeng.** {*;}
-keep class org.repackage.** {*;}
-keep class com.quick.qt.** {*;}
-keep class rpk.quick.qt.** {*;}
-keepclassmembers class * {
public <init> (org.json.JSONObject);
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}SDK perlu merujuk file sumber daya proyek yang diimpor, dan mendapatkan file referensi sumber daya R.java melalui mekanisme refleksi, tetapi proguard mungkin menghapus R.java ketika pengembang memproses apk melalui alat optimasi obfuscation seperti proguard. Jika masalah ini terjadi, silakan tambahkan konfigurasi berikut:
-keep public class [nama paket aplikasi Anda]. R$*{
public stac final int Inisialisasi SDK video pendek untuk Android
Pengaturan Domain
Pastikan untuk menyiapkan domain lingkungan pribadi sebelum inisialisasi.
/**
* Tetapkan domain utama dan alternatif untuk mengunggah log statistik. SDK akan terlebih dahulu melaporkan statistik ke domain utama. Jika gagal, ia akan mencoba melaporkan data ke domain alternatif lagi.
* Domain utama primaryDomain atau tidak dapat menentukan null atau string kosong. Jika tidak, pengecualian runtime SdkDomainUndefined akan dilemparkan.
*/
QtConfigure.setCustomDomain("domain pelacakan", null); Pra-inisialisasi
Panggil fungsi inisialisasi pustaka komponen dasar dalam fungsi Application.onCreate aplikasi hosting.
// Fungsi pra-inisialisasi SDK tidak melacak informasi perangkat atau melaporkan data ke backend QT.
// Fungsi pra-inisialisasi preInit membutuhkan waktu sangat sedikit dan tidak memengaruhi pengalaman pengguna saat pertama kali memulai dingin aplikasi.
QtConfigure.preInit(this,"appkey","Channel");3. Inisialisasi resmi
// Inisialisasi SDK. Panggil
public static void init(Context context,String appkey,String channel,int deviceType,String pushSecret);Nilai | Deskripsi | Catatan |
appkey | QT adalah pengenal unik yang dikeluarkan oleh platform aplikasi saat ini. |
|
channel | Pasar aplikasi untuk pengiriman aplikasi | Sumber data "saluran peningkatan" dalam "properti sistem" platform analisis QT |
deviceType | QtConfigure.DEVICE_TYPE_PHONE | Secara default, Anda dapat memasukkan QtConfigure.DEVICE_TYPE_PHONE |
pushSecret | Bidang yang ditinggalkan, masukkan kosong | Bidang yang ditinggalkan, masukkan kosong |
Contoh
public class MainApplication extends Application implements ReactApplication {
@Override
public void onCreate() {
super.onCreate();
// Fungsi pra-inisialisasi SDK tidak melacak informasi perangkat atau melaporkan data ke backend QT.
// Fungsi pra-inisialisasi preInit membutuhkan waktu sangat sedikit dan tidak memengaruhi pengalaman pengguna saat pertama kali memulai dingin aplikasi.
QtConfigure.preInit(this,"Your appkey","aliyun");
// Inisialisasi SDK. Anda harus memanggil
QtConfigure.init(this, "Your appkey","aliyun",QtConfigure.DEVICE_TYPE_PHONE, "");
}Untuk informasi lebih lanjut tentang cara mengintegrasikan SDK analisis statistik untuk Android, lihat Android SDK.
Integrasi Dock iOS
Gunakan integrasi CocoaPods
Pergi ke direktori proyek iOS.
cd ios && pod install && cd .. Inisialisasi SDK dan integrasikan appKey
Untuk memastikan bahwa aplikasi Anda dapat memenuhi persyaratan kepatuhan Kementerian Perindustrian dan Teknologi Informasi (MIIT) setelah mengintegrasikan SDK statistik, pastikan bahwa fungsi inisialisasi awal dipanggil untuk menginisialisasi SDK statistik setelah pengguna membaca Kebijakan Privasi Anda dan memberikan otorisasi pengguna selama pertama kali memulai dingin aplikasi. Dalam hal ini, SDK melacak informasi perangkat dan melaporkan data. Sebaliknya, jika pengguna tidak menyetujui otorisasi Kebijakan Privasi, fungsi inisialisasi tidak dapat dipanggil.
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/**Inisialisasi semua produk komponen
* @param appKey Appkey yang diterapkan oleh pengembang di QT.
* @param channel Pengenal saluran. Anda dapat mengatur nil ke "App Store".
*/
[QTConfigure initWithAppkey:@"AppKey aplikasi" channel:@"Saluran instalasi"];
return YES;
}Setelah aplikasi mendapatkan otorisasi pengguna dari Kebijakan Privasi, pengembang harus memastikan bahwa fungsi inisialisasi dipanggil untuk memulai dingin aplikasi berikutnya.
Konfigurasikan domain penerimaan
#import <QTCommon/UMConfigure.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
/**Tentukan domain utama dan alternatif untuk melaporkan log statistik. Fungsi ini harus dipanggil sebelum SDK menginisialisasi panggilan fungsi.
* @param primaryDomain Alamat penerimaan domain utama ke mana log dikirim. Parameter tidak boleh null atau string kosong.
* @param standbyDomain Alamat penerimaan domain cadangan untuk mengunggah log. Parameter bisa null atau string kosong. Jika parameter ini dibiarkan kosong, SDK secara otomatis menetapkan domain utama sebagai domain cadangan.
*/
[QTConfigure setCustomDomain:@"Domain penerimaan utama" standbyDomain:@"Domain penerimaan alternatif"];
return YES;
}Impor komponen log sesuai kebutuhan
Perkenalkan pustaka komponen yang diperlukan untuk statistik (saat memperbarui SDK, Anda dapat langsung menggunakan perintah pod update untuk pembaruan langsung).
pod 'UMCCommonLog'Contoh Podfile
require_relative '../node_modules/react-native/scripts/react_native_pods'
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
platform :ios, '12.0'
target 'qt_reactnative_demo' do
config = use_native_modules!
// QuickTracking analisis statistik SDK
pod 'QTCommon', '~> 1.5.8.PX'// Anda harus menentukan nomor versi.
// Anda dapat menambahkan UMCCommonLog dalam Logstore dasar ke proyek untuk pengembangan dan debugging.
pod 'UMCCommonLog'
use_react_native!(
:path => config[:reactNativePath],
# untuk mengaktifkan hermes di iOS, ubah `false` menjadi `true` lalu instal pods
:hermes_enabled => flags[:hermes_enabled],
)
use_flipper!()
post_install do |installer|
react_native_post_install(installer)
__apply_Xcode_12_5_M1_post_install_workaround(installer)
end
end
Catatan: Jika Anda telah menambahkan dependensi QuickTracking ReactNative SDK menggunakan package.json, Anda tidak perlu secara terpisah mengintegrasikan QuickTracking SDK untuk iOS.
Aktifkan pencetakan log
#import <QTCommon/UMConfigure.h>
#import <UMCommonLog/UMCommonLogHeaders.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
[UMCommonLogManager setUpUMCommonLogManager];
[QTConfigure setLogEnabled:YES];
return YES;
}Konfigurasi verifikasi pelacakan
Tambahkan URL Scheme Anda ke proyek. URL Scheme terletak di pengaturan proyek target - > tab Info - > URL Types.
Skema: atm.yourappkey.

Panggil fungsi [QTMobClick handleUrl:url] di AppDelegate untuk menerima URL.
- (BOOL)application:(UIApplication *)application openURL:(nonnull NSURL *)url options:(nonnull NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
if ([QTMobClick handleUrl:url]) {
return YES;
}
return YES;
}
Untuk informasi lebih lanjut tentang cara mengintegrasikan SDK analisis statistik untuk iOS, lihat iOS SDK.
Untuk informasi lebih lanjut tentang verifikasi pelacakan, lihat Panduan Rinci Verifikasi Pelacakan.
API Pelacakan
Inisialisasi SDK
Inisialisasi Resmi
Pastikan untuk memanggil. Pastikan untuk menginisialisasi SDK setelah pengguna menyetujui kebijakan privasi.
function init(appKey: string, channel: string): voidNilai | Deskripsi |
appKey | Kunci aplikasi unik yang disediakan oleh latar belakang QT |
channel | Saluran unduhan |
Contoh
QT.init('appkey', 'quicktracking');Laporkan berdasarkan Akun Pengguna
Pengaturan Masuk Pengguna
"Pengguna Masuk" dalam produk yang sesuai untuk mengunggah nilai ini: Hitung jumlah "Pengguna Masuk", yaitu hitung jumlah unik dari nilai yang diunggah dari API berikut.
function profileSignIn(ID: string, provider?: string): voidNilai | Deskripsi |
ID | Akun pengguna. Nilainya kurang dari 64 byte panjangnya. "Pengguna Masuk" dalam produk yang sesuai dengan pengunggahan nilai ini: jumlah "pengguna masuk" dihitung, yang merupakan jumlah deduplikasi akun pengguna. |
provider | Bidang ini tidak valid. Anda dapat mengatur parameter ini ke null. |
Keluar Pengguna
Anda harus memanggil operasi ini saat keluar dari akun. Setelah Anda memanggil operasi ini, tidak ada konten terkait akun yang dikirim.
function profileSignOff(): voidContoh
QT.profileSignIn ('ID Pengguna');
QT.profileSignOff();Unggah properti pengguna
Gunakan acara kustom dengan kode acara tetap sebagai "$$_user_profile" untuk mengunggah. Atribut acara yang dibawa oleh acara ditempatkan di tabel pengguna sebagai atribut pengguna.
function sendEvent(eventId: string, params: any): voidNilai | Deskripsi |
eventId | ID acara statistik saat ini. |
params | Deskripsi parameter untuk acara saat ini, didefinisikan sebagai pasangan "<key-value>" dari "Nama Parameter: Nilai Parameter" |
Catatan: Properti pengguna harus diunggah setelah akun pengguna dilaporkan.
Contoh
QT.onProfileSignIn("Zhang San");
const user = {
gender: "male",
age: "8"
}
QT.sendEvent("$$_user_profile", user);Makna bisnis dari pengunggahan di atas adalah: Zhang San berusia 8 tahun.
Properti Global
Properti global adalah properti yang dibawa oleh setiap acara.
Daftarkan Atribut Global
function registerGlobalProperty(globalProperty: any): voidNilai | Deskripsi |
globalProperty | Properti global untuk didaftarkan, didefinisikan sebagai pasangan <key-value> untuk nama properti: nilai properti. Ini adalah struktur objek lapisan tunggal dan tidak mendukung nesting multi-lapis. |
Catatan
Nama properti dan nilai properti bertipe string. Hanya huruf, digit, dan garis bawah yang didukung.
Di Android, nilai atribut tidak mendukung tipe boolean JavaScript. Anda perlu mengonversinya secara manual menjadi 0 atau 1 di JS.
Di Android, untuk skenario di mana nilai properti global adalah null atau undefined, SDK Android dasar menyaring bidang properti global ini. Jika Anda memerlukan skenario analisis nilai null, Anda harus menyesuaikan nilai null default.
Di iOS, nilai properti global tidak mendukung null dan undefined dan perlu disaring secara manual.
Contoh
QT.registerGlobalProperty({
name: 'MyApp',
description: 'this is a app',
aBoolean: 1, // Tipe boolean harus diatur ke 0 atau 1,
aNull: '', // Tipe null atau undefined harus berupa string kosong.
// Nilai defaultnya adalah tipe angka. Jika nilai kembali adalah null atau undefined, Anda harus menyesuaikan nilai default tipe angka.
aNumber: 66,
});Hapus atribut global tertentu
function unregisterGlobalProperty(propertyName: string): voidNilai | Deskripsi |
propertyName | Nama atribut global untuk dihapus |
Contoh
QT.unregisterGlobalProperty('name'); // Hapus atribut global namaPeroleh properti global tertentu
async function getGlobalProperty(propertyName: string): Promise<any>Nilai | Deskripsi |
propertyName | Nama properti global untuk diperoleh |
Contoh
await QT.getGlobalProperty('name'); // Peroleh properti global nama dan kembalikan {name: "MyApp"}Peroleh semua atribut global
async function getGlobalProperties(propertyName: string): Promise<any>Contoh
await QT.getGlobalProperties(); // Dapatkan semua properti globalBersihkan semua atribut global
function clearGlobalProperties(): voidContoh
QT.clearGlobalProperties(); // Semua atribut global dibersihkan (dengan hati-hati)Pelacakan acara penelusuran halaman
Pengembang yang ingin melacak dan menganalisis statistik pada jalur halaman dan durasi tinggal di halaman dapat menanam titik pelacakan secara manual dengan memanggil operasi ini.
function onPageStart(pageName: string): void
function onPageEnd(pageName: string): voidNilai | Deskripsi |
pageName | Pengkodean halaman |
Contoh
QT.onPageStart('MainPage');
QT.onPageEnd('MainPage');Catatan:
onPageStart SDK mencatat informasi masuk halaman. onPageStart SDK tidak melaporkan acara. onPageEnd SDK hanya melaporkan acara penelusuran halaman saat Anda memanggil onPageEnd SDK.
onPageStart dan onPageEnd harus dipanggil berpasangan, dan pageName dari nilai yang dilewatkan harus sama. Jika onPageEnd tidak digunakan atau pageName dari nilai yang dilewatkan oleh onPageEnd tidak konsisten dengan onPageStart, informasi yang dicatat dalam onPageStart tidak akan berlaku.
Pengunggahan properti halaman
Mendukung pemasangan properti kustom ke halaman saat ini.
function uploadPageProperties(pageName: string, params: EventParams): voidParameter:
Nilai | Deskripsi |
pageName | Nama halaman target (pengkodean halaman), yang harus sama dengan nama halaman saat ini. Jika tidak, eksekusi fungsi tidak valid. |
params | Deskripsi parameter untuk acara saat ini didefinisikan sebagai pasangan "<key-value>" dari "nama parameter: nilai parameter". Ini adalah struktur objek lapisan tunggal dan tidak mendukung nesting multi-lapis. |
Contoh
QT.uploadPageProperties('detail_page', { test: 1 })Harap perhatikan:
API ini harus dipanggil di antara onPageStart dan onPageEnd.
Nama properti dan nilai properti bertipe string. Hanya huruf, digit, dan garis bawah yang didukung.
Di Android, nilai atribut tidak mendukung tipe boolean JavaScript. Anda perlu mengonversinya secara manual menjadi 0 atau 1 di JS.
Di Android, untuk skenario di mana nilai properti global adalah null atau undefined, SDK Android dasar menyaring bidang properti global ini. Jika Anda memerlukan skenario analisis nilai null, Anda harus menyesuaikan nilai null default.
Di iOS, nilai properti global tidak mendukung null dan undefined dan perlu disaring secara manual.
Pelacakan acara kustom
Acara kustom dapat digunakan untuk melacak perilaku pengguna dan mencatat detail spesifik terjadinya perilaku.
Gunakan antarmuka sendEvent untuk melacak statistik pada acara. API-nya adalah sebagai berikut:
/**
* Titik pelacakan acara kustom
* @param eventId Kode acara.
* @param params Deskripsi parameter untuk acara saat ini, yang didefinisikan sebagai pasangan "<key-value>" dari "nama parameter: nilai parameter"
* @param pageName Kode acara.
*/
function sendEvent(eventId: string, params?: any, pageName?: string): voidNilai | Deskripsi |
eventId | Kode acara untuk statistik saat ini. |
params | Deskripsi parameter untuk acara saat ini didefinisikan sebagai pasangan "<key-value>" dari "nama parameter: nilai parameter". Ini adalah struktur objek lapisan tunggal dan tidak mendukung nesting multi-lapis. |
pageName | Kode halaman acara statistik saat ini. |
Contoh
// Acara kustom yang membawa parameter acara.
QT.sendEvent(
'event1',
{
name: 'pelacakan cepat',
method: 'func',
},
);
// Acara kustom yang membawa parameter acara dan pengkodean halaman.
QT.sendEvent(
'event2',
{
name: 'pelacakan cepat',
method: 'func',
},
'main-page'
);Catatan:
Acara multi-parameter dapat memenuhi skenario analisis asli perhitungan acara / pencacahan acara;
Tipe parameter komputasi acara yang berbeda sesuai dengan metode komputasi yang berbeda, yang dapat dibagi menjadi dua kategori, numerik dan karakter.
Tipe digital: mendukung perhitungan nilai akumulasi, nilai maksimum, nilai minimum, nilai rata-rata, dan hitungan unik.
Tipe karakter: mendukung perhitungan hitungan unik.
Catatan:
Seperti properti global, properti acara juga memiliki perbedaan dalam pemrosesan tipe pada platform Android dan iOS yang berbeda:
Di Android, tipe boolean JavaScript tidak didukung. Anda perlu mengonversinya secara manual menjadi 0 dan 1 di JS.
Di Android, untuk skenario di mana nilai properti global adalah null atau undefined, SDK Android dasar menyaring bidang properti global ini. Jika Anda memerlukan skenario analisis nilai null, Anda harus menyesuaikan nilai null default.
Di iOS, nilai properti global tidak mendukung null dan undefined dan perlu disaring secara manual.
Pelacakan acara jembatan
Acara jembatan digunakan dalam skenario jembatan h5 RN. Antarmuka ini digunakan untuk mengirim log H5 ke Aplikasi.
/**
* Titik pelacakan acara jembatan
* @param data Badan log H5 dari acara yang diteruskan.
*/
function sendEventForH5(data: string): voidNilai | Deskripsi |
data | Badan log H5 dari acara yang diteruskan |
Contoh
const content = data.nativeEvent.data;
QT.sendEventForH5(content);Tanamkan halaman h5 di Aplikasi RN (mode jembatan RN)
H5 Terintegrasi QuickTracking Web SDK
Untuk langkah ini, lihat: Web SDK
Teruskan log H5 ke React Native WebView
<script charset="UTF-8">
...
// Akses dan konfigurasi SDK
...
// Kirim acara kustom di halaman (klik, eksposur elemen, dan acara lainnya)
aplus_queue.push({
action: 'aplus.aplus_pubsub.subscribe',
arguments: ['mw_change_hjlj', function (content) {
var eventData = content && content.what_to_send && content.what_to_send.hjljdataToUmNative;
if (/*lingkungan iOS */) {
window.ReactNativeWebView.postMessage(JSON.stringify(eventData), '*');
} else {
window.ReactNativeWebView.postMessage(JSON.stringify(eventData));
}
}]
})
aplus_queue.push({
action: 'aplus.aplus_pubsub.subscribe',
arguments: ['mw_change_pv', function (content) {
var pvData = content && content.what_to_send && content.what_to_send.pvdataToUmNative;
if (/*lingkungan iOS */) {
window.ReactNativeWebView.postMessage(JSON.stringify(pvData), '*');
} else {
window.ReactNativeWebView.postMessage(JSON.stringify(pvData));
}
}]
})
</script>React Native WebView menerima pesan dan memanggil SDK QT untuk melaporkan log
import * as React from 'react'
import { WebView } from 'react-native-webview';
import { QT } from 'react-native-quicktracking-analytics-module';
import { Platform, SafeAreaView } from 'react-native';
export default function WebPage() {
const onMessage = (data) => {
try {
const content = data.nativeEvent.data;
QT.sendEventForH5(content);
} catch (error) {
console.log('webview message error:', error);
}
};
return (
<SafeAreaView style={{ flex: 1 }}>
<WebView
...
onMessage={onMessage}
...
/>
</SafeAreaView>
);
}Pelacakan otomatis RN
QuickTracking ReactNative SDK versi 2.0.0 atau lebih baru diperlukan.
Pelacakan otomatis acara tampilan halaman
Mempertimbangkan dukungan skenario yang kaya dari pustaka React Navigation itu sendiri dan pengaruhnya di komunitas, pelacakan otomatis SDK pada acara penelusuran halaman langsung menggunakan kemampuan antarmuka terbuka React Navigation. Contoh berikut menunjukkan:
import {QT} from 'react-native-quicktracking-analytics-module';
import {
NavigationContainer,
useNavigationContainerRef,
} from '@react-navigation/native';
import {createNativeStackNavigator} from '@react-navigation/native-stack';
const Stack = createNativeStackNavigator();
const App = () => {
const navigationRef = useNavigationContainerRef();
const routeNameRef = useRef('');
return (
<NavigationContainer
ref={navigationRef}
onReady={() => {
routeNameRef.current = currentRouteName;
// Tetapkan pengkodean halaman.
QT.onPageStart(currentRouteName);
}}
onStateChange={() => {
const previousRouteName = routeNameRef.current;
const currentRouteName = navigationRef.getCurrentRoute()?.name;
// Tetapkan properti halaman sesuai kebutuhan (opsional)
QT.uploadPageProperties(previousRouteName, {
test_page_p_1: 1,
test_page_p_2: "test"
});
// Lacak acara penelusuran halaman.
QT.onPageEnd(previousRouteName);
if (currentRouteName) {
if (previousRouteName !== currentRouteName) {
// Perbarui pengkodean halaman baru
QT.onPageStart(currentRouteName);
routeNameRef.current = currentRouteName;
}
}
}}
>
...
</NavigationContainer>
)
}Pelacakan otomatis acara klik kontrol
Jalankan perintah node di jalur proyek yang akan ditanam.
node node_modules/react-native-quicktracking-analytics-module/src/hook.js -runCatatan: Jika Anda perlu mengembalikan file asli, Anda dapat menjalankan perintah reset.
node node_modules/react-native-quicktracking-analytics-module/src/hook.js -resetAbaikan pelacakan otomatis kontrol RN
Karena skenario pengembangan campuran, Anda dapat menonaktifkan pelacakan otomatis acara klik kontrol React Native secara terpisah. Tambahkan konfigurasi QTSDKConfig ke package.json proyek yang akan dilacak:
{
"name": "reactnative_demo",
"QTSDKConfig": {
"enableAutoCLK": true
}
}Nilai valid dari bidang enableAutoCLK:
true untuk mengaktifkan pelacakan otomatis kontrol RN
false untuk menonaktifkan pelacakan otomatis kontrol RN
Catatan: Untuk mengaktifkan fungsi pelacakan otomatis acara klik kontrol RN, Anda perlu menggunakannya bersama dengan perintah node di atas.
Aktifkan pelacakan otomatis acara klik untuk kontrol iOS
#import <QTCommon/UMConfigure.h>
#import <QTCommon/MobClick.h>
#import <UMCommonLog/UMCommonLogHeaders.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Aktifkan fitur pelacakan otomatis saat kontrol asli sepenuhnya tertanam.
[QTMobClick setAutoEventEnabled:YES];
return YES;
}Aktifkan pelacakan otomatis acara klik untuk kontrol Android
import com.quick.qt.analytics.QtTrackAgent;
public class MainApplication extends Application implements ReactApplication {
...
@Override
public void onCreate() {
super.onCreate();
...
// Aktifkan fitur pelacakan otomatis saat kontrol asli sepenuhnya tertanam.
QtTrackAgent.setAutoEventEnabled(true);
...
}
...
}Tetapkan properti kustom kontrol ReactNative
Catatan: Hanya kontrol React Native seperti TouchableHighlight, TouchableOpacity, Pressable, dll yang didukung.
<Pressable
onPress={()=>{}}
qtParams={{
pressable: "press_1",
}}
>
{({pressed}) => (
<Text style={styles.text}>
{pressed ? 'Klik kontrol Pressable! ' : 'Kontrol Pressable'}
</Text>
)}
</Pressable>
<TouchableHighlight
onPress={()=>{}}
qtParams={{aTouchableHighlight: 1, b: 2}}>
<Text>Kontrol TouchableHighlight </Text>
</TouchableHighlight>
<TouchableOpacity
onPress={()=>{}}
qtParams={{aTouchableOpacity: 1, b: 2}}>
<Text>Kontrol TouchableOpacity </Text>
</TouchableOpacity>
<TouchableWithoutFeedback
onPress={()=>{}}
qtParams={{aTouchableWithoutFeedback: 1, b: 2}}>
<Text>Kontrol TouchableWithoutFeedback </Text>
</TouchableWithoutFeedback>Abaikan pelacakan otomatis kontrol tunggal
Tambahkan bidang ignore ke atribut acara sama dengan true.
<TouchableHighlight
onPress={()=>{}}
qtParams={{
aTouchableHighlight: 1,
b: 2,
ignore: true
}}>
<Text>Kontrol TouchableHighlight </Text>
</TouchableHighlight>