ios - 在后台进入应用程序的 iBeacon 区域并在不通知的情况下请求 URL

标签 ios bluetooth-lowenergy ibeacon

我在 SO 和 Google 上做了很多搜索,试图找到这个问题的答案,但我无法将所有的拼图拼凑在一起,所以任何帮助/指点都会很棒。

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

  1. 用户走进配备 iBeacon 的商店,后台应用程序

  2. 应用程序不会通知用户,而是向网络服务器发出请求以检查用户 ID 是否为成员(member)(应用程序已获得用户向服务器发送用户 ID 的权限)。

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

4a。应用程序发送“我们今天有一个特殊的成员(member)促销事件”通知锁定屏幕。

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

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

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

最佳答案

您几乎已经确定了需要做的所有事情。

当您的CLLocationManagerDelegatedidEnterRegion: 方法被调用时,您可以启动后台任务,然后启动网络请求。收到响应后,如有必要,您可以发送本地通知,然后结束后台任务。

- (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/

相关文章:

ios - 尝试检测信标但失败,因为 isMonitoringAvailable 始终为 false

ios - Kingfisher iOS 图像未加载

ios - GUI View 层次结构并不总是可见

android - 如何使用 Android 手机与 BLE 设备通话?

android - Android 上低功耗蓝牙中的私有(private)地址与公共(public)地址

javascript - ionic 启动画面卡住

ios - 线程 1 : EXC_BAD_INSTRUCTIONS when parsing rest API http response on class

使用 ARC 进行 iOS 内存管理

macos - 将 Macbook 变成 iBeacon

cllocationmanager - iOS 14 - 当精确位置权限被拒绝时,如何让 iBeacon 唤醒应用程序?