expo-analytics-segment
Version:
Expo module that provides access to Segment mobile analytics
196 lines • 7.2 kB
JavaScript
import { UnavailabilityError } from 'expo-modules-core';
import { Platform } from 'react-native';
import ExponentSegment from './ExponentSegment';
// @needsAudit
/**
* Segment requires separate write keys for iOS and Android. You will need to log in to Segment
* to receive these keys: [https://segment.com/docs/guides/setup/how-do-i-find-my-write-key/](https://segment.com/docs/guides/setup/how-do-i-find-my-write-key/)
*
* @param options An [`InitializeOptions`](#initializeoptions) object.
*/
export function initialize(options) {
if (!ExponentSegment.initialize) {
throw new UnavailabilityError('expo-analytics-segment', 'initialize');
}
const platformWriteKey = Platform.select({
ios: options.iosWriteKey,
android: options.androidWriteKey,
});
if (platformWriteKey) {
ExponentSegment.initialize(platformWriteKey);
}
else {
throw new Error('You must provide a platform-specific write key to initialize Segment.');
}
}
// @needsAudit
/**
* Associates the current user with a user ID. Call this after calling [`Segment.initialize()`](#initialize)
* but before other segment calls. See [Segment Identify docs](https://segment.com/docs/spec/identify/).
* @param userId User ID for the current user.
*/
export function identify(userId) {
if (!ExponentSegment.identify) {
throw new UnavailabilityError('expo-analytics-segment', 'identify');
}
ExponentSegment.identify(userId);
}
// @needsAudit @docsMissing
/**
* @param userId User ID for the current user.
* @param traits A map of custom properties.
* @param options Map that can include any of [these common fields](https://segment.com/docs/connections/spec/common/).
* Defaults to `null`.
*/
export function identifyWithTraits(userId, traits, options = null) {
if (!ExponentSegment.identifyWithTraits) {
throw new UnavailabilityError('expo-analytics-segment', 'identifyWithTraits');
}
ExponentSegment.identifyWithTraits(userId, traits, options);
}
// @needsAudit
/**
* Associate the user with a group. See [Segment Group docs](https://segment.com/docs/spec/group/).
*
* @param groupId ID of the group.
*/
export function group(groupId) {
if (!ExponentSegment.group) {
throw new UnavailabilityError('expo-analytics-segment', 'group');
}
ExponentSegment.group(groupId);
}
// @needsAudit
/**
* Associate the user with a group with traits. See [Segment Group docs](https://segment.com/docs/spec/group/).
*
* @param groupId ID of the group.
* @param traits Free-form dictionary of traits of the group.
* @param options A map that can include any of [these common fields](https://segment.com/docs/connections/spec/common/).
* Defaults to `null`.
*/
export function groupWithTraits(groupId, traits, options = null) {
if (!ExponentSegment.groupWithTraits) {
throw new UnavailabilityError('expo-analytics-segment', 'groupWithTraits');
}
ExponentSegment.groupWithTraits(groupId, traits, options);
}
// @needsAudit
/**
* Associate current identity with a new identifier. See [Segment Alias docs](https://segment.com/docs/spec/alias/).
*
* @param newId Identifier to associate with.
* @param options An extra dictionary with options for the call, [see here](https://segment.com/docs/connections/spec/common/)
* for possible configuration options. An example options object would be:
* ```json
* {
* "integrations": {
* "Sentry": {
* "enabled": true
* }
* },
* "context": {
* "ip": "0.0.0.0"
* }
* }
* ```
*
* @return A `Promise` which fulfils witch a `boolean` indicating whether the method has been
* executed on the underlying `Segment` instance or not.
*/
export async function alias(newId, options = null) {
if (!ExponentSegment.alias) {
throw new UnavailabilityError('expo-analytics-segment', 'alias');
}
return await ExponentSegment.alias(newId, options);
}
// @needsAudit
/**
* Clears the current user. See [https://segment.com/docs/sources/mobile/ios/#reset](https://segment.com/docs/sources/mobile/ios/#reset).
*/
export function reset() {
if (!ExponentSegment.reset) {
throw new UnavailabilityError('expo-analytics-segment', 'reset');
}
ExponentSegment.reset();
}
// @needsAudit
/**
* Log an event to Segment. See [Segment Track docs](https://segment.com/docs/spec/track/).
*
* @param event The event name.
*/
export function track(event) {
if (!ExponentSegment.track) {
throw new UnavailabilityError('expo-analytics-segment', 'track');
}
ExponentSegment.track(event);
}
// @needsAudit
/**
* Log an event to Segment with custom properties. See [Segment Track docs](https://segment.com/docs/spec/track/).
*
* @param event The event name.
* @param properties A map of custom properties.
* @param options A map that can include any of [these common fields](https://segment.com/docs/connections/spec/common/).
* Defaults to `null`.
*/
export function trackWithProperties(event, properties, options = null) {
if (!ExponentSegment.trackWithProperties) {
throw new UnavailabilityError('expo-analytics-segment', 'trackWithProperties');
}
ExponentSegment.trackWithProperties(event, properties, options);
}
// @needsAudit
/**
* Record that a user has seen a screen to Segment. See [Segment Screen docs](https://segment.com/docs/spec/screen/).
*
* @param screenName Name of the screen.
*/
export function screen(screenName) {
if (!ExponentSegment.screen) {
throw new UnavailabilityError('expo-analytics-segment', 'screen');
}
ExponentSegment.screen(screenName);
}
// @needsAudit
/**
* Record that a user has seen a screen to Segment with custom properties. See [Segment Screen docs](https://segment.com/docs/spec/screen/).
*
* @param screenName Name of the screen.
* @param properties A map of custom properties.
* @param options A map that can include any of [these common fields](https://segment.com/docs/connections/spec/common/).
* Defaults to `null`.
*/
export function screenWithProperties(screenName, properties, options = null) {
if (!ExponentSegment.screenWithProperties) {
throw new UnavailabilityError('expo-analytics-segment', 'screenWithProperties');
}
ExponentSegment.screenWithProperties(screenName, properties, options);
}
// @needsAudit
/**
* Manually flush the event queue. You shouldn't need to call this in most cases.
*/
export function flush() {
if (!ExponentSegment.flush) {
throw new UnavailabilityError('expo-analytics-segment', 'flush');
}
ExponentSegment.flush();
}
// @missingDocs
export async function getEnabledAsync() {
if (!ExponentSegment.getEnabledAsync) {
throw new UnavailabilityError('expo-analytics-segment', 'getEnabledAsync');
}
const isEnabledNumber = await ExponentSegment.getEnabledAsync();
return !!isEnabledNumber;
}
// @missingDocs
export async function setEnabledAsync(enabled) {
if (!ExponentSegment.setEnabledAsync) {
throw new UnavailabilityError('expo-analytics-segment', 'setEnabledAsync');
}
await ExponentSegment.setEnabledAsync(enabled);
}
//# sourceMappingURL=Segment.js.map