Skip to content

Como obtener el Token de Firebase en Android

Ya casi es imprescindible que a través de nuestras aplicaciones le hagamos llegar notificaciones push a nuestros usuarios.

Ya sea para nuevas actualizaciones, para recordarles algún dato, o por otros innumerables motivos, las notificaciones push son importantes.

Para el que ya conoce las API de Google, y para aquellos que todavía no, es necesario obtener un Token desde la API de Firebase para poder identificar al usuario y así hacerle llegar la notificación.

Para aquellos que ya han programado alguna notificación push con anterioridad, sabrá que en Delphi 10.4, ha cambiado un poquito, y tenemos que retocar el código para poder obtener el Token.

Obtener Token de Firebase

Está de más enseñar como crear el proyecto en la web de Firebase ya que es sumamente sencillo.

Solo basta con registrarnos, crear el proyecto y registrar nuestra App para que nos descargue un archivo llamado google-services.json.

En dicho archivo tendremos toda la configuración de nuestro proyecto para poder configurarlo.

Configurar Firebase en nuestra App

Para poder configurar Firebase en nuestra app, ingresamos al menú Project -> Options -> Application -> Services y en Target seleccionamos nuestra versión de Android (32 o 64 bits).

Presionamos sobre el botón Import y seleccionamos el archivo google-services.json que descargamos anterioridad.

Automáticamente se llenaran los campos de configuración. Si nuestra App va a ser compilada para 32 y 64 bits, deberemos realizar el mismo paso en las dos versiones.

Config Firebase

Una vez importada la configuración de Firebase, deberemos activar dentro de Entitlement List la opción recive push notifications.

Config Firebase

Como paso siguiente, vamos a codificar. Creamos el evento OnCreate del formulario principal (o en cualquier otro evento donde queramos recibir el token) donde llamaremos al siguiente procedimiento:

var
  FDeviceId: string;
  FDeviceToken: string;

...

uses 
   FMX.PushNotification.Android;

...

procedure TFormMain.ShowToken;
var 
  PushService: TPushService;
  ServiceConnection: TPushServiceConnection;
  Notifications: TArray<TPushServiceNotification>;
begin
  PushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.FCM);
  ServiceConnection := PushServiceConnection.Create(PushService);
  ServiceConnection.Active := True;
  ServiceConnection.OnChange := OnServiceConnectionChange;
  ServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;
 
  FDeviceId := PushService.DeviceIDValue[TPushService.TDeviceIDNames.DeviceId];
  MemoLog.Lines.Add('DeviceID: ' + FDeviceId);
  MemoLog.Lines.Add('Ready to receive!');
 
  // Checks notification on startup, if application was launched fromcold start
  // by tapping on Notification in Notification Center
  Notifications := PushService.StartupNotifications;
  if Length(Notifications) > 0 then
  begin
      MemoLog.Lines.Add('-----------------------------------------');
      MemoLog.Lines.Add('DataKey = ' + Notifications[0].DataKey);
      MemoLog.Lines.Add('Json = ' + Notifications[0].Json.ToString);
      MemoLog.Lines.Add('DataObject = ' + Notifications[0].DataObject.ToString);
      MemoLog.Lines.Add('-----------------------------------------');
  end;
end;

Como vemos en el procedimiento anterior, se instancian dos eventos:

  ServiceConnection.OnChange := OnServiceConnectionChange;
  ServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;

Implementación de OnServiceConnectionChange que se ejecuta al cambiar el token de dispositivo.

procedure OnServiceConnectionChange(Sender: TObject;
PushChanges: TPushService.TChanges);
var
  PushService: TPushService;
begin
  PushService := TPushServiceManager.Instance.GetServiceByName(TPushService.TServiceNames.FCM);
  if TPushService.TChange.DeviceToken in PushChanges then
  begin
    FDeviceToken := PushService.DeviceTokenValue[TPushService.TDeviceTokenNames.DeviceToken];
    MemoLog.Lines.Add('Firebase Token: ' + FDeviceToken);
    Log.d('Firebase device token: token=' + FDeviceToken);
  end;
  if (TPushService.TChange.Status in PushChanges) and (PushService.Status = TPushService.TStatus.StartupError) then
    MemoLog.Lines.Add('Error: ' + PushService.StartupError);
end;


Y por último la implementación del evento  OnReceiveNotificationEvent para recibir los datos:

procedure OnReceiveNotificationEvent(Sender: TObject;
const ServiceNotification: TPushServiceNotification);
var
  MessageText: string;
begin
  MemoLog.Lines.Add('-----------------------------------------');
  MemoLog.Lines.Add('DataKey = ' + ServiceNotification.DataKey);
  MemoLog.Lines.Add('Json = ' + ServiceNotification.Json.ToString);
  MemoLog.Lines.Add('DataObject = ' +
 ServiceNotification.DataObject.ToString);
  MemoLog.Lines.Add('---------------------------------------');
end;

Para que funcione este ejemplo, deberemos tener en nuestro formulario un TMemo llamado MemoLog donde se mostrarán los datos del Id de Dispositivo y el Token de Firebase.