我已经做了大量搜索SO和谷歌试图得到一个答案,但我没能把拼图的所有部分放在一起,所以任何帮助/指针都会很棒。
我想构建一个在进入iBeacon区域时检查Web服务的应用程序。简单的示例用例是:
用户在后台进入带有app的iBeacon配备商店
应用程序向Web服务器发出请求以检查用户ID是否为成员(该应用程序已被授予用户向服务器发送用户ID的权限),而不是通知用户。
3A。服务器发回“真实”响应
4A。应用程序发送“我们今天有特别会员促销”通知锁定屏幕。
OR
3B。服务器发回“错误”响应
4b中。应用程序保持沉默(不通知用户)
仅供参考这个答案似乎表明可以在后台发送URL请求: Running URL Requests in the Background
答案 0 :(得分:5)
你几乎已经确定了你需要做的一切。
调用CLLocationManagerDelegate
的{{1}}方法后,您可以启动后台任务,然后启动网络请求。收到回复后,您可以在必要时发送本地通知,然后结束后台任务。
didEnterRegion:
虽然我应该注意,我实际上不会将后台任务管理和Web请求代码直接放在我的- (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 API类来执行请求,只是在didEnterRegion:
内调用它。
答案 1 :(得分:0)
这也可能有所帮助(简短回答是'是''但你的逻辑必须在5秒内结束):https://apple.stackexchange.com/questions/174787/can-ibeacon-range-region-monitoring-trigger-dynamic-data-based-notification/174873#174873