是否可以接收静默推送通知("内容可用":" 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()
}
当我发送推送通知时,如果应用处于活动状态或后台,则数据会更新,但如果应用未运行,则数据不会更新。
答案 0 :(得分:1)
简短回答:当应用程序强制退出(未运行)时,(几乎)没有办法在没有用户交互的情况下做任何事情。
有关说明,请参阅文档:
Handling Remote Notifications - application:didReceiveRemoteNotification:fetchCompletionHandler:
使用此方法处理应用的传入远程通知。 与应用程序不同:didReceiveRemoteNotification:方法,即 只有当您的应用程序在前台即系统中运行时才会调用 当您的应用在前台运行或运行时调用此方法 背景。此外,如果您启用了远程通知 在后台模式下,系统启动你的应用程序(或从中唤醒它) 暂停状态)并将其置于远程时的后台状态 通知到了。 但是,系统不会自动进行 如果用户强行退出,请启动您的应用。在那种情况下, 用户必须重新启动应用程序或在系统之前重新启动设备 尝试再次自动启动您的应用。
Understanding When Your App Gets Launched into the Background:
支持后台执行的应用程序可能会被系统重新启动 处理传入的事件。 如果应用因任何原因被终止 除了用户强制退出之外,系统启动应用程序 当发生以下事件之一时:
- 对于位置应用:系统会收到符合的位置更新 应用程序配置的交付标准。设备输入或 退出注册地区。 (区域可以是地理区域或 iBeacon地区。)
- 对于音频应用,音频框架需要应用 处理一些数据。 (音频应用程序包括播放音频或使用的应用程序 麦克风。)
- 对于蓝牙应用程序:扮演核心角色的应用程序 从连接的外围设备接收数据。一个应用程序在 外围角色从连接的中心接收命令。
- 对于后台下载应用:推送通知到达应用和 通知的有效负载包含内容可用密钥 值为1.系统在机会主义时刻唤醒应用程序 开始下载新内容。
- 适用于下载内容的应用 后台使用NSURLSession类,与之关联的所有任务 该会话对象要么已成功完成,要么已收到 错误。由报亭应用程序启动的下载完成。多数情况 例如,系统在强制退出后不会重新启动应用程序 用户。
一个例外是位置应用,在iOS 8及更高版本中 在被用户强制退出后重新启动。在其他情况下, 用户必须明确启动应用程序或重新启动设备 该应用程序可以自动启动到后台 系统
如您所见,唯一的例外是位置应用,但这不会对您有所帮助。 只是处理这个事实,这是一个操作系统限制,你无法做任何事情。