Cómo configurar una app cliente de Firebase Cloud Messaging con Unity

Para escribir tu app cliente multiplataforma de Firebase Cloud Messaging con Unity, usa la API de Firebase Cloud Messaging. El SDK de Unity funciona tanto para Android como para iOS, con algunas configuraciones adicionales necesarias para cada plataforma.

Antes de comenzar

Para poder usar Firebase Cloud Messaging, debes crear un proyecto de Firebase y agregar los paquetes del SDK de Firebase Unity a tu proyecto de Unity.

Configuración:

Requisitos previos

Android

  • Unity 5.0 o una versión más reciente
  • NDK de Android 10d o una versión más reciente

iOS

  • Unity 5.0 o una versión más reciente
  • Xcode 8.0 o una versión posterior
  • un dispositivo iOS físico
  • un certificado de APN con notificaciones de aplicación habilitadas

Si todavía no tienes un proyecto de Unity, puedes descargar una de nuestras guías de inicio rápido de ejemplo y probar una función de Firebase específica. Si usas un inicio rápido, recuerda obtener el identificador de paquete en la configuración del proyecto, ya que lo necesitarás en el próximo paso.

Configura tu app en Firebase console

Para agregar Firebase a tu app, debes tener un proyecto y un archivo de configuración de Firebase para ella.

Crea un proyecto en Firebase console si no lo hiciste antes. Si ya tienes un proyecto de Google asociado con tu app para dispositivos móviles, haz clic en Importar proyecto de Google. De lo contrario, haz clic en Agregar proyecto.

Android

  1. Haz clic en Agrega Firebase a tu app para Android y sigue los pasos de la configuración. Si estás importando un proyecto de Google existente, es posible que esto suceda de forma automática y solo tengas que descargar el archivo de configuración.
  2. Ingresa el nombre del paquete de la app cuando se te solicite. Es importante que ingreses el nombre del paquete que usa tu app. Esto solo se puede configurar cuando agregas una app a tu proyecto de Firebase.
  3. Descarga un archivo google-services.json cuando se te indique. Puedes volver a descargar este archivo en cualquier momento.
  4. Copia este archivo en cualquier ubicación de la carpeta de elementos de tu proyecto.

iOS

  1. Haz clic en Agrega Firebase a tu app para iOS y sigue los pasos para ajustar la configuración. Si estás importando un proyecto de Google existente, es posible que esto suceda de forma automática y solo tengas que descargar el archivo de configuración.
  2. Ingresa el ID del paquete de la app cuando se te solicite. Es importante que ingreses el ID del paquete que usa tu app. Esto solo se puede configurar cuando agregas una app a tu proyecto de Firebase.
  3. Descarga un archivo GoogleService-Info.plist cuando se te indique. Puedes volver a descargar este archivo en cualquier momento.
  4. Agrega el archivo GoogleService-Info.plist al proyecto.

  5. Arrastra el GoogleService-Info.plist que descargaste de Firebase console a cualquier carpeta del proyecto de Unity.

Agrega el SDK de Firebase Unity a tu app

  1. Descarga el SDK de Firebase Unity.
  2. Selecciona el elemento de menú Assets > Import Package > Custom Package.
  3. Importa el paquete FirebaseMessaging.unitypackage desde el SDK de Firebase Unity que descargaste previamente.
  4. Cuando aparezca la ventana Import Unity Package, haz clic en el botón Import.

Compila tu app

Android

  1. Selecciona la opción de menú File > Build Settings.
  2. Selecciona Android en la lista Platform.
  3. Haz clic en Switch Platform para elegir Android como plataforma seleccionada.
  4. Espera hasta que se detenga el ícono giratorio (de compilación en proceso), que se encuentra en la esquina inferior derecha de la barra de estado de Unity.
  5. Haz clic en Build and Run.

iOS

  1. Selecciona la opción de menú File > Build Settings.
  2. Selecciona iOS en la lista Platform.
  3. Haz clic en Switch Platform para elegir iOS como plataforma seleccionada.
  4. Espera hasta que se detenga el ícono giratorio (de compilación en proceso), que se encuentra en la esquina inferior derecha de la barra de estado de Unity.
  5. Haz clic en Build and Run.

  6. Una vez que se abra Xcode, agrega UserNotifications.framework.

    1. Haz clic en el proyecto en Xcode y selecciona la pestaña General en el área Editor.
    2. Desplázate a Linked Frameworks and Libraries y haz clic en el botón + para agregar un marco de trabajo.
    3. En la ventana que aparece, desplázate a UserNotifications.framework, haz clic en esa entrada y después en Add.

Inicializa Firebase Cloud Messaging

La biblioteca de Firebase Cloud Messaging se inicializará cuando agregues controladores para eventos TokenReceived o MessageReceived.

Tras la inicialización, se solicita un token de registro para la instancia de la app cliente. La app recibirá el token con el evento OnTokenReceived, que debe almacenarse en caché para usarse después. Necesitarás este token si quieres orientar mensajes a este dispositivo específico.

Además, tendrás que registrarte para el evento OnMessageReceived si deseas poder recibir mensajes entrantes.

La configuración completa tiene el siguiente aspecto:

public void Start() {
  Firebase.Messaging.FirebaseMessaging.TokenReceived += OnTokenReceived;
  Firebase.Messaging.FirebaseMessaging.MessageReceived += OnMessageReceived;
}

public void OnTokenReceived(object sender, Firebase.Messaging.TokenReceivedEventArgs token) {
  UnityEngine.Debug.Log("Received Registration Token: " + token.Token);
}

public void OnMessageReceived(object sender, Firebase.Messaging.MessageReceivedEventArgs e) {
  UnityEngine.Debug.Log("Received a new message from: " + e.Message.From);
}

Configuración de la actividad de un punto de entrada de Android

En Android, Firebase Cloud Messaging incluye una actividad de punto de entrada personalizado que reemplaza la UnityPlayerActivity predeterminada. Si no usas un punto de entrada personalizado, este reemplazo se aplica de forma automática y no debes hacer nada más. Las apps que no usan la actividad de punto de entrada predeterminado o que admiten su propio Assets/Plugins/AndroidManifest.xml necesitarán una configuración adicional.

El complemento de Firebase Cloud Messaging para Unity en Android viene con dos archivos adicionales:

  • Assets/Plugins/Android/libmessaging_unity_player_activity.jar contiene una actividad llamada MessagingUnityPlayerActivity que reemplaza la actividad estándar UnityPlayerActivity.
  • Assets/Plugins/Android/AndroidManifest.xml le indica a la app que use MessagingUnityPlayerActivity como punto de entrada para la app.

Estos archivos se incluyen porque la actividad predeterminada UnityPlayerActivity no maneja las transiciones del ciclo de vida de las actividades onStop y onRestart ni implementa onNewIntent, lo cual es necesario para que Firebase Cloud Messaging administre los mensajes entrantes correctamente.

Configuración de la actividad de un punto de entrada predeterminado

Si tu app no usa la actividad predeterminada UnityPlayerActivity, deberás quitar el archivo AndroidManifest.xml que se proporciona y asegurarte de que tu actividad personalizada maneje correctamente todas las transiciones del ciclo de vida de las actividades en Android (a continuación, se muestra un ejemplo de cómo hacerlo). Si tu actividad personalizada extiende UnityPlayerActivity, puedes extender com.google.firebase.MessagingUnityPlayerActivity en su lugar, ya que esta actividad implementa todos los métodos necesarios.

Si estás usando una actividad personalizada y no estás extendiendo com.google.firebase.MessagingUnityPlayerActivity, debes incluir los siguientes fragmentos en tu actividad.

/**
 * Workaround for when a message is sent containing both a Data and Notification payload.
 *
 * When the app is in the background, if a message with both a data and notification payload is
 * receieved the data payload is stored on the Intent passed to onNewIntent. By default, that
 * intent does not get set as the Intent that started the app, so when the app comes back online
 * it doesn't see a new FCM message to respond to. As a workaround, we override onNewIntent so
 * that it sends the intent to the MessageForwardingService which forwards the message to the
 * FirebaseMessagingService which in turn sends the message to the application.
 */
@Override
protected void onNewIntent(Intent intent) {
  Intent message = new Intent(this, MessageForwardingService.class);
  message.setAction(MessageForwardingService.ACTION_REMOTE_INTENT);
  message.putExtras(intent);
  message.setData(intent.getData());
  startService(message);
}

/**
 * Dispose of the mUnityPlayer when restarting the app.
 *
 * This ensures that when the app starts up again it does not start with stale data.
 */
@Override
protected void onCreate(Bundle savedInstanceState) {
  if (mUnityPlayer != null) {
    mUnityPlayer.quit();
    mUnityPlayer = null;
  }
  super.onCreate(savedInstanceState);
}

Nota sobre la entrega de mensajes en Android

Cuando la aplicación no se está ejecutando en absoluto y un usuario presiona una notificación, el mensaje no se envía, de manera predeterminada, a través de las devoluciones de llamada incorporadas en FCM. En este caso, las cargas útiles de los mensajes se reciben a través de un Intent que se utiliza para iniciar la aplicación.

Los mensajes que se reciben mientras la app se ejecuta en segundo plano incluyen el contenido del campo de notificación que se usó para rellenar la información de la notificación de la bandeja del sistema. Sin embargo, no se comunicará el contenido de la notificación a FCM, es decir, FirebaseMessage.Notification tendrá el valor “null”.

Resumen:

Estado de la app Notificación Datos Ambos
Primer plano Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived Firebase.Messaging.FirebaseMessaging.MessageReceived
Segundo plano Bandeja del sistema Firebase.Messaging.FirebaseMessaging.MessageReceived Notificación: Bandeja del sistema
Datos: En extras del intent.

Próximos pasos

Después de configurar la app cliente, estás listo para enviar mensajes descendentes y a temas con Firebase. Para obtener más información, consulta la muestra de inicio rápido, que demuestra esta función.

Para agregar otro comportamiento más avanzado a tu app, consulta las guías para enviar mensajes desde un servidor de apps:

Recuerda que necesitarás una implementación de servidor para usar estas funciones.

Enviar comentarios sobre…

¿Necesitas ayuda? Visita nuestra página de asistencia.