不使用应用程序时发送通知?
Send notifications when the app is not used?
我的一个客户有一个问题,如果他们在特定时间之前没有输入工作时间,是否可以在员工应用程序中发送推送通知。
是否可以为 Android 和 iOS 应用程序创建一个服务,每小时检查一次是否已将一天中的时间输入数据库,如果没有,则发送推送通知?
我不知道从哪里开始,如果可能的话。但是如果其他应用可以做到,那么这个应用应该也可以。
正如@SilverWarior 建议的那样,我创建了两段代码,一段代码在应用程序进入后台时发出通知,然后当应用程序进入前台时我清除 Tnotificationcenter
。我使用 appevent
函数触发 enterdbackground
和 willbecomeforground
.
Appevent 代码如下所示:
function TForm1.AppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
begin
case AAppEvent of
TApplicationEvent.EnteredBackground:
begin
Gethourregistration(FEmployeeNr,NOW);
if dm.MthourregistrationControl.RecordCount<1 then
begin
var Notification := NotificationCenter1.CreateNotification;
try
Notification.Name := 'message1';
Notification.AlertBody := 'You have not yet entered todays hours!';
Notification.FireDate :=Date+encodetime(19,0,0,0);
{ Send notification in Notification Center }
NotificationCenter1.ScheduleNotification(Notification);
Notification.Name := 'message2';
Notification.AlertBody := 'You have not yet entered todays hours!';
Notification.FireDate :=Date+encodetime(21,0,0,0);
{ Send notification in Notification Center }
NotificationCenter1.ScheduleNotification(Notification);
finally
Notification.Free;
end;
end;
end;
TApplicationEvent.WillBecomeForeground:
Notificationcenter1.CancelAll;
end;
end;
我使用 OnCreate 事件请求发送通知的权限并触发 AppEvent。
procedure TForm1.FormCreate(Sender: TObject);
var
AppEventSvc: IFMXApplicationEventService;
begin
if NotificationCenter1.AuthorizationStatus <> TAuthorizationStatus.Authorized then
begin
FPendingAction := Action;
NotificationCenter1.RequestPermission;
end;
if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then
begin
AppEventSvc.SetApplicationEventHandler(AppEvent);
end;
end;
我已经测试了这段代码,对我来说,它工作得很好。
我的一个客户有一个问题,如果他们在特定时间之前没有输入工作时间,是否可以在员工应用程序中发送推送通知。
是否可以为 Android 和 iOS 应用程序创建一个服务,每小时检查一次是否已将一天中的时间输入数据库,如果没有,则发送推送通知?
我不知道从哪里开始,如果可能的话。但是如果其他应用可以做到,那么这个应用应该也可以。
正如@SilverWarior 建议的那样,我创建了两段代码,一段代码在应用程序进入后台时发出通知,然后当应用程序进入前台时我清除 Tnotificationcenter
。我使用 appevent
函数触发 enterdbackground
和 willbecomeforground
.
Appevent 代码如下所示:
function TForm1.AppEvent(AAppEvent: TApplicationEvent; AContext: TObject): Boolean;
begin
case AAppEvent of
TApplicationEvent.EnteredBackground:
begin
Gethourregistration(FEmployeeNr,NOW);
if dm.MthourregistrationControl.RecordCount<1 then
begin
var Notification := NotificationCenter1.CreateNotification;
try
Notification.Name := 'message1';
Notification.AlertBody := 'You have not yet entered todays hours!';
Notification.FireDate :=Date+encodetime(19,0,0,0);
{ Send notification in Notification Center }
NotificationCenter1.ScheduleNotification(Notification);
Notification.Name := 'message2';
Notification.AlertBody := 'You have not yet entered todays hours!';
Notification.FireDate :=Date+encodetime(21,0,0,0);
{ Send notification in Notification Center }
NotificationCenter1.ScheduleNotification(Notification);
finally
Notification.Free;
end;
end;
end;
TApplicationEvent.WillBecomeForeground:
Notificationcenter1.CancelAll;
end;
end;
我使用 OnCreate 事件请求发送通知的权限并触发 AppEvent。
procedure TForm1.FormCreate(Sender: TObject);
var
AppEventSvc: IFMXApplicationEventService;
begin
if NotificationCenter1.AuthorizationStatus <> TAuthorizationStatus.Authorized then
begin
FPendingAction := Action;
NotificationCenter1.RequestPermission;
end;
if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(AppEventSvc)) then
begin
AppEventSvc.SetApplicationEventHandler(AppEvent);
end;
end;
我已经测试了这段代码,对我来说,它工作得很好。