不使用应用程序时发送通知?

Send notifications when the app is not used?

我的一个客户有一个问题,如果他们在特定时间之前没有输入工作时间,是否可以在员工应用程序中发送推送通知。

是否可以为 Android 和 iOS 应用程序创建一个服务,每小时检查一次是否已将一天中的时间输入数据库,如果没有,则发送推送通知?

我不知道从哪里开始,如果可能的话。但是如果其他应用可以做到,那么这个应用应该也可以。

正如@SilverWarior 建议的那样,我创建了两段代码,一段代码在应用程序进入后台时发出通知,然后当应用程序进入前台时我清除 Tnotificationcenter。我使用 appevent 函数触发 enterdbackgroundwillbecomeforground.

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;

我已经测试了这段代码,对我来说,它工作得很好。