ios - 在 iOS 中安排一个 ersatz 后台获取

标签 ios cocoa-touch scheduling background-fetch

我正在尝试让我的应用程序在特定的预定时间执行后台提取。我有让 iOS 自己解决这个问题的想法,所以(在 ​​AppDelegate 中):

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    if ([UIApplication instancesRespondToSelector:@selector(registerUserNotificationSettings:)]) {
        [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert|UIUserNotificationTypeSound categories:nil]];
    }

    [[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];
    return YES;
}

然后(也在 AppDelegate 中)

-(void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    NSDate *now = [NSDate date];

    if ((([now timeIntervalSinceDate:lastCheckTime]/60) > 60)||(!lastCheckTime)) { //don't update more than once every hour
        lastCheckTime = now;
        [notificationUpdate getStatusUpdateWithCompletionHandler:completionHandler];
    } else {
        completionHandler(UIBackgroundFetchResultNewData);
    }    
}

如果我手动触发背景检查,在 Xcode 中,这将完美运行。可悲的是,如果我只是将它留给自己的设备,它就不能完美地工作。

我如何安排我的 getStatusUpdate 函数的执行时间或导致在特定时间发生后台提取(现实生活中的用例是应用程序将在用户定义的时间附近检查,例如闹钟 - 这不是会一直运行并耗尽电池的东西)

我在互联网上发现了很多关于安排警报的信息(包括这里 - 我在这里找到了一个示例,建议使用 CoreLocation 来触发后台获取 - 我不知道这是否可行,但是,出于以下原因节电,我不喜欢这个主意。) - 但这只会导致屏幕上显示警报,我不想显示警报 - 至少,在我检查状态更新之前不会。

一如既往,我们将非常感激任何帮助(但我担心答案是我不能做我想做的事!)。

最佳答案

你不能为所欲为。唯一的解决方法是实现推送通知并让 API 在指定时间发送推送。

关于ios - 在 iOS 中安排一个 ersatz 后台获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28753793/

相关文章:

ruby - Ruby 中的大规模调度

prolog - 使用Prolog将任务计划到单个资源

ios - 在 Swift 中为 UIPickerView 委托(delegate)方法

iphone - 如何使用 parse.com 从特定日期检索所有对象?

iphone - 使用距离位置 : on none CLLocation objects?

ios - 使用 reloadData 时如何执行单元格选择动画?

iPhone 不使用 MessageUI 发送电子邮件

c - 如何在 Linux Kernel 3.8.0 中修改 task_struct

ios - 从weakSelf调用的方法中引用weakSelf会导致保留周期吗?

iphone - 将 PDF 文件插入核心数据?