在我的项目中,Pushy用于处理推送通知。我想在收到特定类型的推送通知时更新本地Sqlite数据。
当应用程序在前台时,我能够处理此问题。使用此Delegate方法。
func notificationWillPresent(userInfo: [String: Any], completionHandler: ((UNNotificationPresentationOptions) -> Void)?) {
let remoteNotification = RemoteNotificationModel(userInfo)
completionHandler?([.sound])
}
但我希望这个相同的本地数据更新时,应用程序是在后台或在杀死的状态。你能建议我如何才能做到这一点。
我做了很多研发,发现当应用程序处于killed状态或后台状态时,没有方法调用来处理这个问题。
1条答案
按热度按时间l5tcr1uw1#
你不能用用户定向推送或应用定向推送来做到这一点。
您需要实现通知服务扩展,然后用户定向推送将被传递到该扩展。通知服务扩展可以提取有效负载并更新数据库。
您可能已经在应用的文件沙箱中创建了数据库,因此需要将应用组功能添加到应用和通知扩展,并在共享组文件沙箱中创建数据库,以便扩展和应用都可以访问该数据库。
我不知道QSLLite是否可以处理来自多个线程的同时更新/访问(或者在这种情况下,它将是多个进程),如果可以,那么你就可以去了。如果不能,那么当通知扩展接收到推送时,它可能需要确定应用程序是否正在运行(这对于使用MMWormmhole的扩展来说是可能的),如果它正在运行,您将需要在它们之间添加一些协调,以确保它们不会同时访问数据库。