Skip to content

Commit

Permalink
feat: implement setMinTimeBetweenSessionsMillis API (#75)
Browse files Browse the repository at this point in the history
* feat: implement setMinTimeBetweenSessionsMillis API

* chore: Show demonstration of setMinTimeBetweenSessions

* chore: update demo to show when value is updated

* chore: update demo to show when value is updated

* chore: update docsstring with default time param

Co-authored-by: Kelson Warner <kelson.warner@amplitude.com>
  • Loading branch information
dantetam and kelsonpw authored May 11, 2021
1 parent 347ad10 commit 4fc14bd
Show file tree
Hide file tree
Showing 9 changed files with 107 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -237,6 +237,15 @@ public void uploadEvents(String instanceName, Promise promise) {
}
}

@ReactMethod
public void setMinTimeBetweenSessionsMillis(String instanceName, double minTimeBetweenSessionsMillis, Promise promise) {
AmplitudeClient client = Amplitude.getInstance(instanceName);
synchronized (client) {
client.setMinTimeBetweenSessionsMillis((long) minTimeBetweenSessionsMillis);
promise.resolve(true);
}
}

private Revenue createRevenue(JSONObject properties) {
Revenue revenue = new Revenue();
try {
Expand Down
4 changes: 2 additions & 2 deletions example/ios/Podfile.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
PODS:
- Amplitude (8.2.0)
- amplitude-react-native (2.0.12):
- amplitude-react-native (2.2.0):
- Amplitude (= 8.2.0)
- React-Core
- boost-for-react-native (1.63.0)
Expand Down Expand Up @@ -355,7 +355,7 @@ EXTERNAL SOURCES:

SPEC CHECKSUMS:
Amplitude: 263118b9e691e73a1c864b05bb08a3aff3636d16
amplitude-react-native: c09a45650c3dd8bdef5da277721b9cb7b54d391b
amplitude-react-native: 1f421982e95ccc59abe2c77c8f276e177b5af0c9
boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c
DoubleConversion: cde416483dac037923206447da6e1454df403714
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
Expand Down
2 changes: 2 additions & 0 deletions example/src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ import {
GroupIdentifySection,
FlushEventsSection,
RevenueSection,
SessionsSection,
} from './SdkMethodSections';

export default function App() {
Expand All @@ -30,6 +31,7 @@ export default function App() {
<GroupIdentifySection />
<RevenueSection />
<FlushEventsSection />
<SessionsSection />
</AmplitudeProvider>
</ScrollView>
</SafeAreaView>
Expand Down
62 changes: 62 additions & 0 deletions example/src/SdkMethodSections/SessionsSection.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
import * as React from 'react';
import { View } from 'react-native';
import { Input, Button } from 'react-native-elements';
import { useAmplitude } from '../utils/amplitude';

import { SdkSectionLayout } from './SdkSectionLayout';

const DEFAULT_MIN_TIME_BETWEEN_MILLIS = 5 * 60 * 1000;

export const SessionsSection = () => {
const [
minTimeBetweenSessionsMillis,
setMinTimeBetweenSessionsMillis,
] = React.useState<number>(DEFAULT_MIN_TIME_BETWEEN_MILLIS);

const [
savedMinTimeBetweenSessionsMillis,
setSavedMinTimeBetweenSessionsMillis,
] = React.useState<number>(DEFAULT_MIN_TIME_BETWEEN_MILLIS);

const amplitude = useAmplitude();

return (
<SdkSectionLayout heading={'Sessions'}>
<View pointerEvents="none">
<Input
label={'Min Time Between Sessions (ms)'}
value={`${savedMinTimeBetweenSessionsMillis}${
savedMinTimeBetweenSessionsMillis ===
DEFAULT_MIN_TIME_BETWEEN_MILLIS
? ' (5 min default)'
: ''
}`}
editable={false}
/>
</View>
<Input
label={'New Min Time Between Sessions (ms)'}
placeholder={'Enter Min Time Between Sessions in Milliseconds'}
onChangeText={(text) => setMinTimeBetweenSessionsMillis(Number(text))}
value={`${minTimeBetweenSessionsMillis}`}
/>
<Button
title="Set Min Time Between Sessions (milliseconds)"
disabled={
minTimeBetweenSessionsMillis === DEFAULT_MIN_TIME_BETWEEN_MILLIS
}
onPress={() => {
amplitude
.setMinTimeBetweenSessionsMillis(minTimeBetweenSessionsMillis)
.then((success) => {
if (success) {
setSavedMinTimeBetweenSessionsMillis(
minTimeBetweenSessionsMillis,
);
}
});
}}
/>
</SdkSectionLayout>
);
};
2 changes: 2 additions & 0 deletions example/src/SdkMethodSections/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import { GroupAccountSection } from './GroupAccountSection';
import { GroupIdentifySection } from './GroupIdentifySection';
import { RevenueSection } from './RevenueSection';
import { FlushEventsSection } from './FlushEventsSection';
import { SessionsSection } from './SessionsSection';

export {
UserIDSection,
Expand All @@ -16,4 +17,5 @@ export {
GroupIdentifySection,
FlushEventsSection,
RevenueSection,
SessionsSection,
};
2 changes: 2 additions & 0 deletions ios/AmplitudeReactNative.m
Original file line number Diff line number Diff line change
Expand Up @@ -46,4 +46,6 @@ @interface RCT_EXTERN_MODULE(AmplitudeReactNative, NSObject)

RCT_EXTERN_METHOD(uploadEvents:(NSString *)instanceName resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)

RCT_EXTERN_METHOD(setMinTimeBetweenSessionsMillis:(NSString *)instanceName minTimeBetweenSessionsMillis:(double)minTimeBetweenSessionsMillis resolver:(RCTPromiseResolveBlock)resolve rejecter:(RCTPromiseRejectBlock)reject)

@end
9 changes: 9 additions & 0 deletions ios/AmplitudeReactNative.swift
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,15 @@ class ReactNative: NSObject {
Amplitude.instance(withName: instanceName).uploadEvents()
resolve(true)
}

@objc
func setMinTimeBetweenSessionsMillis(_ instanceName: String,
minTimeBetweenSessionsMillis: Int,
resolver resolve: RCTPromiseResolveBlock,
rejecter reject: RCTPromiseRejectBlock) -> Void {
Amplitude.instance(withName: instanceName).minTimeBetweenSessionsMillis = minTimeBetweenSessionsMillis
resolve(true)
}

private func createRevenue(_ userProperties: [String: Any]) -> AMPRevenue {
let revenue = AMPRevenue()
Expand Down
15 changes: 15 additions & 0 deletions src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -254,6 +254,21 @@ export class Amplitude {
return AmplitudeReactNative.uploadEvents(this.instanceName);
}

/**
* Sets the minimum cutoff time in millisseconds for sessions to be considered distinct.
* The default time is 5 minutes.
*
* @param minTimeBetweenSessionsMillis
*/
setMinTimeBetweenSessionsMillis(
minTimeBetweenSessionsMillis: number,
): Promise<boolean> {
return AmplitudeReactNative.setMinTimeBetweenSessionsMillis(
this.instanceName,
minTimeBetweenSessionsMillis,
);
}

// Private bridging calls
private _setLibraryName(libraryName: string): Promise<boolean> {
return AmplitudeReactNative.setLibraryName(this.instanceName, libraryName);
Expand Down
4 changes: 4 additions & 0 deletions src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -64,4 +64,8 @@ export interface AmplitudeReactNativeModule {
): Promise<boolean>;
clearUserProperties(instanceName: string): Promise<boolean>;
uploadEvents(instanceName: string): Promise<boolean>;
setMinTimeBetweenSessionsMillis(
instanceName: string,
minTimeBetweenSessionsMillis: number,
): Promise<boolean>;
}

0 comments on commit 4fc14bd

Please sign in to comment.