我在 SO 和 Google 上做了很多搜索,试图找到这个问题的答案,但我无法将所有的拼图拼凑在一起,所以任何帮助/指点都会很棒。
我想构建一个应用程序,在它进入 iBeacon 区域时检查网络服务。简单的示例用例是这样的:
用户走进配备 iBeacon 的商店,后台应用程序
应用程序不会通知用户,而是向网络服务器发出请求以检查用户 ID 是否为成员(member)(应用程序已获得用户向服务器发送用户 ID 的权限)。
3a。服务器发回“真实”响应
4a。应用程序发送“我们今天有一个特殊的成员(member)促销事件”通知锁定屏幕。
或
3b。服务器发回“错误”响应
4b。应用保持沉默(不通知用户)
仅供引用,这个答案似乎表明可以在后台发送 URL 请求: Running URL Requests in the Background
最佳答案
您几乎已经确定了需要做的所有事情。
当您的CLLocationManagerDelegate
的didEnterRegion:
方法被调用时,您可以启动后台任务,然后启动网络请求。收到响应后,如有必要,您可以发送本地通知,然后结束后台任务。
- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region
{
// If not already performing a background task for this region...
UIBackgroundTaskIdentifier bgTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:self.backgroundTask];
self.backgroundTask = UIBackgroundTaskInvalid;
}];
// perform network request - if successful, display notification. when finished, end background task
}
尽管我应该指出,我实际上不会将后台任务管理和 Web 请求代码直接放在我的 didEnterRegion:
方法中。我有一个单独的 Web API 类来执行请求,只需从 didEnterRegion:
中调用它。
关于ios - 在后台进入应用程序的 iBeacon 区域并在不通知的情况下请求 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21288664/