【发布时间】:2017-08-06 02:27:53
【问题描述】:
地理围栏委托方法 didExitRegion 和 didEnterRegion 适用于所有应用程序状态(前景/背景/暂停和终止状态)。一旦通过任何区域,应用程序需要同步命中 3 个相互依赖的 api。在前台状态下一切正常,但不是在 Suspended / Killed 状态。不知道这次失败的确切原因。
一个原因可能是在这种情况下(杀死/挂起状态)执行所有任务的清醒时间限制。我试过 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];
}
如果有人对我在这里做错了什么有任何建议,请提供帮助。在此先感谢
【问题讨论】:
-
所有更新完成后,您需要调用
endBackgroundUpdateTask,因此请从最终完成处理程序中调用它 -
@Paulw11 是的,一旦所有任务在 callAPITwo 内完成,我已经调用了 endBackgroundUpdateTask:
-
您是否引用了 pushkit,通过获得 Apple 的事先许可将应用程序归入特定类别将允许您。
-
@Hasya 不,尚未尝试。你能告诉我更多关于它的信息吗?
标签: ios objective-c background-process geofencing