Cómo poner múltiples project_number / sender id en google-services.json

Deseo poder agregar más de un ID de remitente en mi aplicación de Android.

Desde https://developers.google.com/cloud-messaging/concept-options

GCM permite que varias partes envíen mensajes a la misma aplicación cliente. Por ejemplo, supongamos que la aplicación del cliente es un agregador de artículos con múltiples contribuyentes, y cada uno de ellos debería poder enviar un mensaje cuando publiquen un nuevo artículo. Este mensaje puede contener una URL para que la aplicación cliente pueda descargar el artículo. En lugar de tener que centralizar toda la actividad de envío en una ubicación, GCM le da la capacidad de permitir que cada uno de estos contribuidores envíe sus propios mensajes.

¿Cómo se logra esto usando el archivo de configuración google-services.json ?

ACTUALIZACIÓN: Vamos a referirnos a la forma oficial y recomendada de hacer esto en lugar del enfoque hacky y no oficial para prevenir / evitar problemas desconocidos. De mi respuesta aquí .

En realidad, hay una parte en la documentación sobre este tema:

Recibir mensajes de múltiples remitentes

FCM permite que varias partes envíen mensajes a la misma aplicación cliente. Por ejemplo, supongamos que la aplicación del cliente es un agregador de artículos con múltiples contribuyentes, y cada uno de ellos debería poder enviar un mensaje cuando publiquen un nuevo artículo. Este mensaje puede contener una URL para que la aplicación cliente pueda descargar el artículo. En lugar de tener que centralizar toda la actividad de envío en una ubicación, FCM le da la capacidad de permitir que cada uno de estos contribuidores envíe sus propios mensajes.

Para que esto sea posible, asegúrese de que cada remitente genere su propia ID de remitente . Consulte la documentación del cliente para su plataforma para obtener información sobre cómo obtener la ID del remitente de FCM. Al solicitar el registro, la aplicación cliente recupera el token varias veces, cada vez con una ID de remitente diferente en el campo de audiencia.

Finalmente, comparta el token de registro con los servidores de aplicaciones correspondientes (para completar el enlace de cliente / servidor de registro FCM), y podrán enviar mensajes a la aplicación cliente utilizando sus propias claves de autenticación.

Tenga en cuenta que hay un límite de 100 remitentes múltiples.

Creo que la parte confusa pero importante aquí es:

Al solicitar el registro, la aplicación cliente recupera el token varias veces, cada vez con una ID de remitente diferente en el campo de audiencia.

En otros términos, tendrá que llamar a getToken() pasando la ID del remitente y simplemente "FCM" (por ejemplo, getToken("2xxxxx3344", "FCM") ) como parámetros. Deberá asegurarse de llamar esto para cada remitente (proyecto) que necesite.

Además, nota de los documentos getToken() :

Esta es una función de locking, así que no la llame al hilo principal.

Algunos buenos datos adicionales:

  • No vuelve a intentar automáticamente si falla como la predeterminada.
  • Devuelve una IOException cuando falla.

A partir de diciembre de 2016, hay una manera muy simple y no hacky de hacer esto, que todavía funciona (julio de 2018).

 FirebaseOptions options = new FirebaseOptions.Builder() .setApplicationId("1:something:android:something_else") // Required for Analytics. .setApiKey("your apikey") // Required for Auth. .setDatabaseUrl("https://your-database.firebaseio.com/") // Required for RTDB. .build(); FirebaseApp.initializeApp(this /* Context */, options, "secondary"); 

Fuente: el blog oficial de Firebase

Puede obtener el token único para el remitente múltiple pasándolos como una cadena separada por comas y luego estos remitentes podrán enviar la notificación de inserción usando el token común, intente llamar

FirebaseInstanceId.getInstance () .getToken (“senderId1, senderId2”, FirebaseMessaging.INSTANCE_ID_SCOPE);

asegúrese de llamar esto desde un hilo de fondo.