The SDK records install and open signals so campaign performance can start from the first app session.
Purchase carries normalized revenue fields used by campaign revenue reporting.
You can still send app-specific events with properties when no standard event fits.
How to choose an event name
Use Attry standard events only for lifecycle, deep link, purchase intent, and purchase revenue. Everything else should be a stable custom event name.
Let the SDK handle lifecycle
Install, open, session, foreground, background, and deep link opened events are auto-collected by the SDK where supported.
Use reserved names for revenue
Use purchase only when you include value or amountMinor plus currency.
Keep names stable
Use snake_case event names and do not rename events once dashboards and reports depend on them.
Put details in properties
Keep the event name simple, then send plan, screen, product ID, or experiment details as properties.
Standard event reference
Auto-collected lifecycle events
React Native and Capacitor SDKs collect core lifecycle signals automatically after initialization. These events power the first layer of user analytics and deferred attribution without requiring every app team to wire basic app state by hand.
Purchase revenue
Purchase is strict because it feeds campaign revenue. Attry does not guess revenue from random custom properties, so purchase events must include stable revenue data.
Purchase intent
Use initiate_purchase when a user starts a checkout or paywall purchase flow. Other product actions should be custom events with structured properties.
Troubleshooting
Purchase does not show revenue
Use attry.purchase or send revenue.amountMinor and revenue.currency. A purchase event without revenue is rejected by the API.
The same action appears as multiple events
Choose one stable name and keep details in properties. For example, use purchase with productId instead of purchase_monthly and purchase_yearly.
Auto events are missing
Confirm the SDK is initialized once at app startup and that the app is using the platform package, not the internal sdk-core package directly.
Revenue event shape
Use helper methods so the SDK normalizes revenue into minor units before sending it to Attry.
await attry.purchase({
value: 31.42,
currency: "USD",
productId: "pro_monthly",
transactionId: "txn_123"
});stored revenue -> amountMinor: 3142, currency: "USD"Can I send custom event names?
Yes. Attry accepts custom event names for app-specific behavior. Use predefined names only when the action matches a standard Attry event.
Is first open different from install?
Attry tracks install as the first SDK initialization on that device and open as app activity. In many apps they can happen close together, but they answer different questions.
Why is purchase strict?
Purchase is strict because it powers campaign revenue. Attry requires stable amount and currency fields so revenue is not inferred from arbitrary custom properties.
