From 77c898a8744e0c7f6714e5095e829e4fa0554ed4 Mon Sep 17 00:00:00 2001 From: brojor Date: Wed, 8 Apr 2026 15:53:43 +0200 Subject: [PATCH] fix(analytics, android, ios): cast item INDEX param to integer The React Native bridge converts all JS numbers to double, but the native Firebase SDK expects FirebaseAnalytics.Param.INDEX as an integer/long. When a double is passed, Firebase does not recognise it as the standard ecommerce parameter and item_list_index ends up as (not set) in GA4 / BigQuery. Mirror the existing QUANTITY conversion for INDEX in both native modules so that JS numbers are coerced to integer before being forwarded to Firebase. --- .../analytics/ReactNativeFirebaseAnalyticsModule.java | 4 ++++ packages/analytics/ios/RNFBAnalytics/RNFBAnalyticsModule.m | 3 +++ 2 files changed, 7 insertions(+) diff --git a/packages/analytics/android/src/reactnative/java/io/invertase/firebase/analytics/ReactNativeFirebaseAnalyticsModule.java b/packages/analytics/android/src/reactnative/java/io/invertase/firebase/analytics/ReactNativeFirebaseAnalyticsModule.java index 85020c6383..f8b65a9bbc 100644 --- a/packages/analytics/android/src/reactnative/java/io/invertase/firebase/analytics/ReactNativeFirebaseAnalyticsModule.java +++ b/packages/analytics/android/src/reactnative/java/io/invertase/firebase/analytics/ReactNativeFirebaseAnalyticsModule.java @@ -211,6 +211,10 @@ private Bundle toBundle(ReadableMap readableMap) { double number = itemBundle.getDouble(FirebaseAnalytics.Param.QUANTITY); itemBundle.putInt(FirebaseAnalytics.Param.QUANTITY, (int) number); } + if (itemBundle.containsKey(FirebaseAnalytics.Param.INDEX)) { + double number = itemBundle.getDouble(FirebaseAnalytics.Param.INDEX); + itemBundle.putLong(FirebaseAnalytics.Param.INDEX, (long) number); + } validBundles.add(itemBundle); } } diff --git a/packages/analytics/ios/RNFBAnalytics/RNFBAnalyticsModule.m b/packages/analytics/ios/RNFBAnalytics/RNFBAnalyticsModule.m index afb9d4f2a2..b4f65fbf3c 100644 --- a/packages/analytics/ios/RNFBAnalytics/RNFBAnalyticsModule.m +++ b/packages/analytics/ios/RNFBAnalytics/RNFBAnalyticsModule.m @@ -271,6 +271,9 @@ - (NSDictionary *)cleanJavascriptParams:(NSDictionary *)params { if (item[kFIRParameterQuantity]) { item[kFIRParameterQuantity] = @([item[kFIRParameterQuantity] integerValue]); } + if (item[kFIRParameterIndex]) { + item[kFIRParameterIndex] = @([item[kFIRParameterIndex] integerValue]); + } [newItems addObject:[item copy]]; }]; newParams[kFIRParameterItems] = [newItems copy];