diff --git a/packages/firebase_analytics/firebase_analytics/example/test_driver/firebase_analytics_e2e.dart b/packages/firebase_analytics/firebase_analytics/example/test_driver/firebase_analytics_e2e.dart index 5dc009584ed7..0a3bf383bd61 100644 --- a/packages/firebase_analytics/firebase_analytics/example/test_driver/firebase_analytics_e2e.dart +++ b/packages/firebase_analytics/firebase_analytics/example/test_driver/firebase_analytics_e2e.dart @@ -25,6 +25,11 @@ void testsMain() { analytics = FirebaseAnalytics.instance; }); + test('isSupported', () async { + final result = await FirebaseAnalytics.instance.isSupported(); + expect(result, isA()); + }); + test('logEvent', () async { await expectLater(analytics.logEvent(name: 'testing'), completes); diff --git a/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart b/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart index a1d1ac979e8e..aaf23020bcd2 100755 --- a/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart +++ b/packages/firebase_analytics/firebase_analytics/lib/src/firebase_analytics.dart @@ -65,6 +65,10 @@ class FirebaseAnalytics extends FirebasePluginPlatform { return FirebaseAnalytics.instanceFor(app: defaultAppInstance); } + Future isSupported() { + return _delegate.isSupported(); + } + /// Logs a custom Flutter Analytics event with the given [name] and event [parameters]. Future logEvent({ required String name, diff --git a/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/method_channel/method_channel_firebase_analytics.dart b/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/method_channel/method_channel_firebase_analytics.dart index de99635923b7..70a6ad743e64 100644 --- a/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/method_channel/method_channel_firebase_analytics.dart +++ b/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/method_channel/method_channel_firebase_analytics.dart @@ -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 isSupported() { + return Future.value(true); + } + @override Future logEvent({ required String name, diff --git a/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/platform_interface/platform_interface_firebase_analytics.dart b/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/platform_interface/platform_interface_firebase_analytics.dart index 16e0992ab8b9..7eb383196784 100644 --- a/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/platform_interface/platform_interface_firebase_analytics.dart +++ b/packages/firebase_analytics/firebase_analytics_platform_interface/lib/src/platform_interface/platform_interface_firebase_analytics.dart @@ -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 isSupported() { + throw UnimplementedError('isSupported() is not implemented'); + } + /// Logs the given event [name] with the given [parameters]. Future logEvent({ required String name, diff --git a/packages/firebase_analytics/firebase_analytics_web/lib/firebase_analytics_web.dart b/packages/firebase_analytics/firebase_analytics_web/lib/firebase_analytics_web.dart index 852e644ea3c7..bbb962502ddb 100644 --- a/packages/firebase_analytics/firebase_analytics_web/lib/firebase_analytics_web.dart +++ b/packages/firebase_analytics/firebase_analytics_web/lib/firebase_analytics_web.dart @@ -38,6 +38,11 @@ class FirebaseAnalyticsWeb extends FirebaseAnalyticsPlatform { return FirebaseAnalyticsWeb(app: app); } + @override + Future isSupported() { + return analytics_interop.Analytics.isSupported(); + } + @override Future logEvent({ required String name, diff --git a/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics.dart b/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics.dart index 7e80bdf8bc0e..9be67eb682b6 100644 --- a/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics.dart +++ b/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics.dart @@ -32,6 +32,10 @@ class Analytics extends JsObjectWrapper { return _expando[jsObject] ??= Analytics._fromJsObject(jsObject); } + static Future isSupported() { + return handleThenable(analytics_interop.isSupported()); + } + /// Non-null App for this instance of analytics service. App get app => App.getInstance(jsObject.app); @@ -41,7 +45,11 @@ class Analytics extends JsObjectWrapper { AnalyticsCallOptions? callOptions, }) { return analytics_interop.logEvent( - jsObject, name, util.jsify(parameters ?? {}), callOptions); + jsObject, + name, + util.jsify(parameters ?? {}), + callOptions, + ); } void setAnalyticsCollectionEnabled({required bool enabled}) { diff --git a/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics_interop.dart b/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics_interop.dart index 6e6031f7a8df..fc4daa66b955 100644 --- a/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics_interop.dart +++ b/packages/firebase_analytics/firebase_analytics_web/lib/interop/analytics_interop.dart @@ -19,7 +19,7 @@ external AnalyticsJsImpl getAnalytics([AppJsImpl? app]); external AnalyticsJsImpl initializeAnalytics([AppJsImpl app]); @JS() -external bool isSupported(); +external PromiseJsImpl isSupported(); @JS() external void logEvent( @@ -31,7 +31,9 @@ external void logEvent( @JS() external void setAnalyticsCollectionEnabled( - AnalyticsJsImpl analytics, bool enabled); + AnalyticsJsImpl analytics, + bool enabled, +); @JS() external void setCurrentScreen( diff --git a/tests/test_driver/firebase_analytics/firebase_analytics_e2e.dart b/tests/test_driver/firebase_analytics/firebase_analytics_e2e.dart index 5c3473dcb93d..4cb0cdfab217 100644 --- a/tests/test_driver/firebase_analytics/firebase_analytics_e2e.dart +++ b/tests/test_driver/firebase_analytics/firebase_analytics_e2e.dart @@ -17,6 +17,11 @@ void setupTests() { ); }); + test('isSupported', () async { + final result = await FirebaseAnalytics.instance.isSupported(); + expect(result, isA()); + }); + test('logEvent', () async { await expectLater( FirebaseAnalytics.instance.logEvent(name: 'testing'),