Vanaf sgcWebSockets 2024.9.0 is er een nieuw client-component om notificaties te versturen met Google Firebase Cloud Messaging en de nieuwste API HTTP v1.
Apps die de verouderde FCM legacy-API's voor HTTP en XMPP gebruiken, moeten zo snel mogelijk overstappen naar de HTTP v1-API. Het versturen van berichten (inclusief upstream-berichten) met die API's werd op 20 juni 2023 deprecated en de shutdown begint op 22 juli 2024.
Naast voortdurende ondersteuning en nieuwe functies heeft de HTTP v1-API deze voordelen ten opzichte van de legacy-API's:
- Betere beveiliging via access-tokens. De HTTP v1-API gebruikt kortlevende access-tokens volgens het OAuth2-beveiligingsmodel. Mocht een access-token publiek worden, dan kan deze slechts ongeveer een uur kwaadaardig worden gebruikt voordat hij verloopt. Refresh-tokens worden minder vaak verstuurd dan de beveiligingssleutels die in de legacy-API werden gebruikt, dus de kans dat ze worden onderschept is veel kleiner.
- Efficiëntere maatwerk-berichten over platforms heen. Voor de berichtinhoud heeft de HTTP v1-API gemeenschappelijke sleutels die naar alle target-instances gaan, plus platformspecifieke sleutels waarmee je het bericht per platform kunt aanpassen. Hiermee kun je "overrides" creëren die in één bericht licht afwijkende payloads naar verschillende client-platforms sturen.
- Uitbreidbaar en toekomstbestendig voor nieuwe versies van client-platforms. De HTTP v1-API ondersteunt volledig de messaging-opties die beschikbaar zijn op Apple-platforms, Android en het web. Omdat elk platform zijn eigen gedefinieerde blok in de JSON-payload heeft, kan FCM de API naar behoefte uitbreiden naar nieuwe versies en nieuwe platforms.
Google FCM Delphi-client
Firebase Cloud Messaging (FCM) is een cross-platform messaging-oplossing waarmee je betrouwbaar en kosteloos berichten kunt versturen.
Met FCM kun je een client-app een melding geven dat er nieuwe e-mail of andere data beschikbaar is om te synchroniseren. Je kunt notificatieberichten versturen om gebruikers opnieuw te betrekken en te behouden. Voor use cases zoals instant messaging kan een bericht een payload van tot 4096 bytes naar een client-app overdragen.
Het component ondersteunt de HTTP v1-API.
AutorisatieHet Google FCM-client-component kan inloggen op Google-servers met de volgende methoden:
- gcaOAuth2: OAuth2-protocol
- gcaJWT: JWT-tokens.
OAuth2
De login wordt uitgevoerd via een webbrowser, waar de gebruiker inlogt met zijn eigen gebruiker en de FCM-requests autoriseert.
- GoogleCloudOptions.OAuth2.ClientId: de ClientID die door Google wordt verstrekt om via het OAuth2-protocol te authenticeren.
- GoogleCloudOptions.OAuth2.ClientSecret: de Client Secret-string die door Google wordt verstrekt om via het OAuth2-protocol te authenticeren.
- GoogleCloudOptions.OAuth2.Scope: de scope van OAuth2; meestal hoef je de standaardwaarde niet aan te passen, tenzij je meer toegang nodig hebt dan standaard.
- GoogleCloudOptions.OAuth2.LocalIP: het OAuth2-protocol vereist een server die luistert naar het antwoord van de authenticatieserver; dit is het IP of DNS. Standaard 127.0.0.1.
- GoogleCloudOptions.OAuth2.LocalPort: de luisterpoort van de lokale server.
- GoogleCloudOptions.OAuth2.RedirectURL: als je een andere redirect-url dan LocalPort + LocalIP wilt instellen, kun je dat in deze eigenschap doen (bijvoorbeeld: http://127.0.0.1:8080/oauth2).
Service-accounts
De login wordt uitgevoerd door de requests te ondertekenen met een private key die door Google wordt verstrekt; deze methode wordt aanbevolen voor geautomatiseerde diensten of toepassingen zonder gebruikersinteractie.
- GoogleCloudOptions.JWT.ClientEmail: de Client Email-naam die wordt opgegeven bij het aanmaken van het nieuwe service-account. Node "client_email" in het JSON-configuratiebestand.
- GoogleCloudOptions.JWT.Subject: de Client Email-naam die wordt opgegeven bij het aanmaken van het nieuwe service-account. Node "client_email" in het JSON-configuratiebestand.
- GoogleCloudOptions.JWT.PrivateKeyId: de Private Key Id die door Google wordt verstrekt. Node "private_key_id" in het JSON-configuratiebestand.
- GoogleCloudOptions.JWT.PrivateKey: het Private Key-certificaat dat door Google wordt verstrekt. Node "private_key" in het JSON-configuratiebestand.
Wanneer er een nieuw service-account wordt aangemaakt, kun je een JSON-bestand met alle configuraties downloaden. Dit bestand kan door het FCM-component worden verwerkt; roep de methode LoadSettingsFromFile aan en geef de JSON-bestandsnaam als argument mee.
Voorbeeld
Hieronder een eenvoudig voorbeeld om notificaties te versturen met FCM en JWT als authenticatiemethode.
oFCM := TsgcHTTPGoogleCloud_FCM_Client.Create(nil);
oFCM.GoogleCloudOptions.Authorization := gcaJWT;
oFCM.LoadSettingsFromFile('sgcfirebase-7x92e-5c80b8506a6c.json');
oFCM.GoogleCloudOptions.JWT.Subject := GoogleFCM.GoogleCloudOptions.JWT.ClientEmail;
ShowMessage(
oFCM.SendMessage('Project-id',
'{"message": {"topic": "news","notification": ' +
'{"title": "Breaking News",' +
'"body": "New news story available."},"data": {"story_id": "story_12345"}}}')
);
