@active-reach/web-sdk

中文文档
1.48.0发布于 2026/10/27MITTypeScriptESM + CJS零依赖近 30 天下载 2635

积极接触情报的Web SDK——事件跟踪、身份分辨率、应用信息、网络推取和投放

中文使用文档
文档目录37 节
  1. 先决条件
  2. 安装
  3. 国家预防机制(建议)
  4. CDN (同步装入器)
  5. 快速启动
  6. 国家预防机制/环境单元
  7. 反应
  8. 下一个.js
  9. 配置
  10. 核心 API
  11. aegis.track(eventName, properties?)
  12. aegis.identify(userId, traits?)
  13. aegis.page(name?, properties?)
  14. aegis.group(groupId, traits?)
  15. aegis.alias(newUserId)
  16. aegis.reset()
  17. aegis.flush()
  18. 电子商务追踪
  19. 所有电子商务方法
  20. 反应钩
  21. 同意管理
  22. 第三方一体化
  23. 网络推取通知
  24. 内接通讯和部件
  25. 从应用程序驱动触发身份( I)
  26. 安置——运动如何惠及客户
  27. Cart State——一家商店,以CEP标准方式提供
  28. 插件系统
  29. 类型脚本支持
  30. 饼干和存储
  31. 内容安全政策
  32. 警卫
  33. 什么不跟踪
  34. 调试
  35. 子路径导出
  36. 浏览器支持
  37. 许可证

@ action-reach/web-sdk (英语)

网络 SDK 用于 积极接触情报 ——轻量级事件跟踪,身份解析,应用中消息(覆盖,嵌入式卡片,交互式部件),并进行网络推.

12KB弹出 | < 1KB 自动加载器 | 对页面负荷的零影响


先决条件

在整合之前,您需要:

  1. 写入密钥 - 从你的主动接触情报仪表板上取回 设置 > 开发者 > API 密钥。 。 。 .
  2. API 主机 — 您的单元格端点 URL( 在登入时提供) .

说明: 写入密钥为 a 可公布的标识符 (如花纹可发布密钥). 在客户端代码中包含是安全的。 它只能发送事件——它不能读取数据,修改配置,或访问其他租户. 永远不要用你的 密钥 在客户端代码.


安装

npm install @active-reach/web-sdk

CDN (同步装入器)

将此片段添加到您的 <head> 标签。 ASync加载器队列所有调用,直到SDK满载——零屏蔽.

<script>
  !function(){var e=window.aegis=window.aegis||[];if(!e.invoked){e.invoked=!0,e.methods=["init","track","identify","page","group","alias","reset","flush","use","debug","setCell","getCellInfo","getAnonymousId","getUserId","getSessionId","setConsent","grantConsent","denyConsent","hasConsent","getConsentPreferences","onConsentChange"],e.factory=function(t){return function(){var n=Array.prototype.slice.call(arguments);return n.unshift(t),e.push(n),e}};for(var t=0;t<e.methods.length;t++){var n=e.methods[t];e[n]=e.factory(n)}e.load=function(t,n){var o=document.createElement("script");o.type="text/javascript",o.async=!0,o.src=n&&n.cdnUrl?n.cdnUrl:"https://platform.active-reach.ai/sdk/aegis.min.js",o.onerror=function(){window.console&&console.error("Aegis SDK failed to load")};var r=document.getElementsByTagName("script")[0];r.parentNode.insertBefore(o,r),e._loadOptions={key:t,options:n}},e.SNIPPET_VERSION="1.0.0"}}();

  aegis.load('YOUR_WRITE_KEY');
  aegis.init('YOUR_WRITE_KEY', {
    api_host: 'https://YOUR_CELL.activereach.ai'
  });
</script>

快速启动

国家预防机制/环境单元

import aegis from '@active-reach/web-sdk';

await aegis.init('YOUR_WRITE_KEY', {
  api_host: 'https://YOUR_CELL.activereach.ai',
  auto_page_view: true,
});

// Track an event
aegis.track('Purchase Completed', {
  order_id: 'ORD-123',
  revenue: 99.99,
  currency: 'INR',
});

// Identify a user
aegis.identify('user_123', {
  email: '[email protected]',
  name: 'Priya Sharma',
  plan: 'premium',
});

反应

import { AegisProvider, useAegis, useTrackEvent } from '@active-reach/web-sdk/react';

function App() {
  return (
    <AegisProvider
      writeKey="YOUR_WRITE_KEY"
      config={{ api_host: 'https://YOUR_CELL.activereach.ai', auto_page_view: true }}
    >
      <Dashboard />
    </AegisProvider>
  );
}

function Dashboard() {
  const { isReady } = useAegis();
  const trackEvent = useTrackEvent();

  return (
    <button onClick={() => trackEvent('Button Clicked', { button: 'CTA' })}>
      Track Event
    </button>
  );
}

下一个.js

// app/providers.tsx
'use client';

import { AegisProvider } from '@active-reach/web-sdk/react';

export function Providers({ children }: { children: React.ReactNode }) {
  return (
    <AegisProvider
      writeKey={process.env.NEXT_PUBLIC_AEGIS_WRITE_KEY!}
      config={{ api_host: process.env.NEXT_PUBLIC_AEGIS_API_HOST! }}
    >
      {children}
    </AegisProvider>
  );
}

配置

await aegis.init('YOUR_WRITE_KEY', {
  // Required
  api_host: string;

  // Batching & Performance
  batch_size?: number;           // default: 10
  batch_interval?: number;       // default: 1000ms

  // Data Capture
  capture_utm?: boolean;         // default: true
  capture_referrer?: boolean;    // default: true
  auto_page_view?: boolean;      // default: false

  // Session
  session_timeout?: number;      // default: 1800000 (30 min)

  // Privacy & Consent
  respect_dnt?: boolean;         // default: true
  enable_consent_mode?: boolean; // default: false
  wait_for_consent?: boolean;    // default: false
  default_consent?: {
    analytics?: boolean;         // default: false
    marketing?: boolean;         // default: false
    functional?: boolean;        // default: true
  };
  integrate_onetrust?: boolean;
  integrate_cookiebot?: boolean;
  integrate_google_consent_mode?: boolean;

  // Cookie
  cross_domain_tracking?: boolean; // default: false
  cookie_domain?: string;
  secure_cookie?: boolean;         // default: true

  // Offline & Retry
  enable_offline_mode?: boolean;   // default: true
  max_offline_events?: number;     // default: 100
  retry_failed_requests?: boolean; // default: true
  max_retries?: number;            // default: 3

  // Regional Cell Selection
  cell_endpoints?: CellEndpoint[];
  preferred_region?: string;
  auto_region_detection?: boolean; // default: true

  // Debug
  debug?: boolean;                 // default: false
});

核心 API

aegis.track(eventName, properties?)

跟踪自定义事件 .

aegis.track('Product Viewed', {
  product_id: 'SKU-12345',
  product_name: 'Leather Jacket',
  price: 199.99,
  category: 'Outerwear',
});

aegis.identify(userId, traits?)

识别用户和关联特征.

aegis.identify('user_123', {
  email: '[email protected]',
  name: 'John Doe',
  plan: 'premium',
});

aegis.page(name?, properties?)

跟踪页面视图 .

aegis.page('Product Page', { product_id: 'SKU-12345' });

aegis.group(groupId, traits?)

与一个团体(公司、组织)联系用户.

aegis.group('company_789', {
  name: 'Acme Corp',
  industry: 'Technology',
  employees: 500,
});

aegis.alias(newUserId)

合并两个用户身份.

aegis.alias('permanent_user_id');

aegis.reset()

登录时清除用户身份 。 生成新的匿名身份 .

aegis.reset();

aegis.flush()

强制发送所有已排队的事件 .

await aegis.flush();

电子商务追踪

为标准化电子商务活动搭建的助手 aegis.ecommerce数字 :

import aegis from '@active-reach/web-sdk';

// Product discovery
aegis.ecommerce.productViewed({
  product_id: 'SKU-123',
  name: 'Leather Jacket',
  price: 4999,
  currency: 'INR',
  category: 'Outerwear',
  brand: 'Acme',
  variant_id: 'black_xl',
  variant_label: 'Black XL',
});

aegis.ecommerce.productListViewed({
  list_name: 'New Arrivals',
  category: 'Outerwear',
  products: [{ product_id: 'SKU-123', name: 'Leather Jacket', price: 4999 }],
});

aegis.ecommerce.searchPerformed({ query: 'leather jacket', results_count: 12 });

// Cart
aegis.ecommerce.addToCart({
  product_id: 'SKU-123',
  name: 'Leather Jacket',
  price: 4999,
  quantity: 1,
});

aegis.ecommerce.removeFromCart({ product_id: 'SKU-123', name: 'Leather Jacket', price: 4999 });

aegis.ecommerce.cartViewed({
  cart_id: 'cart_456',
  value: 4999,
  products: [{ product_id: 'SKU-123', name: 'Leather Jacket', price: 4999, quantity: 1 }],
});

// Checkout
aegis.ecommerce.checkoutStarted({
  value: 4999,
  products: [{ product_id: 'SKU-123', name: 'Leather Jacket', price: 4999, quantity: 1 }],
  coupon: 'WELCOME10',
  shipping: 99,
  tax: 450,
});

aegis.ecommerce.checkoutStep(2, { payment_method: 'UPI' });

// Order
aegis.ecommerce.orderCompleted({
  order_id: 'ORD-789',
  value: 5548,
  revenue: 4999,
  shipping: 99,
  tax: 450,
  payment_method: 'UPI',
  products: [{ product_id: 'SKU-123', name: 'Leather Jacket', price: 4999, quantity: 1 }],
});

aegis.ecommerce.orderRefunded('ORD-789', 4999);

// Coupons
aegis.ecommerce.couponApplied({ coupon_code: 'WELCOME10', discount_value: 500, discount_type: 'fixed' });
aegis.ecommerce.couponRemoved({ coupon_code: 'WELCOME10' });

// Wishlist
aegis.ecommerce.wishlistItemAdded({
  product: { product_id: 'SKU-123', name: 'Leather Jacket', price: 4999 },
});

// Promotions
aegis.ecommerce.promotionViewed({ name: 'Summer Sale', promotion_id: 'promo_1', creative: 'banner_hero' });
aegis.ecommerce.promotionClicked({ name: 'Summer Sale', promotion_id: 'promo_1' });

所有电子商务方法

方法事件名称说明
productViewed(product)product_viewed用户查看一个产品页面
productListViewed(list)product_list_viewed用户查看一个类别/收藏
searchPerformed(search)search_performed用户搜索目录
addToCart(product)cart_item_added添加到推车中的项目
removeFromCart(product)cart_item_removed从推车取出的项目
cartViewed(cart)cart_viewed用户查看他们的推车
checkoutStarted(checkout)checkout_started检查流程开始
checkoutStep(step, options?)checkout_step退出步骤已完成
orderCompleted(order)order_completed完成采购
orderRefunded(orderId, value?, products?)order_refunded已退订
couponApplied(coupon)coupon_applied折合金/贴现
couponRemoved(coupon)coupon_removed已删除
wishlistItemAdded(wishlist)wishlist_item_added添加到希望列表的项目
promotionViewed(promo)promotion_viewed晋升印象
promotionClicked(promo)promotion_clicked点击了推广

反应钩

从 @active-reach/web-sdk/react数字 :

钩子回返说明
useAegis(){ aegis, isReady }访问 SDK 实例和准备状态
useTrackEvent()(name, props?) => void提醒事件追踪回调
usePageView(name?, props?, deps?)—— 说关于挂载/依赖性变化的音轨页面视图
useIdentifyUser()(userId, traits?) => void提醒身份调用

建设支持GDPR/CCPA合规.

// Set preferences
aegis.setConsent({ analytics: true, marketing: false, functional: true });

// Grant / deny
aegis.grantConsent();           // all categories
aegis.grantConsent('analytics'); // specific category

aegis.denyConsent();
aegis.denyConsent('marketing');

// Query
aegis.hasConsent('analytics');   // boolean
aegis.getConsentPreferences();   // full object

// Listen for changes
const unsubscribe = aegis.onConsentChange((prefs) => {
  console.log('Consent updated:', prefs);
});

第三方一体化

// OneTrust
aegis.init('KEY', { enable_consent_mode: true, integrate_onetrust: true });

// Cookiebot
aegis.init('KEY', { enable_consent_mode: true, integrate_cookiebot: true });

// Google Consent Mode v2
aegis.init('KEY', { enable_consent_mode: true, integrate_google_consent_mode: true });

网络推取通知

从 @active-reach/web-sdk/push数字 :

import { AegisWebPush } from '@active-reach/web-sdk/push';

const push = new AegisWebPush({
  writeKey: 'YOUR_WRITE_KEY',
  apiHost: 'https://YOUR_CELL.activereach.ai',
  vapidPublicKey: 'YOUR_VAPID_PUBLIC_KEY',
  contactId: 'user_123',
  organizationId: 'org_456',
  serviceWorkerPath: '/aegis-sw.js',
});

await push.initialize();

复制 dist/aegis-sw.js 给您的 public/ 因此,服务员被服务在根部.


内接通讯和部件

每个应用格式——模式、旗帜、工具提示、全屏接管、底页和交互式部件(平轮、刮卡、核动力源/卫星调查、测验、倒计时、明星评分、民意测验、多步骤表格)——都通过一个系统提供 单一入口数字 : AegisMessageRuntime。 。 。 .

import { AegisMessageRuntime } from '@active-reach/web-sdk';

const runtime = new AegisMessageRuntime({
  writeKey: 'YOUR_WRITE_KEY',
  apiHost: 'https://YOUR_CELL.activereach.ai',
  contactId: 'user_123',     // optional — set once the visitor is known
  organizationId: 'org_456',
  propertyId: 'prop_789',    // the SDK install (website/app) this page is
});

await runtime.initialize();

从旧版本搬走? AegisInAppManager, (中文(简体) ), AegisWidgetManager,以及 AegisPlacementManager 不再成为公共API的一部分—— AegisMessageRuntime 是一个支持的切入点并制作所有格式。 独立的"放置"系统被移除;内置内容现在作为 嵌入式卡片 (见下文).

宣传内容、受众、时间表和频率上限在仪表板上配置了服务器侧(App 个人化) (中文(简体) ). SDK评价客户端触发器(滚动深度,页面上的时间,退出意向,不活动,自定义事件),并自动使匹配运动.

从应用程序驱动触发身份( I)

runtime.track('added_to_cart');         // fire event-based display triggers
runtime.notifyConversion('purchase');   // suppress a campaign after it converts
await runtime.updateContactId('contact_42'); // re-evaluate once the visitor signs in

安置——运动如何惠及客户

每次选一次或多次 发送模式 在仪表板上 安置情况 选项卡。 它们并非相互排斥:

发送模式这是什么在你的网站上做什么
弹出( 覆盖)SDK 运行时在页面上制作的模式 / 横幅 /等没什么.. runtime.initialize() 当触发匹配时显示
嵌入式卡片该运动使 内入在页面上的插槽内添加为空 <div data-aegis-slot="…"> 随便你
独立页面运动获得自己的标志性 URL( 对短消息 / 电子邮件 / QR 来说很大)链接到仪表板上显示的 URL

嵌入式卡片(内置入式)

将空元素丢入要显示的牌中 。 内容 data-aegis-slot 价值必须等于运动价值 类别 (单位:千美元)widget_category 在仪表板上。 在加载时, SDK 将填充该类的首个符合条件的运动:

<!-- Renders the active "promo" campaign here, inline in your page -->
<div data-aegis-slot="promo"></div>

没有每个片段的脚本和手动注册—— runtime.initialize() 每张扫描 [data-aegis-slot] 元素并填充。 它在每次SSE/poll刷新上重新扫描,并跳过它已经填充的槽.

槽壳-在运动到来前保留盒子

当它的竞选登陆时,一个空位会增长,这个空位将页面推倒(layout shift),而英雄形象要求等待竞选取来. SDK用一个 外壳: 适当大小的占位符, 绘制到每个空位 在此之前 它收集,然后运动完成。 一个没有东西填补的插槽,一旦得到答案,就会崩溃,所以一个框从不显示,而后消失.

SDK从第一个有1个槽的槽取出每个槽的壳:

  1. 内嵌到页面打印形状 (服务器提交的网页): shapes 从 GET /v1/in-app/slot-shapes (下),以脚本标记. 当这个标记出现时,它所缺失的插槽被视作"不会填满".
    <script type="application/json" data-aegis-slot-shapes>{"shapes":[ … ]}</script>
    
  2. 槽本身的属性 (任何地点,用手):
    <div data-aegis-slot="hero" data-aegis-slot-aspect="8/3"></div>
    <div data-aegis-slot="commerce" data-aegis-slot-min-height="272"></div>
    
    data-aegis-slot-aspect 带 w/h (或 w:h) (中文(简体) ). data-aegis-slot-min-height 使用像素或 CSS 长度(300, (中文(简体) ), 20rem, (中文(简体) ), 45vh) (中文(简体) ).
  3. 上次拜访的形状:每次获取后,SDK会将获胜的竞选形状保存在 localStorage键是属性加所申报的表面、屏幕和出入口(locationId),保存的形状在6小时后失效. 如果存储被屏蔽, 此步骤会被跳过 .

你让自己变成一个人 如果空档已经有子女(a) data-aegis-slot-default 倒计时,或者你自己 <div data-aegis-slot-shell> 孩子,SDK画什么也没有。 它用竞选来取代你的外壳,或者在槽不能填满时去掉外壳,恰好是它自己做的. SDK从不画出标记的形状 may_be_empty (例如,首次访问者可乘回购铁路)。 只有槽的自有属性才能为一个框保留一个框.

GET /v1/in-app/slot-shapes: 用于服务器渲染器. 它使用相同的 写键头与 /v1/in-app/active (单位:千美元)X-Aegis-Write-Key选项 X-User-ID 编号 : X-Contact-ID 编号 : X-Property-Id) (中文(简体) ). 查询参数为: property_id (当信头缺席时使用), surface, (中文(简体) ), screen, (中文(简体) ), page_url (路径+搜索), location_id, (中文(简体) ), device_type, (中文(简体) ), geo 财务报告和审定财务报表 is_new_user反应包括: Cache-Control: private, max-age=60 而身体则 {"shapes": [SlotShape, …]},每个插槽一个形状 将 填满 空出的时间段将无法填补 。 每个运动在 /v1/in-app/active 也带着自己的 slot_shape。 。 。 .

自己打印贝壳的主机. ACS的店面 让他们从 display.inapp_slot_shapes。“ Shopify”主题应用程序扩展名使其来自商店元场 aegis.slot_shapes,单元格保持同步(shopify-plugin/theme-app-extension/snippets/aegis-slot-shell.liquid) (中文(简体) ). 都标出他们的炮弹 data-aegis-slot-shell + 键 data-aegis-shell-owner="host" 并打印出内线形状,所以SDK采用上述形状.

SlotShape数字 :

外地含义
slot插槽键( E)data-aegis-slot 值=运动 widget_category(中文(简体) )
campaign_id胜利的竞选
layouthero, (中文(简体) ), rail, (中文(简体) ), grid (单位:千美元)columns 清单2或1, bar (通知栏/值栏)或 card
aspect方框方面 w/h。对于英雄来说,这是桌面方面(8/3, 768px) (中文(简体) )
aspect_phone只有英雄:电话(<768px)方面(chrome.aspect_ratio,或 1/1 当幻灯片有电话图像时)。 无效使用 min_height
min_height 编号 : max_height像素 / CSS 长度( 英雄被盖上 ) 70vh(中文(简体) )
card_aspect, (中文(简体) ), card_count, (中文(简体) ), title铁路和网格:每张卡片的图像方面,卡片数量,以及标题(缺席时为零)
may_be_empty这个收视器的收视槽可能保持空位(一个没有显示的栏杆,或者一个取决于谁在看的赢家:一个A/B测试或为所有匿名访客计算出形状的坚挺). 仅从数据中绘制无框 。 这种形状没有 image 大小
rotate_count插槽通过这么多的竞选来旋转. 形状是第一个
image仅英雄: 第一张幻灯片的图像 {src, src_phone, alt, aspect, aspect_phone, width, height}把它变成 <img fetchpriority="high"> 所以这是页面的LCP请求

英雄画出幻灯片 0 为 <img fetchpriority="high" decoding="async" width height> 懒惰地载着其他的滑行。 铁路卡图像携带 decoding="async" 加上明确的 width编号 :height,然后在一次解码后消失.

Cart State——一家商店,以CEP标准方式提供

每个电车反应表面—— 免费交货进度卡,独立 进度栏,车价值 目标设定规则,以及 推车回收 部件 - 读取一车店。 你以同样的方式喂养它 发射 电子商务活动 你已经开火了 SDK是活车 禁止召人作客.

// 1) Wire the ecommerce tracker into the cart store, once at boot:
runtime.bindEcommerce(aegis.ecommerce);

// 2) Fire ecommerce events as the shopper shops — the cart is derived from these:
aegis.ecommerce.addToCart({ product_id: 'p1', name: 'Cap', price: 499, quantity: 1 });
aegis.ecommerce.cartViewed({ value: 998, currency: 'INR', products: [/* … */] }); // authoritative snapshot

平台安装不需要事件线条 - 插件为你做。 钱是 自动检测并输入同一商店:

平台检测方法设置
购买/cart.js 民意调查+ cart:updated (插图)安装商店应用程序
伍商aegis_cart + WC 存储 API( 插件)安装WP 插件
马根托 2localStorage['mage-cache-storage']安装扩展名
自定义/ 无头/ 移动开火 aegis.ecommerce.* (上文) (中文(简体) )runtime.bindEcommerce(...)

逃逸舱门 ——无头主机不放出电子商务事件可以推动 直接推车; 这写同一个商店:

runtime.setCartState({ total: 149.99, itemCount: 2, currency: 'INR' });

插件系统

以自定义插件扩展 SDK :

import type { Plugin } from '@active-reach/web-sdk';

const myPlugin: Plugin = {
  name: 'my-plugin',
  version: '1.0.0',

  async init(config) { /* called on SDK init */ },

  async beforeEventCapture(event) {
    // Modify or enrich events before capture
    event.properties = { ...event.properties, enriched: true };
    return event;
  },

  async afterEventCapture(event) {
    // Post-capture logic (external forwarding, logging, etc.)
  },
};

aegis.use(myPlugin);

类型脚本支持

包括完整类型的定义。 扩展类型安全事件跟踪 :

// types/aegis.d.ts
import '@active-reach/web-sdk';

declare module '@active-reach/web-sdk' {
  interface TrackEventProperties {
    'Purchase Completed': {
      order_id: string;
      revenue: number;
      currency: string;
    };
    'Product Viewed': {
      product_id: string;
      product_name: string;
      price: number;
    };
  }
}

饼干和存储

名称类型目的会期
aegis_anon_id饼干匿名用户标识符365天(1天)
aegis_user_id饼干识别的用户 ID365天(1天)
aegis_session_id饼干当前会话编号会议
aegis_session_time饼干最后活动时间戳会议
aegis_consent饼干同意优惠365天(1天)
aegis_offline_queue本地图集离线事件队列持久性
aegis_active_cell本地图集活跃的区域小组7天时间

所有饼干 : SameSite=Lax, (中文(简体) ), Secure (只有HTTPS),域范围(可选).


内容安全政策

如果您的网站使用内容安全政策,请添加这些指令:

script-src: 'self' https://platform.active-reach.ai;
connect-src: 'self' https://*.activereach.ai;
style-src: 'self' 'unsafe-inline';
img-src: 'self' https://*.activereach.ai data:;

如果通过CDN使用DOMPurify,也添加:

script-src: https://cdnjs.cloudflare.com;

CSP 缺失时常见错误 : Refused to connect to 'https://...activereach.ai' ——将域添加到 connect-src。 。 。 .


警卫

  • 写入密钥: 发布客户端标识符. 无法读取数据或修改服务器状态 。 安全嵌入源代码.
  • HTML 卫生: 用途 多维化 当有严格的允许列表时。 返回到仅文本渲染 .
  • URL 验证: 所有验证的 URL ─ javascript: 财务报告和审定财务报表 data: 协议被封锁 .
  • 同意: 拒绝同意时, 事件被放弃( 不排队) wait_for_consent 已启用.
  • 运输:所有API的呼叫都使用HTTPS并带有无记名符号认证.

什么不跟踪

永远不要通过敏感数据作为事件属性 :

// Never do this
aegis.track('Login', { password: '...' });
aegis.identify('user_123', { ssn: '...', credit_card: '...' });

SDK不过滤或编辑属性. 您负责确保所要收集的物品不包括在有效载荷中.


调试

aegis.debug(true);

// Or via init
aegis.init('KEY', { debug: true });

控制台输出 :

[Aegis] Initializing SDK...
[Aegis] Event queued: track { button_name: 'Sign Up' }
[Aegis] Flushing 5 events
[Aegis] Batch sent successfully

子路径导出

导入路径说明
@active-reach/web-sdk核心 SDK( 跟踪、 识别、 页面、 组、 化名)
@active-reach/web-sdk/react反应提供者+钩
@active-reach/web-sdk/pushWeb Push 通知管理器
@active-reach/web-sdk/cdnIIFE 组合 <script> 标签 (window.aegis)
@active-reach/web-sdk/snippet已消化的 Aync 加载器片断
@active-reach/web-sdk/service-worker推动通知服务工作者

浏览器支持

Chrome 80+, Firefox 78+, Safari 14+, Edge 80+.


许可证

麻省理工学院

版本与发布记录

@active-reach/web-sdk 共发布 84 个版本,首次发布于 2026/04/15;过去 12 个月发布了 84 个版本。

版本发布日期距今
1.48.0latest2026/10/2711 天前
1.47.32026/10/2315 天前
1.47.22026/10/2315 天前
1.47.12026/10/2216 天前
1.47.02026/10/2216 天前
1.46.32026/10/2216 天前

关于 @active-reach/web-sdk 的常见问题

@active-reach/web-sdk 是什么?

积极接触情报的Web SDK——事件跟踪、身份分辨率、应用信息、网络推取和投放

如何安装 @active-reach/web-sdk?

在项目目录运行 npm install @active-reach/web-sdk,或使用 pnpm add / yarn add / bun add。

@active-reach/web-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@active-reach/web-sdk 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@active-reach/web-sdk 可以商用吗?

@active-reach/web-sdk 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@active-reach/web-sdk 的下载量有多少?

根据 npm 官方下载统计,@active-reach/web-sdk 在 2026/10/05 – 2026/11/03 这 30 天内被下载 2,635 次,日均约 88 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@active-reach/web-sdk 还在维护吗?

最新版本 1.48.0 发布于 2026/10/27(11 天前);至今共发布 84 个版本,其中过去 12 个月发布了 84 个;首次发布于 2026/04/15。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。