我正在实施一个带有内部日历的应用,从远程网络服务中获取。我想在日历中,在他选择的特定时间安排感兴趣的事件时向用户发送本地通知。就像iOS日历应用程序一样,当您可以创建一个事件并要求在事件发生前X小时/几天收到通知。主要区别在于您无法创建事件:它们是从预先填充的远程日历下载的。
在Android中我通过使用AlarmManager解决了这个问题,而在使用Swift 3的iOS中,我最接近移植相同解决方案的是通过机会性后台数据获取。两种解决方案之间的主要区别在于,当应用程序被杀死时,后台数据提取功能无效。
对我来说,即使应用程序被杀,本地通知仍然非常重要。我认为即使应用程序关闭,用户也希望应用程序通知能够正常工作,就像WhatsApp或Facebook一样。我知道这些通知是由某人写的东西引发的,因此它们是推送通知,但普通用户只希望通知即使应用程序关闭也能继续工作。
什么是最优雅的解决方案"模拟" iOS中Android的AlarmManager的行为?
预先安排一堆通知希望用户在所有应用程序出列之前最终打开应用程序,这看起来设计得很糟糕。
此外,将所有工作委托给服务器并将通知推送到订阅设备看起来非常糟糕,因为它需要在服务器端进行更多工作。此外,它需要一个能够唤醒自己发送推送通知的服务器,这是我不具备的。我只有一个简单的网络服务器来回应HTTP请求。
编辑:我正在寻找的理想解决方案不是前两个选项中的任何一个,因为我发现它们更像是解决方法,而不是我认为存在的实际优雅解决方案一个相当普遍的问题。必须有第三种选择......
答案 0 :(得分:0)
在iOS中无法实现此目的。查看application(_:didReceiveRemoteNotification:fetchCompletionHandler:)的文档,它指出
如果用户强行退出,系统不会自动启动您的应用。在这种情况下,用户必须重新启动您的应用程序或重新启动设备,然后系统才会再次尝试自动启动您的应用。
您可以接收推送通知,但在用户启动您的应用之前不会执行任何代码。因此,除非您从服务器发送远程推送通知,否则在用户打开您的应用程序之前,您无法设置新的本地通知。