SocialHub.AI
Pusat Pembangun · Penjejakan Web

Jejaki tingkah laku di tapak anda sendiri.

Letakkan satu suar pihak pertama di mana-mana laman pemasaran atau e-dagang dan paparan halamannya mengalir ke dalam garis masa tingkah laku ahli yang sama seperti e-mel, portal kesetiaan dan aplikasi anda. Tiada kunci, tiada kebergantungan — beberapa baris penyiaran JS vanila ke titik akhir awam. Flash menghuraikan pengesanan peranti, geo dan bot di bahagian pelayan.

01 — Cara ia berfungsi

Satu baris yang dihoskan, atau coretan kendiri

Tambah penjejak yang dihoskan dengan tag skrip tunggal atau tampal coretan kendiri jika anda tidak mahu kebergantungan luaran — sama ada ia menjana pengecam, menghormati isyarat privasi dan POST paparan halaman ke satu titik akhir:

POST https://flash.socialhub.ai/api/v1/tracking/pageview

Anda menghantar bit pelanggan

URL, tajuk, perujuk, id, skrin, bahasa, zon waktu, UTM — itu sahaja.

Flash memperkayakan bahagian pelayan

Peranti, OS dan pelayar dihuraikan daripada Ejen Pengguna; negara daripada IP; bot dikesan dan ditandai. Klien tidak perlu dipercayai untuk ini.

Ia sentiasa mengembalikan 204

Bot, GPC, cacat bentuk atau diterima — titik akhir menjawab secara senyap. Penjejakan tidak pernah melemparkan ralat ke halaman anda.

Pada domain anda sendiri, tingkah laku adalah tanpa nama. Tiada kuki sesi Flash di tapak anda, jadi paparan halaman dikunci pada anonymous_id yang anda jana — bukan kepada ahli yang diketahui. Atribusi ahli berlaku pada permukaan milik Flash (portal kesetiaan dan pusat ahli dalam apl), di mana sesi tersebut menyelesaikan ahli. Gunakan anonymous_id yang konsisten supaya tingkah laku di tapak pelawat sekurang-kurangnya disatukan merentasi sesi mereka sendiri.

02 — Pasang

Dua cara masuk. Tetapkan YOUR_TEAM_ID dan anda akan disiarkan secara langsung.

Disyorkan

Pilihan A · Dihoskan — satu baris

Gugurkan satu teg skrip sebelum </body>. Ia menjejaki perubahan laluan apl satu halaman secara automatik dan mendedahkan window.flashTrack() — tiada perkara lain yang perlu disambungkan.

indeks.html
<!-- SocialHub web tracking — one line, before </body> -->
<script src="https://flash.socialhub.ai/sdk/flash-tracker.js"
        data-team-id="YOUR_TEAM_ID" defer></script>
↓ Muat turun flash-tracker.jsLihat sumber ↗tiada kebergantungan · hos kendiri daripada asal anda sendiri jika anda lebih suka

Pilihan B · Dalam Talian — tiada skrip luaran

Mahukan sifar permintaan luaran (CSP ketat, atau kod di dalam pakej anda sendiri)? Tampalkan coretan kendiri ini. Ia mendedahkan window.shTrack() — sebut sahaja selepas setiap perubahan laluan dalam aplikasi satu halaman:

indeks.html
<!-- SocialHub web tracking — paste before </body> on every page -->
<script>
(function () {
  var TEAM_ID = "YOUR_TEAM_ID";                                  // Settings → API
  var ENDPOINT = "https://flash.socialhub.ai/api/v1/tracking/pageview";

  // Honor Global Privacy Control / Do Not Track — no signal sent.
  if (navigator.globalPrivacyControl === true || navigator.doNotTrack === "1") return;

  function uid() {
    return (window.crypto && crypto.randomUUID)
      ? crypto.randomUUID()
      : (Date.now() + "-" + Math.random().toString(16).slice(2));
  }
  function persist(store, key) {
    try { var v = store.getItem(key); if (!v) { v = uid(); store.setItem(key, v); } return v; }
    catch (e) { return uid(); }
  }
  function utm() {
    var p = new URLSearchParams(location.search), o = {};
    ["source", "medium", "campaign", "term", "content"].forEach(function (n) {
      var val = p.get("utm_" + n); if (val) o[n] = val;
    });
    return Object.keys(o).length ? o : undefined;
  }
  function track() {
    var body = JSON.stringify({
      v: 1,
      page_url: location.href,
      page_title: document.title,
      referrer: document.referrer || undefined,
      anonymous_id: persist(localStorage, "sh_anon"),       // stable per browser
      session_id: persist(sessionStorage, "sh_session"),    // resets per tab session
      team_id: TEAM_ID,
      utm: utm(),
      screen: screen.width + "x" + screen.height,
      language: navigator.language,
      timezone: Intl.DateTimeFormat().resolvedOptions().timeZone,
      timestamp: Date.now()
    });
    try {
      if (navigator.sendBeacon) navigator.sendBeacon(ENDPOINT, body);
      else fetch(ENDPOINT, { method: "POST", body: body, keepalive: true }).catch(function () {});
    } catch (e) { /* never break the page */ }
  }

  window.shTrack = track;   // for SPAs: call window.shTrack() after each route change
  track();                  // initial page view
})();
</script>
spa-router.js
// Single-page apps: after each client-side route change
router.afterEach(function () { window.shTrack && window.shTrack(); });
03 — Kontrak muatan

Badan suar

Hantar application/json (atau string biasa melalui sendBeacon). Apa-apa sahaja yang melebihi 4 KB atau gagal pengesahan akan digugurkan secara senyap.

MedanJenisNota
vnumberVersi skema. Sentiasa 1.
page_urlstringURL penuh halaman (≤ 2048). Diperlukan.
page_titlestring?Tajuk dokumen (≤ 500).
referrerstring?document.referrer (≤ 2048).
anonymous_idstringID setiap pelayar yang stabil yang anda jana (≤ 36). Diperlukan.
session_idstringID setiap sesi yang anda jana (≤ 36). Diperlukan.
team_idstringId pasukan SocialHub anda (≤ 36) — mengenal pasti jenama. Diperlukan.
utmobject?{ sumber, medium, kempen, istilah, kandungan } dihuraikan daripada pertanyaan string.
screenstring?"1920x1080".
languagestring?navigator.language.
timezonestring?IANA tz, cth. America/Los_Angeles.
timestampnumberZaman pelanggan ms. Diperlukan.
04 — Perlindungan

Dibina untuk menentang trafik palsu

team_id anda berada dalam sumber halaman anda — seperti mana-mana ID analitik, ia adalah umum. Jadi titik akhir mempertahankan dirinya di bahagian pelayan, secara senyap (ia sentiasa menjawab 204, jadi penyerang tidak mendapat maklum balas untuk disiasat):

Penghadan kadar asas · sentiasa aktif

Setiap pasukan dilindungi secara lalai tanpa persediaan: titik akhir mengehadkan bilangan suar yang boleh dihantar oleh satu sumber, jadi team_id yang dikikis tidak boleh membanjiri atau meracuni analitik anda. Ia dibuka secara gagal — gangguan sementara tidak akan menjejaskan trafik sebenar anda.

Senarai asal dibenarkan · pilihan

Dalam Tetapan → Perlindungan Penjejakan, anda boleh mengehadkan suar yang diterima kepada domain anda sendiri, dengan pratonton Pemantauan untuk menyemak positif false sebelum anda menguatkuasakannya. Ini menutup tapak lain menggunakan SDK anda dalam pelayar.

Jujur tentang hadnya

Pengehadan kadar dan senarai dibenarkan meningkatkan piawaian dan had kerosakan, tetapi tiada klien tanpa kunci yang boleh menghentikan sepenuhnya skrip yang ditentukan daripada memalsukan permintaan. Untuk pengambilan sensitiviti tinggi, hantar pelayan ke pelayan melalui API yang disahkan.

Nombor bersih di hilir

Anti-penyalahgunaan berjalan sebelum apa-apa disimpan, jadi trafik yang ditapis tidak pernah sampai ke garis masa ahli, segmen atau papan pemuka anda — dan halaman Perlindungan Penjejakan menunjukkan kepada anda berapa banyak yang telah disimpan.

05 — Privasi

Hormati pelawat mengikut pembinaan

GPC & Jangan Jejaki

Cetakan menyemak navigator.globalPrivacyControl dan navigator.doNotTrack dan tidak menghantar apa-apa apabila salah satu ditetapkan. Kekal berjaga-jaga itu.

Tiada PII mentah

Hantar pengecam dan konteks halaman sahaja — jangan sekali-kali nama, e-mel atau kandungan borang dalam suar. Identiti ahli diselesaikan pada permukaan Flash, bukan di tapak anda.

Sepanduk persetujuan anda dahulu

Jika tapak anda menggunakan pengurus persetujuan, lindungi petikan di sebalik persetujuan — hanya hubungi penjejak setelah pelawat menerima analitik.

Ditapis bot

Pengesanan bot bahagian pelayan menandakan trafik bukan manusia supaya ia tidak mencemarkan garis masa atau statistik ahli anda.

Rakamkan perjalanan yang selebihnya

Web ialah salah satu daripada empat permukaan. Lihat bagaimana e-mel, portal kesetiaan dan aplikasi anda memberi suapan kepada garis masa ahli yang sama.