Skip to content

Commit 3792343

Browse files
authored
feat: forward screen custom attributes (#29)
1 parent c9f820a commit 3792343

File tree

2 files changed

+35
-4
lines changed

2 files changed

+35
-4
lines changed

mParticle-Google-Analytics-Firebase-GA4/MPKitFirebaseGA4Analytics.m

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -175,8 +175,8 @@ - (MPKitExecStatus *)logScreen:(MPEvent *)event {
175175
return [self execStatus:MPKitReturnCodeFail];
176176
}
177177

178-
NSString *standardizedFirebaseEventName = [self standardizeNameOrKey:event.name forEvent:YES];
179-
[FIRAnalytics logEventWithName:kFIREventScreenView parameters:@{kFIRParameterScreenName: standardizedFirebaseEventName}];
178+
NSMutableDictionary *screenParameters = [self getParametersForScreen:event];
179+
[FIRAnalytics logEventWithName:kFIREventScreenView parameters:screenParameters];
180180

181181
return [self execStatus:MPKitReturnCodeSuccess];
182182
}
@@ -260,7 +260,7 @@ - (NSString *)standardizeValue:(id)value forEvent:(BOOL)forEvent {
260260
return finalValue;
261261
}
262262

263-
- (NSDictionary<NSString *, id> *)standardizeValues:(NSDictionary<NSString *, id> *)values forEvent:(BOOL)forEvent {
263+
- (NSMutableDictionary<NSString *, id> *)standardizeValues:(NSDictionary<NSString *, id> *)values forEvent:(BOOL)forEvent {
264264
NSMutableDictionary<NSString *, id> *standardizedValue = [[NSMutableDictionary alloc] init];
265265

266266
for (NSString *key in values.allKeys) {
@@ -272,6 +272,13 @@ - (NSString *)standardizeValue:(id)value forEvent:(BOOL)forEvent {
272272
return standardizedValue;
273273
}
274274

275+
- (NSMutableDictionary<NSString *, id> *)getParametersForScreen:(MPEvent *)screenEvent {
276+
NSMutableDictionary *standardizedScreenParameters = [self standardizeValues:screenEvent.customAttributes forEvent:YES];
277+
NSString *standardizedFirebaseEventName = [self standardizeNameOrKey:screenEvent.name forEvent:YES];
278+
standardizedScreenParameters[kFIRParameterScreenName] = standardizedFirebaseEventName;
279+
return standardizedScreenParameters;
280+
}
281+
275282
- (MPKitExecStatus *)onLoginComplete:(FilteredMParticleUser *)user request:(FilteredMPIdentityApiRequest *)request {
276283
if (forwardRequestsServerSide) {
277284
return [self execStatus:MPKitReturnCodeUnavailable];

mParticle-Google-Analytics-Firebase-GA4Tests/MPKitFirebaseGA4AnalyticsTests.m

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ - (NSString *)standardizeNameOrKey:(NSString *)nameOrKey forEvent:(BOOL)forEvent
1212
- (NSString *)standardizeValue:(id)value forEvent:(BOOL)forEvent;
1313
- (NSString *)getEventNameForCommerceEvent:(MPCommerceEvent *)commerceEvent parameters:(NSDictionary<NSString *, id> *)parameters;
1414
- (NSDictionary<NSString *, id> *)getParameterForCommerceEvent:(MPCommerceEvent *)commerceEvent;
15-
- (NSMutableArray *)getParametersForProducts:(id)products;
15+
- (NSMutableDictionary<NSString *, id> *)getParametersForScreen:(MPEvent *)screenEvent;
1616
@end
1717

1818
@interface mParticle_Firebase_AnalyticsTests : XCTestCase
@@ -334,4 +334,28 @@ - (void)testCommerceEventCheckoutOptions {
334334
XCTAssertEqualObjects(kFIREventAddShippingInfo, eventName);
335335
}
336336

337+
- (void)testScreenNameAttributes {
338+
MPKitFirebaseGA4Analytics *exampleKit = [[MPKitFirebaseGA4Analytics alloc] init];
339+
[exampleKit didFinishLaunchingWithConfiguration:@{}];
340+
341+
MPEvent *event = [[MPEvent alloc] initWithName:@"testScreenName" type:MPEventTypeOther];
342+
event.customAttributes = @{@"testScreenAttribute":@"value"};
343+
MPKitExecStatus *execStatus = [exampleKit logScreen:event];
344+
345+
XCTAssertTrue(execStatus.success);
346+
347+
NSMutableDictionary<NSString *, id> *screenParameters = [exampleKit getParametersForScreen:event];
348+
349+
// Even though we only pass one custom attribute, the parameters should include the standardized screen name, so the total expected count is two
350+
XCTAssertEqual(screenParameters.count, 2);
351+
352+
NSString *standardizedScreenName = [exampleKit standardizeNameOrKey:event.name forEvent:YES];
353+
NSString *screenNameParameter = screenParameters[kFIRParameterScreenName];
354+
355+
// Test screen name parameter is not Nil and exists in the screen parameters dictionary
356+
XCTAssertNotNil(screenNameParameter);
357+
// Test screen name parameter value is correct
358+
XCTAssertEqualObjects(screenNameParameter, standardizedScreenName);
359+
}
360+
337361
@end

0 commit comments

Comments
 (0)