firebase-analytics icon indicating copy to clipboard operation
firebase-analytics copied to clipboard

Native implementation not called if imports done in Capacitor v3 style

Open phfeustel opened this issue 2 years ago • 6 comments

Describe the bug When I use the Capacitor v3 style of imports and run it as iOS app, not the native implementation but the web implementation is called.

To Reproduce Import the plugin and use it like

import { FirebaseAnalytics } from "@capacitor-community/firebase-analytics";

FirebaseAnalytics.logEvent({
  name: "select_content",
  params: {
    content_type: "image",
    content_id: "P12453",
    items: [{ name: "Kittens" }],
  },
});

Then I get the error message: Firebase analytics is not initialized. Make sure initializeFirebase() is called once

Additionally, I debugged a bit in Xcode and see that the plugin is registered(CapacitorBridge.registerPlugin() successfully and also exported via JSExport.exportJS().

If I use the "old" style, everything works fine, even when using the same capacitor version; it is marked as deprecated though:

import "@capacitor-community/firebase-analytics";
import { Plugins } from '@capacitor/core';

const {FirebaseAnalytics} = Plugins;

FirebaseAnalytics.logEvent({
  name: "select_content",
  params: {
    content_type: "image",
    content_id: "P12453",
    items: [{ name: "Kittens" }],
  },
});

Unfortunately, I didn't find any clue what's going wrong.

Expected behavior The native implementation should be called, also when using the Capacitor v3 style imports.

Smartphone (please complete the following information):

  • Device: iPhone6s, Xcode Simulator
  • OS: iOS 14.7.1, iOS 15
  • Browser: Ionic WkWebview

Additional context For other plugins like @capacitor/share the new style imports are working just fine.

Versions used:

    "@capacitor-community/firebase-analytics": "^0.3.3",
    "@capacitor/core": "3.2.3",
    "@capacitor/ios": "3.2.3",
    "@capacitor/share": "^1.0.4",
    "@ionic/react": "^5.5.0",

phfeustel avatar Oct 05 '21 12:10 phfeustel

I can confirm that I get the same error. I recently migrated from capacitor v2 to v3, followed the guide about importing capacitor plugins like import { FirebaseAnalytics } from "@capacitor-community/firebase-analytics"; and I get Firebase analytics is not initialized. Make sure initializeFirebase() is called once on web.

JohnGeorgiadis avatar Nov 11 '21 13:11 JohnGeorgiadis

Hi, I am experiencing the same issue when migrating to capacitor 3 and moving to the v3 style imports on macOS safari

Versions being used:

"@capacitor-community/firebase-analytics": "^1.0.0", "@capacitor/app": "^1.0.6", "@capacitor/browser": "^1.0.6", "@capacitor/core": "^3.3.1",

bellispmo avatar Nov 15 '21 05:11 bellispmo

@bellispmo I had to downgrade to "@capacitor-community/firebase-analytics": "^0.3.3" and import it like that

import '@capacitor-community/firebase-analytics';
import { Plugins } from '@capacitor/core';

until they fix this. I hope this will help.

JohnGeorgiadis avatar Nov 15 '21 09:11 JohnGeorgiadis

@bellispmo I had to downgrade to "@capacitor-community/firebase-analytics": "^0.3.3" and import it like that

import '@capacitor-community/firebase-analytics';
import { Plugins } from '@capacitor/core';

until they fix this. I hope this will help.

@JohnGeorgiadis Thanks, I have switched to v0.3.3 and it is working now.

bellispmo avatar Nov 16 '21 04:11 bellispmo

When this can be fixed? I used Capacitor 3 and only followed the updated documentation, but looks analysis not working it shows me there are 0 users online even tracking screen names not working. I am testing it on iOS Simulator.

Update: The plugin works well on a real device, I am using Capacitor v3, "@capacitor-community/firebase-analytics" v1.0.0, and using the steps from plugin updated documentation.

aakatheeri avatar Dec 13 '21 08:12 aakatheeri

For those of you having issues, I was able to solve it by ensuring the FirebaseAnalytics calls are async.

import { Device } from '@capacitor/device';
import { FirebaseAnalytics } from '@capacitor-community/firebase-analytics';

Device.getInfo().then(async device => {
  window.device = device;

  // Firebase
  if (process.env.NODE_ENV === "production") {
    // Only need to initialize on web
    if (!Capacitor.isNativePlatform()) {
      await FirebaseAnalytics.initializeFirebase(firebaseConfig);
    }

    await FirebaseAnalytics.setCollectionEnabled({
      enabled: true,
    });
  }
});

BuffMcBigHuge avatar Jan 04 '22 22:01 BuffMcBigHuge

This is no longer an issue in version 4 of the plugin.

jcesarmobile avatar Feb 24 '23 16:02 jcesarmobile