Skip to content

[Feature] add support for supplying defaultProjectSettings #178

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 9 commits into from
Jun 5, 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
2 changes: 1 addition & 1 deletion packages/core/RNAnalytics.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ Pod::Spec.new do |s|
s.source_files = 'ios/**/*.{m,h}'
s.static_framework = true

s.dependency 'Analytics', '~> 3.8'
s.dependency 'Analytics', '3.9.0'
s.dependency 'React'
end
2 changes: 1 addition & 1 deletion packages/core/android/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ repositories {
}

dependencies {
api 'com.segment.analytics.android:analytics:4.5.0'
api 'com.segment.analytics.android:analytics:4.6.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 @@ -166,6 +166,10 @@ class RNAnalyticsModule(context: ReactApplicationContext): ReactContextBaseJavaM
this.trackApplicationLifecycleEvents(writeKey)
}

if(options.hasKey("defaultProjectSettings")) {
builder.defaultProjectSettings(Utils.toValueMap(options.getMap("defaultProjectSettings")))
}

RNAnalytics.setupCallbacks(analytics)

singletonJsonConfig = json
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package com.segment.analytics.reactnative.core

import com.facebook.react.bridge.ReadableArray
import com.facebook.react.bridge.ReadableMap
import com.facebook.react.bridge.ReadableType
import com.segment.analytics.ValueMap

object Utils {
fun toArray(readableArray: ReadableArray?): Array<Any?> {
if (readableArray == null) {
return arrayOfNulls(0)
}
val array = arrayOfNulls<Any>(readableArray.size())
for (i in 0 until readableArray.size()) {
val type = readableArray.getType(i)
when (type) {
ReadableType.Null -> array[i] = null
ReadableType.Boolean -> array[i] = readableArray.getBoolean(i)
ReadableType.Number -> array[i] = readableArray.getDouble(i)
ReadableType.String -> array[i] = readableArray.getString(i)
ReadableType.Map -> array[i] = toValueMap(readableArray.getMap(i))
ReadableType.Array -> array[i] = toArray(readableArray.getArray(i))
}
}
return array
}

fun toValueMap(readableMap: ReadableMap?): ValueMap {
if (readableMap == null) {
return ValueMap()
}
val map = ValueMap()
val iterator = readableMap.keySetIterator()
while (iterator.hasNextKey()) {
val key = iterator.nextKey()
val type = readableMap.getType(key)
when (type) {
ReadableType.Null -> map[key] = null
ReadableType.Boolean -> map[key] = readableMap.getBoolean(key)
ReadableType.Number -> map[key] = readableMap.getDouble(key)
ReadableType.String -> map[key] = readableMap.getString(key)
ReadableType.Map -> map[key] = toValueMap(readableMap.getMap(key))
ReadableType.Array -> map[key] = toArray(readableMap.getArray(key))
}
}
return map
}
}
30 changes: 15 additions & 15 deletions packages/core/docs/classes/analytics.client.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@

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

*Defined in [analytics.ts:96](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L96)*
*Defined in [analytics.ts:104](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L104)*

Whether the client is ready to send events to Segment.

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

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

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

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 +77,7 @@ ___

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

*Defined in [analytics.ts:111](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L111)*
*Defined in [analytics.ts:119](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L119)*

Catch React-Native bridge errors

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

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

*Defined in [analytics.ts:305](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L305)*
*Defined in [analytics.ts:313](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L313)*

Completely disable the sending of any analytics data.

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

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

*Defined in [analytics.ts:295](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L295)*
*Defined in [analytics.ts:303](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L303)*

Enable the sending of analytics data. Enabled by default.

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

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

*Defined in [analytics.ts:286](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L286)*
*Defined in [analytics.ts:294](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L294)*

Trigger an upload of all queued events.

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

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

*Defined in [analytics.ts:310](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L310)*
*Defined in [analytics.ts:318](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L318)*

Retrieve the anonymousId.

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

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

*Defined in [analytics.ts:253](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L253)*
*Defined in [analytics.ts:261](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L261)*

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

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

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

*Defined in [analytics.ts:240](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L240)*
*Defined in [analytics.ts:248](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L248)*

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

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

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

*Defined in [analytics.ts:149](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L149)*
*Defined in [analytics.ts:157](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L157)*

Append a new middleware to the middleware chain.

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

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

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

Reset any user state that is cached on the device.

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

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

*Defined in [analytics.ts:225](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L225)*
*Defined in [analytics.ts:233](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L233)*

Record the screens or views your users see.

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

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

*Defined in [analytics.ts:188](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L188)*
*Defined in [analytics.ts:196](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L196)*

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

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

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

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

Record the actions your users perform.

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

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

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

Use the native configuration.

Expand Down
18 changes: 15 additions & 3 deletions packages/core/docs/interfaces/analytics.configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@

* [android](analytics.configuration.md#android)
* [debug](analytics.configuration.md#debug)
* [defaultProjectSettings](analytics.configuration.md#defaultprojectsettings)
* [flushAt](analytics.configuration.md#flushat)
* [ios](analytics.configuration.md#ios)
* [recordScreenViews](analytics.configuration.md#recordscreenviews)
Expand All @@ -29,7 +30,7 @@

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

*Defined in [analytics.ts:69](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L69)*
*Defined in [analytics.ts:77](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L77)*

Android specific settings.

Expand All @@ -42,14 +43,25 @@ ___

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

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

### `<Optional>` defaultProjectSettings

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

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

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)

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

### `<Optional>` flushAt

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

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

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 @@ -62,7 +74,7 @@ ___

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

*Defined in [analytics.ts:51](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L51)*
*Defined in [analytics.ts:59](https://github.com/segmentio/analytics-react-native/blob/master/packages/core/src/analytics.ts#L59)*

iOS specific settings.

Expand Down
2 changes: 1 addition & 1 deletion packages/core/ios/RNAnalytics/RNAnalytics.h
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
// RNAnalytics
//
// Created by fathy on 05/08/2018.
// Copyright © 2018 Segment.io, Inc. All rights reserved.
// Copyright © 2020 Segment.io, Inc. All rights reserved.
//

#if __has_include("RCTBridgeModule.h")
Expand Down
1 change: 1 addition & 0 deletions packages/core/ios/RNAnalytics/RNAnalytics.m
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ +(void)initialize {
config.trackAttributionData = [options[@"trackAttributionData"] boolValue];
config.flushAt = [options[@"flushAt"] integerValue];
config.enableAdvertisingTracking = [options[@"ios"][@"trackAdvertising"] boolValue];
config.defaultSettings = options[@"defaultProjectSettings"];

for(id factory in RNAnalyticsIntegrations) {
[config use:factory];
Expand Down
15 changes: 15 additions & 0 deletions packages/core/src/__tests__/configuration.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ it('uses the default configuration', async () => {
expect(await configure(writeKey, {})).toEqual(
withIntegrity({
debug: false,
defaultProjectSettings: {},
flushAt: 20,
recordScreenViews: false,
trackAppLifecycleEvents: false,
Expand All @@ -36,6 +37,13 @@ it('uses the default configuration', async () => {
it('produces a valid configuration', async () => {
const config = await configure(writeKey, {
debug: true,
defaultProjectSettings: {
integrations: {
Adjust: {
appToken: '13213'
}
}
},
flushAt: 42,
recordScreenViews: true,
trackAppLifecycleEvents: true,
Expand All @@ -54,6 +62,13 @@ it('produces a valid configuration', async () => {
expect(config).toEqual(
withIntegrity({
debug: true,
defaultProjectSettings: {
integrations: {
Adjust: {
appToken: '13213'
}
}
},
flushAt: 42,
recordScreenViews: true,
trackAppLifecycleEvents: true,
Expand Down
Loading