Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion packages/core/RNAnalytics.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ Pod::Spec.new do |s|
s.source_files = 'ios/**/*.{m,h}'
s.static_framework = true

s.dependency 'Analytics', '~> 4.0.4'
s.dependency 'Analytics', '~> 4.0.5'
s.dependency 'React'
end

Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,10 @@ object RNAnalytics {
private val integrations = mutableSetOf<Integration.Factory>()
private val onReadyCallbacks = mutableMapOf<String, Analytics.Callback<Any?>>()

fun setIDFA(idfa: String) {
// do nothing; iOS only.
}

fun addIntegration(integration: Integration.Factory) {
integrations.add(integration)
}
Expand Down
2 changes: 1 addition & 1 deletion packages/core/docs/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@

**Ƭ Integration**: *`function` \| `object`*

*Defined in [analytics.ts:8](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L8)*
*Defined in analytics.ts:8*

___

50 changes: 35 additions & 15 deletions packages/core/docs/classes/analytics.client.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
* [middleware](analytics.client.md#middleware)
* [reset](analytics.client.md#reset)
* [screen](analytics.client.md#screen)
* [setIDFA](analytics.client.md#setidfa)
* [setup](analytics.client.md#setup)
* [track](analytics.client.md#track)
* [useNativeConfiguration](analytics.client.md#usenativeconfiguration)
Expand All @@ -39,7 +40,7 @@

**● ready**: *`false`* = false

*Defined in [analytics.ts:147](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L147)*
*Defined in analytics.ts:147*

Whether the client is ready to send events to Segment.

Expand All @@ -55,7 +56,7 @@ ___

▸ **alias**(newId: *`string`*, options?: *[Options]()*): `Promise`<`void`>

*Defined in [analytics.ts:317](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L317)*
*Defined in analytics.ts:325*

Merge two user identities, effectively connecting two sets of user data as one. This may not be supported by all integrations.

Expand All @@ -77,7 +78,7 @@ ___

▸ **catch**(handler: *[ErrorHandler]()*): `this`

*Defined in [analytics.ts:162](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L162)*
*Defined in analytics.ts:162*

Catch React-Native bridge errors

Expand All @@ -98,7 +99,7 @@ ___

▸ **disable**(): `Promise`<`void`>

*Defined in [analytics.ts:356](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L356)*
*Defined in analytics.ts:364*

Completely disable the sending of any analytics data.

Expand All @@ -113,7 +114,7 @@ ___

▸ **enable**(): `Promise`<`void`>

*Defined in [analytics.ts:346](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L346)*
*Defined in analytics.ts:354*

Enable the sending of analytics data. Enabled by default.

Expand All @@ -128,7 +129,7 @@ ___

▸ **flush**(): `Promise`<`void`>

*Defined in [analytics.ts:337](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L337)*
*Defined in analytics.ts:345*

Trigger an upload of all queued events.

Expand All @@ -143,7 +144,7 @@ ___

▸ **getAnonymousId**(): `Promise`<`string`>

*Defined in [analytics.ts:361](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L361)*
*Defined in analytics.ts:369*

Retrieve the anonymousId.

Expand All @@ -156,7 +157,7 @@ ___

▸ **group**(groupId: *`string`*, traits?: *[JsonMap]()*, options?: *[Options]()*): `Promise`<`void`>

*Defined in [analytics.ts:304](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L304)*
*Defined in analytics.ts:312*

Associate a user with a group, organization, company, project, or w/e _you_ call them.

Expand All @@ -179,7 +180,7 @@ ___

▸ **identify**(user: *`string`*, traits?: *[JsonMap]()*, options?: *[Options]()*): `Promise`<`void`>

*Defined in [analytics.ts:291](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L291)*
*Defined in analytics.ts:299*

Associate a user with their unique ID and record traits about them.

Expand All @@ -202,7 +203,7 @@ ___

▸ **middleware**(middleware: *[Middleware]()*): `this`

*Defined in [analytics.ts:200](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L200)*
*Defined in analytics.ts:208*

Append a new middleware to the middleware chain.

Expand Down Expand Up @@ -240,7 +241,7 @@ ___

▸ **reset**(): `Promise`<`void`>

*Defined in [analytics.ts:327](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L327)*
*Defined in analytics.ts:335*

Reset any user state that is cached on the device.

Expand All @@ -255,7 +256,7 @@ ___

▸ **screen**(name: *`string`*, properties?: *[JsonMap]()*, options?: *[Options]()*): `Promise`<`void`>

*Defined in [analytics.ts:276](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L276)*
*Defined in analytics.ts:284*

Record the screens or views your users see.

Expand All @@ -271,14 +272,33 @@ When a user views a screen in your app, you'll want to record that here. For som

**Returns:** `Promise`<`void`>

___
<a id="setidfa"></a>

### setIDFA

▸ **setIDFA**(idfa: *`string`*): `void`

*Defined in analytics.ts:172*

Sets the IDFA value on iOS. Customers are now responsible for collecting IDFA on their own.

**Parameters:**

| Name | Type |
| ------ | ------ |
| idfa | `string` |

**Returns:** `void`

___
<a id="setup"></a>

### setup

▸ **setup**(writeKey: *`string`*, configuration?: *[Configuration](../interfaces/analytics.configuration.md)*): `Promise`<`void`>

*Defined in [analytics.ts:239](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L239)*
*Defined in analytics.ts:247*

Setup the Analytics module. All calls made before are queued and only executed if the configuration was successful.

Expand Down Expand Up @@ -308,7 +328,7 @@ ___

▸ **track**(event: *`string`*, properties?: *[JsonMap]()*, options?: *[Options]()*): `Promise`<`void`>

*Defined in [analytics.ts:258](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L258)*
*Defined in analytics.ts:266*

Record the actions your users perform.

Expand All @@ -331,7 +351,7 @@ ___

▸ **useNativeConfiguration**(): `this`

*Defined in [analytics.ts:212](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L212)*
*Defined in analytics.ts:220*

Use the native configuration.

Expand Down
20 changes: 10 additions & 10 deletions packages/core/docs/interfaces/analytics.configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@

**● android**: *`undefined` \| `object`*

*Defined in [analytics.ts:120](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L120)*
*Defined in analytics.ts:120*

Android specific settings.

Expand All @@ -42,7 +42,7 @@ ___

**● debug**: *`undefined` \| `false` \| `true`*

*Defined in [analytics.ts:38](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L38)*
*Defined in analytics.ts:38*

___
<a id="defaultprojectsettings"></a>
Expand All @@ -51,7 +51,7 @@ ___

**● defaultProjectSettings**: *`undefined` \| `object`*

*Defined in [analytics.ts:46](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L46)*
*Defined in analytics.ts:46*

Default project settings to use, if Segment.com cannot be reached. An example configuration can be found here, using your write key: [](https://cdn-settings.segment.com/v1/projects/YOUR_WRITE_KEY/settings)[https://cdn-settings.segment.com/v1/projects/YOUR\_WRITE\_KEY/settings](https://cdn-settings.segment.com/v1/projects/YOUR_WRITE_KEY/settings)

Expand All @@ -62,7 +62,7 @@ ___

**● flushAt**: *`undefined` \| `number`*

*Defined in [analytics.ts:54](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L54)*
*Defined in analytics.ts:54*

The number of queued events that the analytics client should flush at. Setting this to `1` will not queue any events and will use more battery.

Expand All @@ -75,7 +75,7 @@ ___

**● ios**: *`undefined` \| `object`*

*Defined in [analytics.ts:102](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L102)*
*Defined in analytics.ts:102*

iOS specific settings.

Expand All @@ -86,7 +86,7 @@ ___

**● proxy**: *`undefined` \| `object`*

*Defined in [analytics.ts:72](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L72)*
*Defined in analytics.ts:72*

Whether the analytics client should send all requests through your own hosted proxy rather than directly to Segment. See: iOS: [https://segment.com/docs/connections/sources/catalog/libraries/mobile/ios/#proxy-http-calls](https://segment.com/docs/connections/sources/catalog/libraries/mobile/ios/#proxy-http-calls) android: [https://segment.com/docs/connections/sources/catalog/libraries/mobile/android/#proxy-http-calls](https://segment.com/docs/connections/sources/catalog/libraries/mobile/android/#proxy-http-calls)

Expand All @@ -99,7 +99,7 @@ ___

**● recordScreenViews**: *`undefined` \| `false` \| `true`*

*Defined in [analytics.ts:19](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L19)*
*Defined in analytics.ts:19*

Whether the analytics client should automatically make a screen call when a view controller is added to a view hierarchy. Because the iOS underlying implementation uses method swizzling, we recommend initializing the analytics client as early as possible.

Expand All @@ -112,7 +112,7 @@ ___

**● trackAppLifecycleEvents**: *`undefined` \| `false` \| `true`*

*Defined in [analytics.ts:26](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L26)*
*Defined in analytics.ts:26*

Whether the analytics client should automatically track application lifecycle events, such as "Application Installed", "Application Updated" and "Application Opened".

Expand All @@ -125,7 +125,7 @@ ___

**● trackAttributionData**: *`undefined` \| `false` \| `true`*

*Defined in [analytics.ts:32](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L32)*
*Defined in analytics.ts:32*

Whether the analytics client should automatically track attribution data from enabled providers using the mobile service.

Expand All @@ -138,7 +138,7 @@ ___

**● using**: *[Integration](../#integration)[]*

*Defined in [analytics.ts:37](https://github.com/adkenyon/analytics-react-native/blob/master/packages/core/src/analytics.ts#L37)*
*Defined in analytics.ts:37*

Register a set of integrations to be used with this Analytics instance.

Expand Down
13 changes: 12 additions & 1 deletion packages/core/ios/RNAnalytics/RNAnalytics.m
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@

static NSMutableSet* RNAnalyticsIntegrations = nil;
static NSLock* RNAnalyticsIntegrationsLock = nil;
static NSString* RNAnalyticsAdvertisingId = nil;
static BOOL RNAnalyaticsUseAdvertisingId = NO;

@implementation RNAnalytics

Expand Down Expand Up @@ -60,9 +62,14 @@ +(void)initialize {
config.trackApplicationLifecycleEvents = [options[@"trackAppLifecycleEvents"] boolValue];
config.trackAttributionData = [options[@"trackAttributionData"] boolValue];
config.flushAt = [options[@"flushAt"] integerValue];
config.enableAdvertisingTracking = [options[@"ios"][@"trackAdvertising"] boolValue];
config.enableAdvertisingTracking = RNAnalyaticsUseAdvertisingId = [options[@"ios"][@"trackAdvertising"] boolValue];
config.defaultSettings = options[@"defaultProjectSettings"];

// set this block regardless. the data will come in after the fact most likely.
config.adSupportBlock = ^NSString * _Nonnull{
return RNAnalyticsAdvertisingId;
};

if ([options valueForKey:@"proxy"]) {
NSDictionary *proxyOptions = (NSDictionary *)[options valueForKey:@"proxy"];

Expand Down Expand Up @@ -124,6 +131,10 @@ - (NSDictionary*)withContextAndIntegrations :(NSDictionary*)context :(NSDictiona
return @{ @"context": context, @"integrations": integrations ?: @{}};
}

RCT_EXPORT_METHOD(setIDFA:(NSString *)idfa) {
RNAnalyticsAdvertisingId = idfa;
}


RCT_EXPORT_METHOD(track:(NSString*)name :(NSDictionary*)properties :(NSDictionary*)integrations :(NSDictionary*)context) {
[SEGAnalytics.sharedAnalytics track:name
Expand Down
6 changes: 3 additions & 3 deletions packages/core/src/__tests__/configuration.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ it('uses the default configuration', async () => {
flushInterval: undefined
},
ios: {
trackAdvertising: true,
trackAdvertising: false,
trackDeepLinks: false
}
})
Expand All @@ -54,7 +54,7 @@ it('produces a valid configuration', async () => {
flushInterval: 72
},
ios: {
trackAdvertising: true,
trackAdvertising: false,
trackDeepLinks: true
}
})
Expand All @@ -80,7 +80,7 @@ it('produces a valid configuration', async () => {
flushInterval: 72
},
ios: {
trackAdvertising: true,
trackAdvertising: false,
trackDeepLinks: true
}
})
Expand Down
8 changes: 8 additions & 0 deletions packages/core/src/analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,14 @@ export module Analytics {

return this
}

/**
* Sets the IDFA value on iOS. Customers are now responsible for collecting
* IDFA on their own.
*/
public setIDFA(idfa: string) {
Bridge.setIDFA(idfa)
}

/**
* Append a new middleware to the middleware chain.
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/bridge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ export interface Bridge {
enable(): Promise<void>
disable(): Promise<void>
getAnonymousId(): Promise<string>
setIDFA(idfa: string): Promise<void>
}

const bridge: Bridge = NativeModules.RNAnalytics
Expand Down
Loading