应用程序关闭时的iOS任务

时间:2016-02-07 13:05:44

标签: ios objective-c swift cordova

我正在构建一个应用程序,它通过ajax将文件上传到服务器。 问题是用户很可能有时不会有互联网连接,并且客户希望在用户重新连接时安排ajax呼叫。用户可以在离线并关闭应用程序时安排文件上传。应用程序关闭时(不在后台)可以进行ajax调用吗? 当应用程序在后台时,我们可以使用后台获取,但是当应用程序关闭时,我从未遇到过做某事的问题。

4 个答案:

答案 0 :(得分:5)

简短的回答是否定的,您的应用终止后无法运行代码。

您可以在AppDelegate的{​​{1}}中运行代码,但该方法主要用于保存用户数据和其他类似任务。

另见this answer

答案 1 :(得分:2)

是的,你可以在后台做事。您仅限于几种不同的执行背景模式。服务器通信是允许的模式之一(后台获取)。确保按照指南在Xcode中正确设置属性(即,当您进行数据传输时,不要说您是音频应用程序)。请在此处查看详细信息:

https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

我找到了你的问题,因为它有与之相关的Cordova标签。如果您使用的是Cordova,可以在此处使用此插件来管理后台的内容:

https://github.com/katzer/cordova-plugin-background-mode

编辑:如果用户FORCE关闭/终止应用程序,那么您无能为力。如果他们只是将应用程序退出到主屏幕并使用其他应用程序,那么您可以在后台运行。

您可以执行的另一个选项是安排本地通知以上传文件。如果您的应用程序成功上传该文件,因为它已打开/有连接/在后台执行,那么您取消本地通知。

如果本地通知未被取消,则会提醒用户该文件未上传,当他们打开通知时,您的应用会从停止的位置开始。

答案 2 :(得分:1)

- (void)applicationWillTerminate:(UIApplication *)application {
if (application) {
    __block UIBackgroundTaskIdentifier backgroundTask  = UIBackgroundTaskInvalid;
    backgroundTask = [application beginBackgroundTaskWithName:@"MyTask" expirationHandler:^{
        backgroundTask = UIBackgroundTaskInvalid;
    }];
    [self doSomething];
    [application endBackgroundTask:backgroundTask];
    backgroundTask = UIBackgroundTaskInvalid;
    }
}

答案 3 :(得分:0)

我已经回答了类似的问题: https://stackoverflow.com/a/57245917/6157415

您可以实施通知,当用户收到通知时,您的代码的一部分可以执行。

尤其是静默推送通知可以做到这一点:

  

有时,您可能想使用静音推送通知进行更新   在后台应用内的内容。静默推送通知   被定义为没有警报,标志或声音的推送,并且   仅有键值数据。

发件人:https://docs.mobile.sailthru.com/docs/silent-push-notifications