当app未运行时,通过静默推送通知在后台更新本地数据库

时间:2015-07-19 12:35:45

标签: ios push-notification

是否可以接收静默推送通知("内容可用":" 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()
}

当我发送推送通知时,如果应用处于活动状态或后台,则数据会更新,但如果应用未运行,则数据不会更新。

1 个答案:

答案 0 :(得分:1)

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

有关说明,请参阅文档:

  • Handling Remote Notifications - application:didReceiveRemoteNotification:fetchCompletionHandler

      

    使用此方法处理应用的传入远程通知。   与应用程序不同:didReceiveRemoteNotification:方法,即   只有当您的应用程序在前台即系统中运行时才会调用   当您的应用在前台运行或运行时调用此方法   背景。此外,如果您启用了远程通知   在后台模式下,系统启动你的应用程序(或从中唤醒它)   暂停状态)并将其置于远程时的后台状态   通知到了。 但是,系统不会自动进行   如果用户强行退出,请启动您的应用。在那种情况下,   用户必须重新启动应用程序或在系统之前重新启动设备   尝试再次自动启动您的应用

  • Understanding When Your App Gets Launched into the Background

      

    支持后台执行的应用程序可能会被系统重新启动   处理传入的事件。 如果应用因任何原因被终止   除了用户强制退出之外,系统启动应用程序   当发生以下事件之一时

         
        
    • 对于位置应用:系统会收到符合的位置更新   应用程序配置的交付标准。设备输入或   退出注册地区。 (区域可以是地理区域或   iBeacon地区。)
    •   
    • 对于音频应用,音频框架需要应用   处理一些数据。 (音频应用程序包括播放音频或使用的应用程序   麦克风。)
    •   
    • 对于蓝牙应用程序:扮演核心角色的应用程序   从连接的外围设备接收数据。一个应用程序在   外围角色从连接的中心接收命令。
    •   
    • 对于后台下载应用:推送通知到达应用和   通知的有效负载包含内容可用密钥   值为1.系统在机会主义时刻唤醒应用程序   开始下载新内容。
    •   
    • 适用于下载内容的应用   后台使用NSURLSession类,与之关联的所有任务   该会话对象要么已成功完成,要么已收到   错误。由报亭应用程序启动的下载完成。多数情况   例如,系统在强制退出后不会重新启动应用程序   用户。
    •   
         

    一个例外是位置应用,在iOS 8及更高版本中   在被用户强制退出后重新启动。在其他情况下,   用户必须明确启动应用程序或重新启动设备   该应用程序可以自动启动到后台   系统

如您所见,唯一的例外是位置应用,但这不会对您有所帮助。 只是处理这个事实,这是一个操作系统限制,你无法做任何事情。