Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(firebase_analytics): upgrade analytics web to v9 sdk #8810

Merged
merged 5 commits into from
Jun 28, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,11 @@ void testsMain() {
analytics = FirebaseAnalytics.instance;
});

test('isSupported', () async {
final result = await FirebaseAnalytics.instance.isSupported();
expect(result, isA<bool>());
});

test('logEvent', () async {
await expectLater(analytics.logEvent(name: 'testing'), completes);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,10 @@ class FirebaseAnalytics extends FirebasePluginPlatform {
return FirebaseAnalytics.instanceFor(app: defaultAppInstance);
}

Future<bool> isSupported() {
return _delegate.isSupported();
}

/// Logs a custom Flutter Analytics event with the given [name] and event [parameters].
Future<void> logEvent({
required String name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,12 @@ class MethodChannelFirebaseAnalytics extends FirebaseAnalyticsPlatform {
return MethodChannelFirebaseAnalytics(app: app);
}

/// Returns "true" as this API is used to inform users of web browser support
@override
Future<bool> isSupported() {
return Future.value(true);
}

@override
Future<void> logEvent({
required String name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ abstract class FirebaseAnalyticsPlatform extends PlatformInterface {
throw UnimplementedError('delegateFor() is not implemented');
}

/// isSupported() informs web users whether
/// the browser supports Firebase.Analytics
Future<bool> isSupported() {
throw UnimplementedError('isSupported() is not implemented');
}

/// Logs the given event [name] with the given [parameters].
Future<void> logEvent({
required String name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@ class FirebaseAnalyticsWeb extends FirebaseAnalyticsPlatform {
return FirebaseAnalyticsWeb(app: app);
}

@override
Future<bool> isSupported() {
return analytics_interop.Analytics.isSupported();
}

@override
Future<void> logEvent({
required String name,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import 'dart:js_util' as util;
import 'package:firebase_analytics_platform_interface/firebase_analytics_platform_interface.dart';
import 'package:firebase_core_web/firebase_core_web_interop.dart';

import 'firebase_interop.dart' as firebase_interop;
import 'analytics_interop.dart' as analytics_interop;

export 'analytics_interop.dart';
Expand All @@ -18,8 +17,8 @@ export 'analytics_interop.dart';
Analytics getAnalyticsInstance([App? app]) {
return Analytics.getInstance(
app != null
? firebase_interop.analytics(app.jsObject)
: firebase_interop.analytics(),
? analytics_interop.getAnalytics(app.jsObject)
: analytics_interop.getAnalytics(),
);
}

Expand All @@ -33,6 +32,10 @@ class Analytics extends JsObjectWrapper<analytics_interop.AnalyticsJsImpl> {
return _expando[jsObject] ??= Analytics._fromJsObject(jsObject);
}

static Future<bool> isSupported() {
return handleThenable(analytics_interop.isSupported());
}

/// Non-null App for this instance of analytics service.
App get app => App.getInstance(jsObject.app);

Expand All @@ -41,18 +44,24 @@ class Analytics extends JsObjectWrapper<analytics_interop.AnalyticsJsImpl> {
Map<String, Object?>? parameters,
AnalyticsCallOptions? callOptions,
}) {
return jsObject.logEvent(name, util.jsify(parameters ?? {}), callOptions);
return analytics_interop.logEvent(
jsObject,
name,
util.jsify(parameters ?? {}),
callOptions,
);
}

void setAnalyticsCollectionEnabled({required bool enabled}) {
return jsObject.setAnalyticsCollectionEnabled(enabled);
return analytics_interop.setAnalyticsCollectionEnabled(jsObject, enabled);
}

void setCurrentScreen({
String? screenName,
AnalyticsCallOptions? callOptions,
}) {
return jsObject.setCurrentScreen(
return analytics_interop.setCurrentScreen(
jsObject,
screenName,
callOptions,
);
Expand All @@ -62,7 +71,8 @@ class Analytics extends JsObjectWrapper<analytics_interop.AnalyticsJsImpl> {
String? id,
AnalyticsCallOptions? callOptions,
}) {
return jsObject.setUserId(
return analytics_interop.setUserId(
jsObject,
id,
callOptions,
);
Expand All @@ -73,8 +83,9 @@ class Analytics extends JsObjectWrapper<analytics_interop.AnalyticsJsImpl> {
required String? value,
AnalyticsCallOptions? callOptions,
}) {
return jsObject.setUserProperties(
{name: value},
return analytics_interop.setUserProperties(
jsObject,
util.jsify({name: value}),
callOptions,
);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,59 @@

// ignore_for_file: avoid_unused_constructor_parameters, non_constant_identifier_names, public_member_api_docs

@JS('firebase.analytics')
@JS('firebase_analytics')
library firebase_interop.analytics;

import 'package:firebase_analytics_platform_interface/firebase_analytics_platform_interface.dart';
import 'package:firebase_core_web/firebase_core_web_interop.dart';

import 'package:js/js.dart';

@JS()
external AnalyticsJsImpl getAnalytics([AppJsImpl? app]);

@JS()
external AnalyticsJsImpl initializeAnalytics([AppJsImpl app]);

@JS()
external PromiseJsImpl<bool> isSupported();

@JS()
external void logEvent(
AnalyticsJsImpl analytics,
String eventName,
dynamic parameters,
AnalyticsCallOptions? callOptions,
);

@JS()
external void setAnalyticsCollectionEnabled(
AnalyticsJsImpl analytics,
bool enabled,
);

@JS()
external void setCurrentScreen(
AnalyticsJsImpl analytics,
String? screenName,
AnalyticsCallOptions? callOptions,
);

@JS()
external void setUserId(
AnalyticsJsImpl analytics,
String? id,
AnalyticsCallOptions? callOptions,
);

@JS()
external void setUserProperties(
AnalyticsJsImpl analytics,
dynamic property,
AnalyticsCallOptions? callOptions,
);

@JS('Analytics')
abstract class AnalyticsJsImpl {
external AppJsImpl get app;

external void logEvent(
String eventName,
dynamic parameters,
AnalyticsCallOptions? callOptions,
);

external void setAnalyticsCollectionEnabled(bool enabled);

external void setCurrentScreen(
String? screenName,
AnalyticsCallOptions? callOptions,
);

external void setUserId(
String? id,
AnalyticsCallOptions? callOptions,
);

external void setUserProperties(
Map<String, Object?> property,
AnalyticsCallOptions? callOptions,
);
}

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,11 @@ void setupTests() {
);
});

test('isSupported', () async {
final result = await FirebaseAnalytics.instance.isSupported();
expect(result, isA<bool>());
});

test('logEvent', () async {
await expectLater(
FirebaseAnalytics.instance.logEvent(name: 'testing'),
Expand Down