diff --git a/lib/core/analytics/firebase_analytics_config.dart b/lib/core/analytics/firebase_analytics_config.dart new file mode 100644 index 0000000..2542af4 --- /dev/null +++ b/lib/core/analytics/firebase_analytics_config.dart @@ -0,0 +1,13 @@ +import 'package:firebase_analytics/firebase_analytics.dart'; + +/// Firebase Analytics feeds the linked GA4 property (`G-DHR81R6Z63` on web, +/// native app streams for iOS/Android). One instance is reused across the app +/// for events, and one observer tracks GoRouter screen transitions. +class FirebaseAnalyticsConfig { + FirebaseAnalyticsConfig._(); + + static final FirebaseAnalytics instance = FirebaseAnalytics.instance; + + static final FirebaseAnalyticsObserver navigationObserver = + FirebaseAnalyticsObserver(analytics: instance); +} diff --git a/lib/routing/app_router.dart b/lib/routing/app_router.dart index f867d5a..c0a9c2f 100644 --- a/lib/routing/app_router.dart +++ b/lib/routing/app_router.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:go_router/go_router.dart'; +import 'package:real_estate_mobile/core/analytics/firebase_analytics_config.dart'; import 'package:real_estate_mobile/core/analytics/umami_analytics.dart'; import 'package:real_estate_mobile/core/constants/app_colors.dart'; import 'package:real_estate_mobile/core/widgets/app_shell.dart'; @@ -45,7 +46,10 @@ final routerProvider = Provider((ref) { return GoRouter( initialLocation: '/splash', refreshListenable: authRefreshNotifier, - observers: [UmamiAnalytics.navigationObserver], + observers: [ + UmamiAnalytics.navigationObserver, + FirebaseAnalyticsConfig.navigationObserver, + ], redirect: (context, state) { final authState = ref.read(authProvider); final isAuthenticated = authState.status == AuthStatus.authenticated; diff --git a/macos/Flutter/GeneratedPluginRegistrant.swift b/macos/Flutter/GeneratedPluginRegistrant.swift index 16037a9..c693348 100644 --- a/macos/Flutter/GeneratedPluginRegistrant.swift +++ b/macos/Flutter/GeneratedPluginRegistrant.swift @@ -10,6 +10,7 @@ import device_info_plus import emoji_picker_flutter import facebook_auth_desktop import file_selector_macos +import firebase_analytics import firebase_core import firebase_messaging import flutter_local_notifications @@ -29,6 +30,7 @@ func RegisterGeneratedPlugins(registry: FlutterPluginRegistry) { EmojiPickerFlutterPlugin.register(with: registry.registrar(forPlugin: "EmojiPickerFlutterPlugin")) FacebookAuthDesktopPlugin.register(with: registry.registrar(forPlugin: "FacebookAuthDesktopPlugin")) FileSelectorPlugin.register(with: registry.registrar(forPlugin: "FileSelectorPlugin")) + FirebaseAnalyticsPlugin.register(with: registry.registrar(forPlugin: "FirebaseAnalyticsPlugin")) FLTFirebaseCorePlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseCorePlugin")) FLTFirebaseMessagingPlugin.register(with: registry.registrar(forPlugin: "FLTFirebaseMessagingPlugin")) FlutterLocalNotificationsPlugin.register(with: registry.registrar(forPlugin: "FlutterLocalNotificationsPlugin")) diff --git a/pubspec.lock b/pubspec.lock index 048350a..410b08d 100644 --- a/pubspec.lock +++ b/pubspec.lock @@ -393,6 +393,30 @@ packages: url: "https://pub.dev" source: hosted version: "0.9.3+5" + firebase_analytics: + dependency: "direct main" + description: + name: firebase_analytics + sha256: "4f85b161772e1d54a66893ef131c0a44bd9e552efa78b33d5f4f60d2caa5c8a3" + url: "https://pub.dev" + source: hosted + version: "11.6.0" + firebase_analytics_platform_interface: + dependency: transitive + description: + name: firebase_analytics_platform_interface + sha256: a44b6d1155ed5cae7641e3de7163111cfd9f6f6c954ca916dc6a3bdfa86bf845 + url: "https://pub.dev" + source: hosted + version: "4.4.3" + firebase_analytics_web: + dependency: transitive + description: + name: firebase_analytics_web + sha256: c7d1ed1f86ae64215757518af5576ff88341c8ce5741988c05cc3b2e07b0b273 + url: "https://pub.dev" + source: hosted + version: "0.5.10+16" firebase_core: dependency: "direct main" description: diff --git a/pubspec.yaml b/pubspec.yaml index 3ffd800..4fe04c6 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -71,6 +71,9 @@ dependencies: # Microsoft Clarity (session recording / heatmaps) clarity_flutter: ^1.8.0 + # Google Analytics (via Firebase Analytics — feeds the linked GA4 property) + firebase_analytics: ^11.3.0 + dev_dependencies: flutter_test: sdk: flutter