Skip to content

Remove refs to trackAttributionData and upgrade deps #230

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Oct 22, 2020
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
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,6 @@ analytics
using: [mixpanel, firebase],
recordScreenViews: true,
trackAppLifecycleEvents: true,
trackAttributionData: true,

android: {
flushInterval: 60000, // 60 seconds
Expand Down
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'
s.dependency 'Analytics', '~> 4.1'
s.dependency 'React'
end

4 changes: 2 additions & 2 deletions packages/core/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ def safeExtGet(prop, fallback) {
}

buildscript {
ext.defaultKotlinVersion = '1.3.21'
ext.defaultKotlinVersion = '1.4.0'

repositories {
jcenter()
Expand Down Expand Up @@ -39,7 +39,7 @@ repositories {
}

dependencies {
api 'com.segment.analytics.android:analytics:4.+'
api 'com.segment.analytics.android:analytics:4.9.0'

api 'com.facebook.react:react-native:+'
api "org.jetbrains.kotlin:kotlin-stdlib:${rootProject.ext.has("kotlinVersion") ? rootProject.ext.get("kotlinVersion") : defaultKotlinVersion}"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -128,11 +128,6 @@ class RNAnalyticsModule(context: ReactApplicationContext): ReactContextBaseJavaM
builder.recordScreenViews()
}


if(options.getBoolean("trackAttributionData")) {
builder.trackAttributionInformation()
}

if(options.hasKey("android") && options.getType("android") == ReadableType.Map) {
val androidOptions = options.getMap("android")!!
if(androidOptions.hasKey("flushInterval")) {
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*
*Defined in [analytics.ts:8](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L8)*

___

32 changes: 16 additions & 16 deletions packages/core/docs/classes/analytics.client.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@

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

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

Whether the client is ready to send events to Segment.

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

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

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

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

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

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

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

Catch React-Native bridge errors

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

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

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

Completely disable the sending of any analytics data.

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

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

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

Enable the sending of analytics data. Enabled by default.

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

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

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

Trigger an upload of all queued events.

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

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

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

Retrieve the anonymousId.

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

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

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

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

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

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

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

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

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

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

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

Append a new middleware to the middleware chain.

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

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

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

Reset any user state that is cached on the device.

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

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

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

Record the screens or views your users see.

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

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

*Defined in analytics.ts:172*
*Defined in [analytics.ts:171](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L171)*

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

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

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

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

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

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

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

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

Record the actions your users perform.

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

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

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

Use the native configuration.

Expand Down
24 changes: 11 additions & 13 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*
*Defined in [analytics.ts:119](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L119)*

Android specific settings.

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

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

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

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

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

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

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*
*Defined in [analytics.ts:53](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L53)*

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*
*Defined in [analytics.ts:101](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L101)*

iOS specific settings.

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

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

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

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*
*Defined in [analytics.ts:19](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L19)*

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*
*Defined in [analytics.ts:26](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L26)*

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

Expand All @@ -125,11 +125,9 @@ ___

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

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

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

Disabled by default.
*__deprecated__*: The property should not be used

___
<a id="using"></a>
Expand All @@ -138,7 +136,7 @@ ___

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

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

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

Expand Down
29 changes: 14 additions & 15 deletions packages/core/ios/RNAnalytics/RNAnalytics.m
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ +(void)addIntegration:(id)factory {

+(void)initialize {
[super initialize];

RNAnalyticsIntegrations = [NSMutableSet new];
RNAnalyticsIntegrationsLock = [NSLock new];
}
Expand Down Expand Up @@ -57,50 +57,49 @@ +(void)initialize {
}

SEGAnalyticsConfiguration* config = [SEGAnalyticsConfiguration configurationWithWriteKey:options[@"writeKey"]];

config.recordScreenViews = [options[@"recordScreenViews"] boolValue];
config.trackApplicationLifecycleEvents = [options[@"trackAppLifecycleEvents"] boolValue];
config.trackAttributionData = [options[@"trackAttributionData"] boolValue];
config.flushAt = [options[@"flushAt"] integerValue];
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"];

config.requestFactory = ^(NSURL *url) {
NSURLComponents *components = [NSURLComponents componentsWithURL:url resolvingAgainstBaseURL:NO];

if ([proxyOptions valueForKey:@"scheme"]) {
components.scheme = [proxyOptions[@"scheme"] stringValue];
}

if ([proxyOptions valueForKey:@"host"]) {
components.host = [proxyOptions[@"host"] stringValue];
}

if ([proxyOptions valueForKey:@"port"]) {
components.port = [NSNumber numberWithInt:[proxyOptions[@"port"] intValue]];
}

if ([proxyOptions valueForKey:@"path"]) {
components.path = [[proxyOptions[@"path"] stringValue] stringByAppendingString:components.path];
}

NSURL *transformedURL = components.URL;
return [NSMutableURLRequest requestWithURL:transformedURL];
};
}

for(id factory in RNAnalyticsIntegrations) {
[config use:factory];
}

[SEGAnalytics debug:[options[@"debug"] boolValue]];

@try {
Expand All @@ -109,14 +108,14 @@ +(void)initialize {
@catch(NSError* error) {
return rejecter(@"E_SEGMENT_ERROR", @"Unexpected native Analtyics error", error);
}

// On iOS we use method swizzling to intercept lifecycle events
// However, React-Native calls our library after applicationDidFinishLaunchingWithOptions: is called
// We fix this by manually calling this method at setup-time
// TODO(fathyb): We should probably implement a dedicated API on the native part
if(config.trackApplicationLifecycleEvents) {
SEL selector = @selector(_applicationDidFinishLaunchingWithOptions:);

if ([SEGAnalytics.sharedAnalytics respondsToSelector:selector]) {
[SEGAnalytics.sharedAnalytics performSelector:selector
withObject:_bridge.launchOptions];
Expand Down
Loading