Skip to content
Open
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
3 changes: 3 additions & 0 deletions android/src/main/java/com/mindboxsdk/MindboxSdkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,9 @@ class MindboxSdkModule(private val reactContext: ReactApplicationContext) : Reac
if (payload.has("shouldIncludeVersionCode")) {
configurationBuilder.shouldIncludeVersionCode(payload.optBoolean("shouldIncludeVersionCode", true))
}
if (payload.has("disableTrackingIds")) {
configurationBuilder.disableTrackingIds(payload.optBoolean("disableTrackingIds", false))
}
val configuration = configurationBuilder.build()

val handler = Handler(context.mainLooper)
Expand Down
48 changes: 48 additions & 0 deletions src/__tests__/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -545,6 +545,54 @@ describe('Testing Mindbox RN SDK', () => {
expect(JSON.parse(calledWith)).not.toHaveProperty('shouldIncludeVersionCode')
})

it('initialize passes disableTrackingIds true to native', async () => {
const {
NativeModules: { MindboxSdk: MindboxSdkNative },
} = require('react-native')
const MindboxSdk = require('../index').default

expect.assertions(1)

await MindboxSdk.initialize({
...initializationData,
disableTrackingIds: true,
})

const calledWith = (MindboxSdkNative.initialize as jest.Mock).mock.calls.slice(-1)[0][0]
expect(JSON.parse(calledWith)).toMatchObject({ disableTrackingIds: true })
})

it('initialize passes disableTrackingIds false to native', async () => {
const {
NativeModules: { MindboxSdk: MindboxSdkNative },
} = require('react-native')
const MindboxSdk = require('../index').default

expect.assertions(1)

await MindboxSdk.initialize({
...initializationData,
disableTrackingIds: false,
})

const calledWith = (MindboxSdkNative.initialize as jest.Mock).mock.calls.slice(-1)[0][0]
expect(JSON.parse(calledWith)).toMatchObject({ disableTrackingIds: false })
})

it('initialize does not include disableTrackingIds in payload when not provided', async () => {
const {
NativeModules: { MindboxSdk: MindboxSdkNative },
} = require('react-native')
const MindboxSdk = require('../index').default

expect.assertions(1)

await MindboxSdk.initialize(initializationData)

const calledWith = (MindboxSdkNative.initialize as jest.Mock).mock.calls.slice(-1)[0][0]
expect(JSON.parse(calledWith)).not.toHaveProperty('disableTrackingIds')
})

it('getDeviceUUID method works correctly', async () => {
const MindboxSdk = require('../index').default

Expand Down
7 changes: 6 additions & 1 deletion src/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ class MindboxSdkClass {
* previousUuid: '',
* operationsDomain: 'anonymizer.example.com',
* shouldIncludeVersionCode: false, // Android only (ignored on iOS). Default value is true
* disableTrackingIds: true, // Android only (ignored on iOS). Default value is false
* });
*/
public async initialize(initializationData: InitializationData) {
Expand All @@ -99,7 +100,7 @@ class MindboxSdkClass {
throw new Error('Wrong initialization data!')
}

const { domain, endpointId, subscribeCustomerIfCreated, shouldCreateCustomer, previousInstallId, previousUuid, operationsDomain, shouldIncludeVersionCode } = initializationData
const { domain, endpointId, subscribeCustomerIfCreated, shouldCreateCustomer, previousInstallId, previousUuid, operationsDomain, shouldIncludeVersionCode, disableTrackingIds } = initializationData

if (!domain || !endpointId) {
this._initializing = false
Expand Down Expand Up @@ -135,6 +136,10 @@ class MindboxSdkClass {
payload.shouldIncludeVersionCode = shouldIncludeVersionCode
}

if (typeof disableTrackingIds !== 'undefined') {
payload.disableTrackingIds = disableTrackingIds
}

try {
const payloadString = JSON.stringify(payload)
this._initialized = await MindboxSdkNative.initialize(payloadString)
Expand Down
13 changes: 13 additions & 0 deletions src/types/InitializationData.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,17 @@ export type InitializationData = {
* Default value is true.
*/
shouldIncludeVersionCode?: boolean
/**
* Android only, ignored on iOS. Turns off collection of the device tracking identifier
* (GAID from Google Mobile Services, OAID from Huawei Mobile Services) that the SDK otherwise
* reports to Mindbox together with the application events. Pass true to stop the collection.
* This is the only supported way to opt out: removing the AD_ID permission affects the whole app
* and does not stop OAID collection. The SDK never requests a runtime permission for it, and
* RuStore provides no tracking identifier. The value is applied on every initialization, so it
* can be turned on or off in a later app version. A changed value takes effect once initialize
* has run in that version; native work started earlier (push services set up at app start,
* background token refresh) still uses the previous value.
* Default value is false (the identifier is collected).
*/
disableTrackingIds?: boolean
}
Loading