analytics_hub_firebase 0.0.1
analytics_hub_firebase: ^0.0.1 copied to clipboard
Firebase analytics provider for analytics_hub.
analytics_hub_firebase #
This documentation is also available in Ukrainian.
analytics_hub_firebase is a provider that connects analytics_hub
to Firebase Analytics.
It provides:
FirebaseAnalyticsHubProvider– anAnalytycsProviderimplementation backed byFirebaseAnalytics;FirebaseAnalyticsHubProviderKey– provider key used by events;FirebaseAnalyticsEventResolver/FirebaseAnalyticsECommerceEventResolver– resolvers that mapanalytics_hubevents into Firebase SDK calls.
Installation #
In your app pubspec.yaml:
dependencies:
firebase_core: ^2.0.0
firebase_analytics: ^10.0.0
analytics_hub: ^0.0.1
analytics_hub_firebase: ^0.0.1
Make sure you call Firebase.initializeApp() in main() according to the official docs.
Quick start #
Simplified version of example/analytics_hub_firebase_example.dart:
import 'package:analytics_hub/analytics_hub.dart';
import 'package:analytics_hub_firebase/analytics_hub_firebase.dart';
class EmptySessionDelegate implements HubSessionDelegate {
@override
Stream<Session?> get sessionStream => Stream.value(null);
@override
Future<Session?> getSession() async => null;
}
class ExampleSelectPromotionECommerceEvent
extends SelectPromotionECommerceEvent {
const ExampleSelectPromotionECommerceEvent({required this.creativeName});
final String creativeName;
@override
SelectPromotionECommerceEventData get data =>
SelectPromotionECommerceEventData(
creativeName: creativeName,
);
@override
Set<ProviderKey<ECommerceEventResolver>> get providerKeys => {
const FirebaseAnalyticsHubProviderKey(),
};
}
Future<void> main() async {
// TODO: call Firebase.initializeApp() before this
final hub = AnalyticsHub(
sessionDelegate: EmptySessionDelegate(),
providers: [
FirebaseAnalyticsHubProvider.fromInstance(),
],
);
await hub.initialize();
await hub.sendEvent(
const ExampleSelectPromotionECommerceEvent(
creativeName: 'creative_name',
),
);
await hub.dispose();
}
Supported event types #
FirebaseAnalyticsEventResolver implements:
LogEventResolverECommerceEventResolver
and internally delegates to FirebaseAnalytics and FirebaseAnalyticsECommerceEventResolver.
1. Log events (LogEvent) #
Any LogEvent that includes FirebaseAnalyticsHubProviderKey
in its providerKeys set will be sent to Firebase using logEvent:
class ExampleLogEvent extends LogEvent {
const ExampleLogEvent({required this.value}) : super('example_log_event');
final String value;
@override
Map<String, Object>? get properties => {'value': value};
@override
Set<ProviderKey<LogEventResolver>> get providerKeys => {
const FirebaseAnalyticsHubProviderKey(),
};
}
Mapping in Firebase:
_analytics.logEvent(
name: event.name,
parameters: event.properties,
);
So:
event.name→nameinlogEvent;event.properties→parameters.
2. E‑commerce events (ECommerceEvent) #
Currently supported:
SelectPromotionECommerceEvent- handled via
FirebaseAnalyticsECommerceEventResolver.
- handled via
Mapping in Firebase:
Future<void> _resolveSelectPromotionEvent(
SelectPromotionECommerceEvent event,
) =>
_analytics.logSelectPromotion(
creativeName: event.data.creativeName,
creativeSlot: event.data.creativeSlot,
locationId: event.data.locationId,
promotionId: event.data.promotionId,
promotionName: event.data.promotionName,
parameters: event.data.parameters,
);
Whatever you put into SelectPromotionECommerceEventData
is passed directly to logSelectPromotion.
Example:
class PromoClickEvent extends SelectPromotionECommerceEvent {
const PromoClickEvent({required this.promoId, required this.creativeName});
final String promoId;
final String creativeName;
@override
SelectPromotionECommerceEventData get data =>
SelectPromotionECommerceEventData(
creativeName: creativeName,
promotionId: promoId,
);
@override
Set<ProviderKey<ECommerceEventResolver>> get providerKeys => {
const FirebaseAnalyticsHubProviderKey(),
};
}
Session handling #
FirebaseAnalyticsHubProvider implements setSession as:
@override
Future<void> setSession(Session? session) async {
await _analytics.setUserId(id: session?.id);
}
- If
Sessionis non‑null,userIdis set in Firebase. - If
Session == null,userIdis reset (id: null).
This lets you manage the session centrally via HubSessionDelegate
instead of calling Firebase APIs directly throughout your app.
Roadmap: planned events #
On the Firebase provider level, the next logical steps are:
- Additional e‑commerce events:
view_item,view_item_list,select_item,add_to_cart,add_to_wishlist,begin_checkout,add_payment_info,add_shipping_info,purchase,refund, and other standard GA4 events.
- Matching
ECommerceEventsubtypes in the core package and mappings inFirebaseAnalyticsECommerceEventResolver.
The idea is that all common GA4 e‑commerce flows can be expressed as
strongly typed events in analytics_hub and automatically mapped
to Firebase through this provider.
When to use analytics_hub_firebase #
- You already use Firebase Analytics and want to:
- strongly type your events in Dart;
- share a single event model across multiple analytics SDKs;
- manage sessions centrally.
- You plan to add other providers (e.g. Mixpanel) and would like to reuse the same event classes instead of duplicating logic.