通过我们的应用程序向用户发送推送通知几乎是必不可少的。
无论是新的更新,提醒您某些信息,还是出于无数其他原因,推送通知都很重要。
对于已经知道 Google API 的人和不知道的人,需要从 Firebase API 获取 Token 才能识别用户并发送通知。
对于之前已经编写过推送通知的人来说,你会知道在Delphi 10.4 中,它发生了一些变化,我们必须调整代码才能获得 Token。
从 Firebase 获取令牌
值得教授如何在 Firebase 网络上创建项目,因为它非常简单。
您所要做的就是注册、创建项目并注册我们的应用程序以下载名为google-services.json的文件。
在这个文件中,我们将拥有我们项目的所有配置,以便能够对其进行配置。
在我们的应用程序中配置 Firebase
为了在我们的应用程序中配置Firebase,我们进入菜单Project -> Options -> Application -> Services,然后在 Target 中选择我们的 Android 版本(32 位或 64 位)。
单击导入按钮并选择我们之前下载的google-services.json文件。
配置字段将自动填充。如果我们的 App 要编译为 32 位和 64 位,我们必须在两个版本中执行相同的步骤。
配置 Firebase
导入 Firebase 配置后,我们必须激活权利列表中的接收推送通知选项。
配置 Firebase
作为下一步,我们将进行编码。我们创建主窗体的OnCreate事件(或在我们想要接收令牌的任何其他事件中),我们将在其中调用以下过程:
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;
正如我们在前面的过程中看到的,实例化了两个事件:
ServiceConnection.OnChange := OnServiceConnectionChange;
ServiceConnection.OnReceiveNotification := OnReceiveNotificationEvent;
在更改设备令牌时运行的OnServiceConnectionChange实现 。
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;
最后执行OnReceiveNotificationEvent事件 来接收数据:
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;
为了让这个示例工作,我们必须在我们的表单中拥有一个名为MemoLog的TMemo,其中将显示设备 ID 和 Firebase 令牌的数据。
Copyright © 2014 DelphiW.com 开发 源码 文档 技巧 All Rights Reserved
晋ICP备14006235号-8 晋公网安备 14108102000087号
执行时间: 0.037707090377808 seconds