在后台输入带有应用程序的iBeacon区域,并在不通知的情况下请求URL

时间:2014-01-22 16:35:40

标签: ios bluetooth-lowenergy ibeacon

我已经做了大量搜索SO和谷歌试图得到一个答案,但我没能把拼图的所有部分放在一起,所以任何帮助/指针都会很棒。

我想构建一个在进入iBeacon区域时检查Web服务的应用程序。简单的示例用例是:

  1. 用户在后台进入带有app的iBeacon配备商店

  2. 应用程序向Web服务器发出请求以检查用户ID是否为成员(该应用程序已被授予用户向服务器发送用户ID的权限),而不是通知用户。

  3. 3A。服务器发回“真实”响应

    4A。应用程序发送“我们今天有特别会员促销”通知锁定屏幕。

    OR

    3B。服务器发回“错误”响应

    4b中。应用程序保持沉默(不通知用户)

    仅供参考这个答案似乎表明可以在后台发送URL请求: Running URL Requests in the Background

2 个答案:

答案 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