diff --git a/mParticle-Google-Analytics-Firebase-GA4/MPKitFirebaseGA4Analytics.m b/mParticle-Google-Analytics-Firebase-GA4/MPKitFirebaseGA4Analytics.m index 2fda5d3..b2b6597 100755 --- a/mParticle-Google-Analytics-Firebase-GA4/MPKitFirebaseGA4Analytics.m +++ b/mParticle-Google-Analytics-Firebase-GA4/MPKitFirebaseGA4Analytics.m @@ -175,8 +175,8 @@ - (MPKitExecStatus *)logScreen:(MPEvent *)event { return [self execStatus:MPKitReturnCodeFail]; } - NSString *standardizedFirebaseEventName = [self standardizeNameOrKey:event.name forEvent:YES]; - [FIRAnalytics logEventWithName:kFIREventScreenView parameters:@{kFIRParameterScreenName: standardizedFirebaseEventName}]; + NSMutableDictionary *screenParameters = [self getParametersForScreen:event]; + [FIRAnalytics logEventWithName:kFIREventScreenView parameters:screenParameters]; return [self execStatus:MPKitReturnCodeSuccess]; } @@ -260,7 +260,7 @@ - (NSString *)standardizeValue:(id)value forEvent:(BOOL)forEvent { return finalValue; } -- (NSDictionary *)standardizeValues:(NSDictionary *)values forEvent:(BOOL)forEvent { +- (NSMutableDictionary *)standardizeValues:(NSDictionary *)values forEvent:(BOOL)forEvent { NSMutableDictionary *standardizedValue = [[NSMutableDictionary alloc] init]; for (NSString *key in values.allKeys) { @@ -272,6 +272,13 @@ - (NSString *)standardizeValue:(id)value forEvent:(BOOL)forEvent { return standardizedValue; } +- (NSMutableDictionary *)getParametersForScreen:(MPEvent *)screenEvent { + NSMutableDictionary *standardizedScreenParameters = [self standardizeValues:screenEvent.customAttributes forEvent:YES]; + NSString *standardizedFirebaseEventName = [self standardizeNameOrKey:screenEvent.name forEvent:YES]; + standardizedScreenParameters[kFIRParameterScreenName] = standardizedFirebaseEventName; + return standardizedScreenParameters; +} + - (MPKitExecStatus *)onLoginComplete:(FilteredMParticleUser *)user request:(FilteredMPIdentityApiRequest *)request { if (forwardRequestsServerSide) { return [self execStatus:MPKitReturnCodeUnavailable]; diff --git a/mParticle-Google-Analytics-Firebase-GA4Tests/MPKitFirebaseGA4AnalyticsTests.m b/mParticle-Google-Analytics-Firebase-GA4Tests/MPKitFirebaseGA4AnalyticsTests.m index dcea287..4f8758b 100644 --- a/mParticle-Google-Analytics-Firebase-GA4Tests/MPKitFirebaseGA4AnalyticsTests.m +++ b/mParticle-Google-Analytics-Firebase-GA4Tests/MPKitFirebaseGA4AnalyticsTests.m @@ -12,7 +12,7 @@ - (NSString *)standardizeNameOrKey:(NSString *)nameOrKey forEvent:(BOOL)forEvent - (NSString *)standardizeValue:(id)value forEvent:(BOOL)forEvent; - (NSString *)getEventNameForCommerceEvent:(MPCommerceEvent *)commerceEvent parameters:(NSDictionary *)parameters; - (NSDictionary *)getParameterForCommerceEvent:(MPCommerceEvent *)commerceEvent; -- (NSMutableArray *)getParametersForProducts:(id)products; +- (NSMutableDictionary *)getParametersForScreen:(MPEvent *)screenEvent; @end @interface mParticle_Firebase_AnalyticsTests : XCTestCase @@ -334,4 +334,28 @@ - (void)testCommerceEventCheckoutOptions { XCTAssertEqualObjects(kFIREventAddShippingInfo, eventName); } +- (void)testScreenNameAttributes { + MPKitFirebaseGA4Analytics *exampleKit = [[MPKitFirebaseGA4Analytics alloc] init]; + [exampleKit didFinishLaunchingWithConfiguration:@{}]; + + MPEvent *event = [[MPEvent alloc] initWithName:@"testScreenName" type:MPEventTypeOther]; + event.customAttributes = @{@"testScreenAttribute":@"value"}; + MPKitExecStatus *execStatus = [exampleKit logScreen:event]; + + XCTAssertTrue(execStatus.success); + + NSMutableDictionary *screenParameters = [exampleKit getParametersForScreen:event]; + + // Even though we only pass one custom attribute, the parameters should include the standardized screen name, so the total expected count is two + XCTAssertEqual(screenParameters.count, 2); + + NSString *standardizedScreenName = [exampleKit standardizeNameOrKey:event.name forEvent:YES]; + NSString *screenNameParameter = screenParameters[kFIRParameterScreenName]; + + // Test screen name parameter is not Nil and exists in the screen parameters dictionary + XCTAssertNotNil(screenNameParameter); + // Test screen name parameter value is correct + XCTAssertEqualObjects(screenNameParameter, standardizedScreenName); +} + @end