问题描述
我正在使用Firebase Firestore作为数据库和用于推送通知的Firebase Cloud Messaging开发适用于iOS的消息传递应用程序,希望用户能够发送基于时间和/或基于位置的限制触发的消息(例如2020年9月10日,柏林机场20:20)等。
鉴于应根据位置/时间限制显示消息(显示为我的意思是接收通知),我看到了两种处理方法:
-处理服务器上的消息触发器-
- 对于基于时间的消息:安排应发送消息的时间,在时间到达时发送推送。
- 对于基于位置的消息,以预定义的时间间隔从设备发送位置,如果位置与任何预定义的消息匹配,则发送回退。由于性能/功率的限制,这显然不是一个选择。 (地理保护?)
- 对于两者(位置和时间限制)的结合,瓶颈似乎是基于位置的瓶颈。
由于性能限制,在设备上处理这些限制似乎更为合理:
-处理设备上的消息触发器(理论上)-
application(_ application:,didReceiveRemoteNotification userInfo:,fetchCompletionHandler completionHandler:)
隐藏应用程序并接收到推送后,似乎未调用该方法(仅显示推送)。我想念什么吗?收到任何形式的推送时,我是否可以随时执行此回调操作?
或 发送带有数据的后台推送,并立即注册本地消息以备将来之用。 (这似乎不是一种选择,因为文档中说:“系统将后台通知视为低优先级:您可以使用它们来刷新应用程序的内容,但是系统不能保证它们的传递。此外,系统如果总数过多,可能会限制后台通知的发送。系统允许的后台通知的数量取决于当前条件,但每小时发送的消息不要超过两个或三个。”
这似乎不可行,因为每小时限制2-3条消息,而iOS会限制它们。
-
两者的结合。本地通知不能同时有两个触发器, (https://developer.apple.com/documentation/usernotifications/scheduling_a_notification_locally_from_your_app) 因此,我考虑为同一条接收到的消息注册两个本地通知,并在触发其中任何一个时,检查另一条本地通知的条件(即,是否触发了该位置,检查时间是否也匹配,是否匹配,显示它,否则不要)
问题:这有可能吗?我知道每个应用程序的本地通知数量是有限的,因此数量减少了一半。
鉴于该应用可能会被系统或用户杀死,请问如何确保用户收到消息?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)