React Native SDK 快速开始
React Native 端 SDK。覆盖日志、埋点、性能 metric、崩溃捕获(同步异常 + 未处理 Promise rejection)、 离线持久化。要求 RN 0.72+ 与 Hermes 引擎(未处理 rejection 捕获依赖 Hermes)。
对应 SDK:sdks/react-native ·
示例:examples/rn-demo ·
设计:docs/07-design/sdk-react-native.md
安装
npm install @argus/sdk-react-native @react-native-async-storage/async-storage
cd ios && pod install && cd .. # 仅 iOS 需要初始化(应用入口,只调一次)
import { Platform } from "react-native";
import AsyncStorage from "@react-native-async-storage/async-storage";
import { Argus } from "@argus/sdk-react-native";
Argus.init({
// 换成你在 Argus Console 拿到的 DSN
dsn: "argus://demo-public:demo-secret@localhost:4318/demo",
userId: "demo-user",
appVersion: "1.0.0",
// 宿主注入:SDK 自身不 import react-native / AsyncStorage(保持纯 JS、可 node 测)
deviceOs: Platform.OS,
deviceOsVersion: String(Platform.Version),
storage: AsyncStorage,
// 自动捕获未处理同步异常(ErrorUtils,默认 true)
captureUncaught: true,
// opt-in:捕获未处理 Promise rejection(Hermes,默认 false)
captureUnhandledRejections: true,
});上报
// 日志 → /v1/events
Argus.log("INFO", "button: log tapped", { screen: "demo" });
// 埋点 → /v1/track(先设归因,再 track)
Argus.setAttribution({ utm_source: "demo", utm_medium: "app", utm_campaign: "rn" });
Argus.track("demo_button_tap", { kind: "track" });
// 性能 metric → /v1/apm
Argus.metric("button_latency", 42, { unit: "ms" });
// 手动 captureCrash → /v1/events
Argus.captureCrash({
errorType: "DemoError",
errorMessage: "manual crash from demo",
stacktrace: new Error("demo").stack,
});
// 退后台时建议调用
await Argus.flush();接入要点
- 宿主注入:
deviceOs/deviceOsVersion/storage由你的 app 注入(SDK 不 import RN)。 - 自动捕获:
captureUncaught(默认true,ErrorUtils 同步异常);captureUnhandledRejections(默认false,opt-in,Hermes 异步 rejection)。 - 离线可靠性:注入
storage后,离线时 log / crash 积压持久化,app 重启自动恢复重发 (track / apm 为 best-effort,不持久化)。 - 退后台 flush:在
AppState变为'background'时调Argus.flush(),避免丢未发批次。
示例 examples/rn-demo 是接入代码
参考,不含原生 iOS/Android 工程与 Metro 样板——把 App.tsx 的接入代码合并到你用
npx react-native init 创建的工程即可。