在后台继续 运行 代码以向单个用户发送通知

Continue running code in background for Sending Notification to a Single User

我需要在满足特定条件时通知用户,但该条件可能会或可能不会在几个月内满足。我需要 运行 在后台进行条件检查(即使应用程序终止时),以便我可以检测到满足条件(即使它发生在 3 个月后)。如果满足条件,那么我只需要向单个用户(不是所有用户)发送通知。

我不确定最好的方法是什么。本地通知还是推送通知?我无法提前安排本地通知,因为我不知道什么时候会满足条件。我认为不需要推送通知,因为我只向几个 days/months 中的一个用户发送一个通知。

我还需要不断地运行这个后台检查。我知道它可以 运行 通过使用位置更新(重要监控或后台导航)无限地在后台运行。但我的条件检查代码实际上并不需要位置更新。据我了解,Apple 仅允许在后台执行位置更新或网络相关任务(几分钟)。这就是为什么我考虑将我的代码放在后台位置更新代码中。

在我看来,我应该使用本地通知并将我的代码放在后台位置更新代码中,以便我可以不断检查是否满足某些条件。此背景检查将安排本地通知并将其显示给使用该设备的用户。我认为不可能通过代码 运行ning 在后台安排推送通知。

总结起来,我有以下3个问题

  1. 我应该把我的代码放在后台位置更新中吗?如果不是,运行在后台无限地更新我的代码而不更新位置的正确方法是什么?

  2. 如果我将我的代码放在后台位置更新中,而位置更新代码实际上不是 send/receive 当前位置,Apple 会拒绝申请吗?

  3. 这种几个月后才给单个用户发通知的情况应该用什么通知?你会使用本地通知吗?或推送通知。

请回复。非常感谢任何帮助。

提前致谢。

不幸的是,这是一个有点棘手的问题。

  1. A​​pple 不允许您在后台创建长时间 运行ning 操作。正如您所提到的,您可以在后台添加位置更新或音频代码,但这些都不是很好的解决方案,因为 (1) Apple 可能会拒绝您进入应用商店,并且 (2) 如果出现以下情况,用户可能会关闭应用他们注意到 phone 顶部有一个很大的位置横幅(或一个奇怪的背景音频信号),关闭应用程序会终止您的操作。对于任何真正长运行ning 的任务,最好设置服务器和运行 cron 作业或等效的long-运行ning 操作。这是您知道任务将继续 运行ning.

  2. 的唯一方法
  3. 抱歉,我一次只回答一个问题,但正如我上面提到的,是的,他们可能会因此拒绝您的代码。作为一个经验法则:如果您认为您使用的 Apple 创建的代码不适合您的用途,Apple 可能会拒绝您的应用程序。

  4. 听起来你应该使用远程通知。如果您确实使用远程通知,您可能无论如何都需要某种后端。您可以在几个月后使用本地通知来通知用户,但是您需要知道提前发送通知的确切时间,这听起来不像您想要的那样。

总结:尝试构建一个简单的BE。也许使用 Firebase Functions 或其他东西,并构建一个 APNS 系统来发送推送。在应用程序中,告诉服务器开始处理信息并在完成后发送回推送。这种情况听起来像是服务器端逻辑的完美用例。

希望对您有所帮助!