一旦应用程序从终止/挂起状态唤醒,就触发 3 个同步 API

Fire 3 synchronous APIs once application wakes up from killed/ suspended state

Geo-Fencing 委托方法 didExitRegiondidEnterRegion 适用于所有应用程序状态(前景/背景/暂停和终止状态)。一旦通过任何区域,应用程序需要同步命中 3 个相互依赖的 api。在前台状态下一切正常,但在暂停/终止状态下不正常。不知道这次失败的确切原因。

在这种情况下(终止/暂停状态)执行所有任务的唤醒时间限制可能是一个原因。我尝试了 beginBackgroundTaskWithExpirationHandler ,但它没有帮助我。

- (void) beginBackgroundUpdateTask{

    _backgroundTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [self endBackgroundUpdateTask];
    }];
}

- (void) endBackgroundUpdateTask{

    [[UIApplication sharedApplication] endBackgroundTask:_backgroundTask];
    _backgroundTask = UIBackgroundTaskInvalid;
}


- (void)locationManager:(CLLocationManager *)manager
         didEnterRegion:(nonnull CLRegion *)region
{
    [kSharedAppDelegate beginBackgroundUpdateTask];

    NSString *locId = [region.identifier substringFromIndex:1];
    Recipe *recipe = [Recipe getSelectedReturnRecipeForLocationId:locId];
    if(recipe)
    {
        [self  callAPIOne:^(NSDictionary *dictResponse) {

          [self callAPITwo:params forAbc:NO];

        } withFailed:^(NSDictionary *dictResponse) {
                 [kSharedAppDelegate endBackgroundUpdateTask];
        } showLoader:NO];
    }
    else
        [kSharedAppDelegate endBackgroundUpdateTask];
}

如果有人对我在这里做错了什么有任何建议,请帮忙。提前致谢

我自己发布这个答案,只是为了清楚 以上代码足以完成此类任务。使用上面的代码,所有需要的任务都在所有应用程序状态下工作(foreground/background/killed/suspended)。

我的问题出在核心数据实现上。一旦配方对象变成零,我就跳过了更多的代码。这让我觉得 API 没有触发,因为处于终止状态的时间限制有限。

希望以上代码可以帮助其他人解决同样的问题。