@tiledev/sdk-analytics-apptile
v0.4.2
Published
Apptile-Analytics adapter for TilePacket apps. Implements the @tiledev/sdk-analytics-core AnalyticsAdapter and merges two platform providers into one: Segment tracking (segmentAnalytics) and the Apptile backend notification analytics (apptileNotificationA
Readme
@tiledev/sdk-analytics-apptile
Apptile-Analytics adapter for the @tiledev/sdk-analytics-core contract. This one
adapter merges two platform providers:
- Segment — ported from
apptile-coresegmentAnalytics/(thewriteKeytracking client; native via@segment/analytics-react-native, no-op on web). - Apptile backend notification analytics — ported from
apptile-coreapptileNotificationAnalytics/(every event is POSTed to Apptile'sevents-apianalytics + notification routes; runs on native and web). See alsoApptileAnalytics.ts(handleEvent, which firedapptileNotificationAnalytics.sendEventfor every event) andapi/AnalyticsAPI.ts.
npm install @tiledev/sdk-analytics-apptile @tiledev/sdk-analytics-coreRequired peer: @segment/analytics-react-native (native Segment leg; a no-op on web).
The Apptile events-api leg POSTs via the global fetch and needs no HTTP dependency.
No keys are baked — pass options.writeKey (the platform's
APPTILE_ANALYTICS_SEGMENT_KEY) and the Apptile app/endpoint config at runtime.
Adapter mapping (name: 'apptile')
| AnalyticsAdapter method | Segment leg | Apptile events-api leg |
| --- | --- | --- |
| init | createClient({ writeKey }) (+ identify(userId) if known) | — |
| track(event, props) | track(event, transform(props)) | POST analytics route + notification route |
| screen(name, props) | screen(name, props) | POST analytics route + notification route |
| identify(userId, traits) | identify(userId, traits) | — |
| setUserProperties(props) | identify(undefined, props) | — |
| reset() | reset() | — |
- Analytics route (always):
POST {analyticsUrl}with{ eventType, ...properties }. DefaultanalyticsUrl=https://events-api.apptile.io/analytics. - Notification route (only when
appId+oneSignalAppId+ a resolved OneSignal user id are present):POST {eventsUrl}with{ eventType, appId, oneSignalUserId, oneSignalAppId, deviceId, payload }. DefaulteventsUrl=https://events-api.apptile.io/event. login/signuppayloads are transformed to{ method, customerId }for Segment (ported).
Options
createApptileAnalyticsAdapter({
// Segment
writeKey: SEGMENT_WRITE_KEY, // omit → Segment leg disabled
// Apptile events-api
appId: APPTILE_APP_ID,
oneSignalAppId: ONESIGNAL_APPID,
getOneSignalUserId, // from @tiledev/sdk-analytics-onesignal
getDeviceId: () => deviceId,
// analyticsUrl / eventsUrl override the defaults; enableNotificationAnalytics: false disables the leg
});Wire into the theme's AnalyticsService
import { analytics } from '@/core/services/analytics'; // the theme AnalyticsService singleton
import { createApptileAnalyticsAdapter } from '@tiledev/sdk-analytics-apptile';
import { createFirebaseAnalyticsAdapter } from '@tiledev/sdk-analytics-firebase';
// Register every enabled provider. Each adapter owns its own track/identify/screen/... logic;
// AnalyticsService just loops over the registered adapters.
analytics.use([
createApptileAnalyticsAdapter({ writeKey: SEGMENT_WRITE_KEY, appId: APPTILE_APP_ID, oneSignalAppId, getOneSignalUserId }),
createFirebaseAnalyticsAdapter({ /* config via options */ }),
// clevertap / appsflyer / facebook / klaviyo / moengage / onesignal / apple-att
]);
// <AnalyticsProvider> already uses the `analytics` singleton — nothing else to wireDevelopment
npm run build # clean + tsc
npm run lint # tsc --noEmit