gpt4 book ai didi

ios - 当应用程序未运行时,通过静默推送通知在后台更新本地数据库

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:14:02 25 4
gpt4 key购买 nike

是否可以接收静默推送通知(“content-available”:“1”)并运行一个函数来更改 NSUserDefaults.standardUserDefaults() 中的数据,而无需用户点击通知(通知中心没有通知,因为它是静默推送通知)。该应用程序根本没有运行(例如,用户强制退出)。我已经尝试了下面的代码,如果应用程序正在运行或在后台运行,它就可以运行,但我也希望它可以在应用程序被强制退出(根本没有运行)时运行。

我已启用后台获取和远程通知。

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
handleNotification()
}

//this works, the someData is not a problem
func handleNotification() -> Void{
let defaults = NSUserDefaults.standardUserDefaults()
defaults.setValue(someData, forKey: "key")
defaults.synchronize()
}

当我发送推送通知时,如果应用处于事件状态或处于后台,则数据会更新,但如果应用根本没有运行,则数据不会更新。

最佳答案

简短回答:当应用程序被强制退出(未运行)时,没有用户交互(几乎)没有办法做任何事情。

有关解释,请参阅文档:

  • Handling Remote Notifications - application:didReceiveRemoteNotification:fetchCompletionHandler :

    Use this method to process incoming remote notifications for your app. Unlike the application:didReceiveRemoteNotification: method, which is called only when your app is running in the foreground, the system calls this method when your app is running in the foreground or background. In addition, if you enabled the remote notifications background mode, the system launches your app (or wakes it from the suspended state) and puts it in the background state when a remote notification arrives. However, the system does not automatically launch your app if the user has force-quit it. In that situation, the user must relaunch your app or restart the device before the system attempts to launch your app automatically again.

  • Understanding When Your App Gets Launched into the Background :

    Apps that support background execution may be relaunched by the system to handle incoming events. If an app is terminated for any reason other than the user force quitting it, the system launches the app when one of the following events happens:

    • For location apps: The system receives a location update that meets the app’s configured criteria for delivery. The device entered or exited a registered region. (Regions can be geographic regions or iBeacon regions.)
    • For audio apps, the audio framework needs the app to process some data. (Audio apps include those that play audio or use the microphone.)
    • For Bluetooth apps: An app acting in the central role receives data from a connected peripheral. An app acting in the peripheral role receives commands from a connected central.
    • For background download apps: A push notification arrives for an app and the payload of the notification contains the content-available key with a value of 1. The system wakes the app at opportunistic moments to begin downloading new content.
    • For apps downloading content in the background using the NSURLSession class, all tasks associated with that session object either completed successfully or received an error. A download initiated by a Newsstand app finishes. In most cases, the system does not relaunch apps after they are force quit by the user.

    One exception is location apps, which in iOS 8 and later are relaunched after being force quit by the user. In other cases, though, the user must launch the app explicitly or reboot the device before the app can be launched automatically into the background by the system.

如您所见,唯一的异常(exception)是位置应用程序,但这对您没有帮助。只需面对这样一个事实,即这是一个操作系统限制,您对此无能为力。

关于ios - 当应用程序未运行时,通过静默推送通知在后台更新本地数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31501279/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com