En un articulo anterior, ensañábamos a obtener el token de Firebase en Android, ahora llega la hora de comprender como se envían notificaciones push a través de Firebase Cloud Messaging (FCM) en Delphi con el componente TNetHTTPClient. En primer lugar, crearemos un proyecto VCL, y en el Formulario colocamos un TEdit, un TButton, y un TMemo, debería quedar algo parecido a la siguiente imagen:
Ahora colocamos el componente TNetHTTPCliente que se encuentra en la sección Net de nuestra paleta de componentes.
Paso siguiente, en el evento OnClick del TButton, colocamos el siguiente código:
procedure TForm1.Button1Click(Sender: TObject);
var
Msg: string;
s1, s2: TMemoryStream;
hd: TArray <TNameValuePair>;
st: String;
b: TBytes;
devicetoken: string;
begin
deviceToken := Trim(Edit1.Text);
Msg := 'Mi primer notificación Push.';
s1 := TMemoryStream.Create;
s2 := TMemoryStream.Create;
try
NetHTTPClient1.ContentType := 'application/json';
st := '{' +
'"to": "'+deviceToken+'",' +
'"notification":{"priority":"hight",' +
'"title":"Título de la Notificación",'+
'"body":"'+Msg+'",'+
'"dry_run":"false"}'+
'}';
setlength(hd, 1);
b := TEncoding.UTF8.GetBytes(st);
s1.Write(b, length(b));
s1.Position := 0;
hd[0].Name:='Authorization';
hd[0].Value:='key=Ingrese aquí el Server Key de FCM';
NetHTTPClient1.Post('https://fcm.googleapis.com/fcm/send', s1, s2, hd);
s2.Position := 0;
{ Mostramos el resultado devuelto por FCM }
memo1.Lines.LoadFromStream(s2, TEncoding.UTF8);
finally
s1.Free;
s2.Free;
end;
end;
Las unidades a utilizar son las siguientes:
uses
Winapi.Windows,
Winapi.Messages,
System.SysUtils,
System.Variants,
System.Classes,
Vcl.Graphics,
Vcl.Controls,
Vcl.Forms,
Vcl.Dialogs,
System.Net.URLClient,
System.Net.HttpClient,
System.Net.HttpClientComponent,
Vcl.StdCtrls;
Funcionamiento
En el Edit1 deberemos colocar el Token del dispositivo, y en el código, no olvides de agregar el Server Key del proyecto de Firebase.
Al presionar el botón enviar, se enviará la notificación push al dispositivo Android y se mostrará en el Memo el resultado obtenido, algo similar a esto:
{"multicast_id": 47068889804 ********, "success": 1, "failure": 0, "canonical_ids": 0,
"results": [{"message_id": "0: 15763105 ********% 22dfc2a4 ********"}]}