基于位置和时间的通知触发iOS的体系结构

问题描述

我正在使用Firebase Firestore作为数据库和用于推送通知的Firebase Cloud Messaging开发适用于iOS的消息传递应用程序,希望用户能够发送基于时间和/或基于位置的限制触发的消息(例如2020年9月10日,柏林机场20:20)等。

鉴于应根据位置/时间限制显示消息(显示为我的意思是接收通知),我看到了两种处理方法

-处理服务器上的消息触发器-

  1. 对于基于时间的消息:安排应发送消息的时间,在时间到达时发送推送。
  2. 对于基于位置的消息,以预定义的时间间隔从设备发送位置,如果位置与任何预定义的消息匹配,则发送回退。由于性能/功率的限制,这显然不是一个选择。 (地理保护?)
  3. 对于两者(位置和时间限制)的结合,瓶颈似乎是基于位置的瓶颈。

由于性能限制,在设备上处理这些限制似乎更为合理:

-处理设备上的消息触发器(理论上)-

  1. 对于基于时间的消息,将推送通知(在DB中创建消息后立即发送)到包含有效负载的设备,以指定何时触发消息显示通知(您将收到“未来”消息等)并立即注册本地消息,以备将来之需。

问题:我尝试通过以下方法注册本地通知

application(_ application:,didReceiveRemoteNotification userInfo:,fetchCompletionHandler completionHandler:)

隐藏应用程序并接收到推送后,似乎未调用方法(仅显示推送)。我想念什么吗?收到任何形式的推送时,我是否可以随时执行此回调操作?

或 发送带有数据的后台推送,并立即注册本地消息以备将来之用。 (这似乎不是一种选择,因为文档中说:“系统将后台通知视为低优先级:您可以使用它们来刷新应用程序的内容,但是系统不能保证它们的传递。此外,系统如果总数过多,可能会限制后台通知的发送。系统允许的后台通知数量取决于当前条件,但每小时发送的消息不要超过两个或三个。”

这似乎不可行,因为每小时限制2-3条消息,而iOS会限制它们。

  1. 与1相同。发送带有有效负载的推送,注册本地通知以用于将来的位置触发等。

  2. 两者的结合。本地通知不能同时有两个触发器, (https://developer.apple.com/documentation/usernotifications/scheduling_a_notification_locally_from_your_app) 因此,我考虑为同一条接收到的消息注册两个本地通知,并在触发其中任何一个时,检查另一条本地通知的条件(即,是否触发了该位置,检查时间是否也匹配,是否匹配,显示它,否则不要)

问题:这有可能吗?我知道每个应用程序的本地通知数量是有限的,因此数量减少了一半。

鉴于该应用可能会被系统或用户杀死,请问如何确保用户收到消息?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)