Utilizar múltiples cuentas de firebase en una sola aplicación de Android para google analytics

Tengo un caso de uso en el cual 1 aplicación será utilizada por múltiples compañías separadas (franquicias) que tendrán sus propios equipos de marketing y administración. Necesito que el usuario seleccione una franquicia cuando se inicie la aplicación para móviles y, a partir de ese momento, envíe todos los datos analíticos a la cuenta firebase (google analytics) de esa franquicia. Del mismo modo cualquier notificación push que se envían desde los servidores de esa franquicia debe ir al usuario.

¿Es posible esta configuración? En el pasado solía configurar una cuenta de Google Analytics para cada franquicia y simplemente descargar el número UA-xxx del servidor en la selección de franquicias, y luego configurar el objeto de Google Analytics basado en eso.

¿Cuál es la forma adecuada de lograr esto a través de firebase conectado a google analytics?

Encontré la referencia oficial de la API: https://firebase.google.com/docs/configure/ Este enlace explica cómo hacerlo para iOS pero no menciona cómo hacerlo en android. Sin embargo, dice que la init de firebase se ejecuta antes de código de usuario .. tal vez eso significa que no es posible?

Aquí está el proveedor de inicio que mencionan: https://firebase.google.com/docs/reference/android/com/google/firebase/provider/FirebaseInitProvider

Crear para cada nueva aplicación firebase

FirebaseApp firebaseApp = FirebaseApp.initializeApp(Context, FirebaseOptions,firebaseAppName); 

Puede crear una aplicación firebase mediante opciones de paso:

https://firebase.google.com/docs/reference/android/com/google/firebase/FirebaseOptions.Builder

 FirebaseOptions options = new FirebaseOptions.Builder() .setApiKey(String) .setApplicationId(String) .setDatabaseUrl(String) .build(); 

A continuación, cuando desea utilizar Analytics, debe establecer el valor predeterminado uno por llamada:

 FirebaseApp firebaseApp = FirebaseApp.initializeApp(Context, FirebaseOptions,"[DEFAULT]"); 

Tenga en cuenta que sólo esta aplicación DEFAULT firebase se utilizará en analytics

Pero primero de todo lo que necesita para eliminar el proveedor init en el manifiesto

  <!--remove firebase provider to init manually --> <provider android:name="com.google.firebase.provider.FirebaseInitProvider" android:authorities="${applicationId}.firebaseinitprovider" tools:node="remove"/> 

Y la aplicación init predeterminada firebase manualmente !

Ejemplo de cómo enviar un evento a través de la aplicación firebase predeterminada (después de inicializada):

 // get tracker instance FirebaseAnalytics trakerInstance = FirebaseAnalytics.getInstance(context); // create bundle for params Bundle params = new Bundle(); // put param for example action params.putString(ACTION_KEY, eventAction); // send event trackerInstance.logEvent(eventCategory, params); 

@ Ceph3us He intentado su solución, y no funcionó para mí. Si inicializo firebase en tiempo de ejecución como usted sugirió entonces consigo un error: Falta google_app_id. Firebase Analytics deshabilitado. ¿Estás seguro de que está funcionando? Ruidos

ante todo

  1. ¿ Eliminó el proveedor predeterminado poniendo herramientas de manifiesto: node = "remove" ?
  2. ¿U inicializó ['DEFAULT'] firebase app como he descrito
  3. ¿ Comprobó si se inicializó una aplicación ['DEFAULT'] firebase antes de enviar cualquier evento ?

Anuncio 1) el error: Missing google_app_id me sugiere que el plugin gardle no eliminó el proveedor como se esperaba – y su aplicación está iniciando un proveedor predeterminado que se queja de que falta el ID de la aplicación

Anuncio 3) no haga ninguna llamada dependiendo de la aplicación firebase antes de que la aplicación firebase se inicialice

  protected boolean isDefaultFirebaseAppInitialized() { try { // try get return FirebaseApp.getInstance(FirebaseApp.DEFAULT_APP_NAME) != null; // catch illegal state exc } catch (IllegalStateException ise) { // on such case not initialized return false; } } // check on default app if(isDefaultFirebaseAppInitialized()) { // get tracker FirebaseAnalytics trakerInstance = FirebaseAnalytics.getInstance(context); // log event trackerInstance.logEvent(eventCategory, params); } else { // postpone } 

@ Ceph3us 1. He eliminado el proveedor como usted ha dicho, si no quitar el proveedor y tratar de inicializar la aplicación predeterminada, entonces me gustaría obtener una IllegalStateException acerca de la aplicación predeterminada firebase ya existe. 2. He inicializado la aplicación firebase por defecto como describiste. 3. Sí, he registrado el nombre de la aplicación y app_id y hay un registro: AppName: [DEFAULT], id de la aplicación de Google: valid_app_id Pero cuando quiero publicar algo en la analítica, entonces dice: Missing google_app_id. Firebase Analytics deshabilitado. Ruidos

99,99% que está intentando enviar el evento antes de la aplicación se inicializa! (Véase el ejemplo anterior)

@ Ceph3us Inicializo FirebaseApp en el método onCreate de la subclase de aplicación. Puedo enviar un evento a firebase cuando se hace clic en un botón. De todos modos he subido un proyecto de prueba a github, puede echar un vistazo a él? Es posible que entienda mal algo. Github.com/rMozes/TestFirebaseAnalytics – rMozes

Try (ya que la inicialización es asíncrona – por lo que hasta que pruebe su inicializado no puede enviar eventos):

https://github.com/rMozes/TestFirebaseAnalytics/compare/master…c3ph3us:patch-2

Si arriba falla tienes una última oportunidad 🙂

Define en la cadena xml :

 <string name="google_app_id">fuck_you_google</string> 

Y cambiarlo a través de reflexiones antes de cualquier llamada a init / o firebase uso – sugerencia de cómo y buena suerte 🙂

Si cambias el campo R por reflejos no obtendrás un mensaje incorrecto id de la aplicación: "fuck_you_google"

Es posible tener varias instancias de Firebase en tus aplicaciones

 FirebaseOptions options = new FirebaseOptions.Builder() .setApplicationId("Your AppId") // Required for Analytics. .setApiKey("You ApiKey") // Required for Auth. .setDatabaseUrl("Your DB Url") // If you wanted to .build(); FirebaseApp.initializeApp(context, options, "CompanyA"); 

Que puede obtener instancias de Firebase

 FirebaseApp appCompanyA = FirebaseApp.getInstance("CompanyA"); 

Puede ver el ejemplo completo de uso de autenticación y base de datos en tiempo real utilizando varias instancias de Firebase aquí

Voy a dejar esta solución aquí que puede duplicar con otras respuestas para alguien que pueda necesitar esto

Espero que esto ayude 🙂

  • Android: abre o reinicia la aplicación después de hacer clic en la notificación push mediante las actividades de bandera
  • Cordova Push Plugin: onNotificationGMC no se activa y no se puede obtener regID
  • Añadir gcm.jar en IDE de Eclipse (Google Cloud Messaging)
  • Archivos de Upstream que usan Google Cloud Messaging Servidor de conexión a la nube (XMPP)
  • ¿Cuándo se borra un grupo de dispositivos Google Cloud Messaging notification_key?
  • GCM enviar imagen en lugar de mensaje
  • El servidor GCM de Google devuelve Error no autorizado 401
  • GCM de Android: el mismo identificador de remitente para más aplicaciones
  • GCM con el receptor de difusión personalizado
  • La aplicación de Android aparece cuando se recibe una notificación de envío de GCM en el dispositivo
  • No se pudo resolver: com.google.android.gms: play-services-gcm: 7.5.
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.