Skip to content

Commit 684bb50

Browse files
MFratmikehardy
andauthored
feat(analytics): Adding default event parameters (#5246)
* Adding firebase default parameter function call to android * iOS implementation * e2e tests Co-authored-by: Mike Hardy <[email protected]>
1 parent 3f95171 commit 684bb50

File tree

7 files changed

+86
-0
lines changed

7 files changed

+86
-0
lines changed

packages/analytics/__tests__/analytics.test.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -164,6 +164,15 @@ describe('Analytics', function () {
164164
});
165165
});
166166

167+
describe('setDefaultEventParameters()', function () {
168+
it('errors if params is not a object', function () {
169+
// @ts-ignore test
170+
expect(() => firebase.analytics().setDefaultEventParameters('123')).toThrowError(
171+
"firebase.analytics().setDefaultEventParameters(*) 'params' expected an object value when it is defined.",
172+
);
173+
});
174+
});
175+
167176
describe('logAddToCart()', function () {
168177
it('errors if param is not an object', function () {
169178
// @ts-ignore test

packages/analytics/android/src/main/java/io/invertase/firebase/analytics/UniversalFirebaseAnalyticsModule.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,11 @@ Task<Void> resetAnalyticsData() {
9696
return null;
9797
});
9898
}
99+
100+
Task<Void> setDefaultEventParameters(Bundle parameters) {
101+
return Tasks.call(() -> {
102+
FirebaseAnalytics.getInstance(getContext()).setDefaultEventParameters(parameters);
103+
return null;
104+
});
105+
}
99106
}

packages/analytics/android/src/reactnative/java/io/invertase/firebase/analytics/ReactNativeFirebaseAnalyticsModule.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,17 @@ public void resetAnalyticsData(Promise promise) {
131131
});
132132
}
133133

134+
@ReactMethod
135+
public void setDefaultEventParameters(@Nullable ReadableMap params, Promise promise) {
136+
module.setDefaultEventParameters(toBundle(params)).addOnCompleteListener(task -> {
137+
if (task.isSuccessful()) {
138+
promise.resolve(task.getResult());
139+
} else {
140+
rejectPromiseWithExceptionMap(promise, task.getException());
141+
}
142+
});
143+
}
144+
134145
private Bundle toBundle(ReadableMap readableMap) {
135146
Bundle bundle = Arguments.toBundle(readableMap);
136147
if (bundle == null) {

packages/analytics/e2e/analytics.e2e.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,4 +418,18 @@ describe('analytics()', function () {
418418
});
419419
});
420420
});
421+
422+
describe('setDefaultEventParameters()', function () {
423+
it('set null default parameter', async function () {
424+
await firebase.analytics().setDefaultEventParameters(null);
425+
});
426+
427+
it('set undefined default parameter', async function () {
428+
await firebase.analytics().setDefaultEventParameters(undefined);
429+
});
430+
431+
it('set default parameters', async function () {
432+
await firebase.analytics().setDefaultEventParameters({ number: 1, stringn: '123' });
433+
});
434+
});
421435
});

packages/analytics/ios/RNFBAnalytics/RNFBAnalyticsModule.m

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,21 @@ - (dispatch_queue_t)methodQueue {
142142
return resolve([FIRAnalytics appInstanceID]);
143143
}
144144

145+
RCT_EXPORT_METHOD(setDefaultEventParameters:
146+
(NSDictionary *) params
147+
resolver:
148+
(RCTPromiseResolveBlock) resolve
149+
rejecter:
150+
(RCTPromiseRejectBlock) reject) {
151+
@try {
152+
[FIRAnalytics setDefaultEventParameters:[self cleanJavascriptParams:params]];
153+
} @catch (NSException *exception) {
154+
return [RNFBSharedUtils rejectPromiseWithExceptionDict:reject exception:exception];
155+
}
156+
157+
return resolve([NSNull null]);
158+
}
159+
145160
#pragma mark -
146161
#pragma mark Private methods
147162

packages/analytics/lib/index.d.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1468,6 +1468,26 @@ export namespace FirebaseAnalyticsTypes {
14681468
* @param params See {@link analytics.ViewSearchResultsParameters}.
14691469
*/
14701470
logViewSearchResults(params: ViewSearchResultsParameters): Promise<void>;
1471+
1472+
/**
1473+
* Adds parameters that will be set on every event logged from the SDK, including automatic ones.
1474+
*
1475+
* #### Example
1476+
*
1477+
* ```js
1478+
* await firebase.analytics().setDefaultEventParameters({
1479+
* userId: '1234',
1480+
* });
1481+
* ```
1482+
*
1483+
*
1484+
* @param params Parameters to be added to the map of parameters added to every event.
1485+
* They will be added to the map of default event parameters, replacing any existing
1486+
* parameter with the same name. Valid parameter values are String, long, and double.
1487+
* Setting a key's value to null will clear that parameter. Passing in a null bundle
1488+
* will clear all parameters.
1489+
*/
1490+
setDefaultEventParameters(params?: { [key: string]: any }): Promise<void>;
14711491
}
14721492
}
14731493

packages/analytics/lib/index.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -666,6 +666,16 @@ class FirebaseAnalyticsModule extends FirebaseModule {
666666
),
667667
);
668668
}
669+
670+
setDefaultEventParameters(params) {
671+
if (!isObject(params) && !isNull(params) && !isUndefined(params)) {
672+
throw new Error(
673+
"firebase.analytics().setDefaultEventParameters(*) 'params' expected an object value when it is defined.",
674+
);
675+
}
676+
677+
return this.native.setDefaultEventParameters(params);
678+
}
669679
}
670680

671681
// import { SDK_VERSION } from '@react-native-firebase/analytics';

0 commit comments

Comments
 (0)