studio notification firebaseinstanceidservice example app android firebase google-cloud-messaging firebase-cloud-messaging

notification - push firebase android



Cómo poner varios ID de número de proyecto/remitente en google-services.json (3)

Quiero poder agregar más de una identificación 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 cliente es un agregador de artículos con múltiples contribuyentes, y cada uno de ellos debería poder enviar un mensaje cuando publique 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 permite a cada uno de estos contribuyentes enviar sus propios mensajes.

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


A partir de diciembre de 2016, hay una manera muy simple y no hacky de hacerlo, que todavía funciona ahora (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


ACTUALIZACIÓN: Me referiré a la forma oficial y recomendada de hacerlo en lugar del enfoque extravagante y no oficial para prevenir / evitar problemas desconocidos. De mi respuesta here .

En realidad, hay una parte en la documentation 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 cliente es un agregador de artículos con múltiples contribuyentes, y cada uno de ellos debería poder enviar un mensaje cuando publique 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 permite a cada uno de estos contribuyentes enviar sus propios mensajes.

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

Finalmente, comparta el token de registro con los servidores de aplicaciones correspondientes (para completar el protocolo de enlace de cliente / servidor de registro de FCM), y podrán enviar mensajes a la aplicación del 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 un ID de remitente diferente en el campo de audiencia.

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

Además, tenga en cuenta los documentos getToken() :

Esta es una función de bloqueo, así que no la llame en el hilo principal.

Algunos beneficios adicionales:

  • No vuelve a intentarlo automáticamente si falla como el predeterminado.
  • Devuelve una IOException cuando falla.

Puede obtener el token único para múltiples remitentes pasándolos como una cadena separada por comas y luego estos remitentes podrán enviar la notificación push utilizando el token común, intente llamar

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

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