All Products
Search
Document Center

Quick Tracking:React Native SDK

Last Updated:Jul 02, 2025

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-module

Perkenalkan 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".

image

Aplikasi terintegrasi

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

image

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

  1. 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); 
  1. 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.

  1. Appkey parameter input harus konsisten dengan latar belakang QT.

  2. Appkey dilaporkan bersama dengan setiap log acara dan digunakan untuk mengidentifikasi data platform aplikasi QT.

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.

image

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): void

Nilai

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): void

Nilai

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(): void

Contoh

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): void

Nilai

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): void

Nilai

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

  1. Nama properti dan nilai properti bertipe string. Hanya huruf, digit, dan garis bawah yang didukung.

  2. Di Android, nilai atribut tidak mendukung tipe boolean JavaScript. Anda perlu mengonversinya secara manual menjadi 0 atau 1 di JS.

  3. 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.

  4. 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): void

Nilai

Deskripsi

propertyName

Nama atribut global untuk dihapus

Contoh

QT.unregisterGlobalProperty('name'); // Hapus atribut global nama

Peroleh 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 global

Bersihkan semua atribut global

function clearGlobalProperties(): void

Contoh

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): void

Nilai

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): void

Parameter:

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:

  1. API ini harus dipanggil di antara onPageStart dan onPageEnd.

  2. Nama properti dan nilai properti bertipe string. Hanya huruf, digit, dan garis bawah yang didukung.

  3. Di Android, nilai atribut tidak mendukung tipe boolean JavaScript. Anda perlu mengonversinya secara manual menjadi 0 atau 1 di JS.

  4. 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.

  5. 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): void

Nilai

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:

  1. Di Android, tipe boolean JavaScript tidak didukung. Anda perlu mengonversinya secara manual menjadi 0 dan 1 di JS.

  2. 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.

  3. 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): void

Nilai

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 -run

Catatan: Jika Anda perlu mengembalikan file asli, Anda dapat menjalankan perintah reset.

node node_modules/react-native-quicktracking-analytics-module/src/hook.js -reset

Abaikan 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>