【问题标题】:iOS - trigger event on Proximity using iBeaconsiOS - 使用 iBeacons 在 Proximity 上触发事件
【发布时间】:2014-03-13 15:09:29
【问题描述】:

我正在使用新的 iOS7 API 开发一个 iOS 应用程序:iBeacon。

当我检测到给定的接近度时,我只是试图触发一个事件,这里是立即(在 4 个中,其他的是近、远和未知)。

当我在 iPhone 4S 上构建我的应用程序时,它可以工作。所以我可以说我已经完成了,但由于我对 iOS 很陌生,我根本不确定我的实现是否无论如何正确,或者更糟糕的是,如果不是这样,安全

我基本上在我的视图控制器(objective-c 类)中实现了我的事件,并在 locationManager 方法中调用它,在该方法中,信标被排列。如果你想看看它是如何运行的,我会使用示例应用程序AirLocate 中给出的代码。

我的事件只是调用另一个视图(为了在该特定视图上提供对某些新功能的访问权限,仅当您与我的 Beacon 非常接近时)。我认为这是智能,因为每次我的信标被测距时,if 条件也会运行,如果它为真,我的事件就会被调用。

下面是我的 if 条件,它位于 locationManager 方法的末尾:

    //Beacons ranging method from Apple until here.
    //My code following the sample code.

    CLBeacon *beacon = [[CLBeacon alloc] init];
    beacon = [beacons lastObject];
    if (beacon.proximity == CLProximityImmediate) {
        [self immediateDetection];
    }
    //End of the method here, which would be closed by the last "}"

这是我的小方法/事件:

    - (void)immediateDetection
    {
        NSString *storyboardName = @"Main";
        UIStoryboard *storyboard = [UIStoryboard storyboardWithName:storyboardName bundle:nil];
        UIViewController *viewController = [storyboard instantiateViewControllerWithIdentifier:@"HueSwitch"];

        //call another view
        [self presentViewController:viewController animated:YES completion:nil];
    }

正如我所说,它在我的 iPhone 上运行良好,但我无法知道它是否是不行的。

那么,我只是傻了,似乎一切都很好,还是我的代码存在一些严重的安全性或稳定性问题?

谢谢。

【问题讨论】:

  • 唯一的一个建议:测距会产生非常频繁的委托调用,所以您需要检查屏幕上是否已经出现“即时”视图,而不是再次显示它
  • CLBeacon *beacon = [[CLBeacon alloc] init]; -- 这行不需要
  • 好的,以下是否正确?而不是前 2 行代码,我只有一个:CLBeacon *beacon = [beacons lastObject];
  • 是的,也请看我的回答

标签: ios iphone objective-c ios7 ibeacon


【解决方案1】:

稍微重写你的代码

CLBeacon *beacon = [beacons lastObject];
if (beacon && beacon.proximity == CLProximityImmediate) {
   [self immediateDetection];
}

在第二部分中,如果视图已经可见,则添加检查以不显示视图

 - (void)immediateDetection
{
    if (self.presentedViewController)
    {
      return;
    }
    // rest of code here 

【讨论】:

  • 好的,谢谢您的快速答复。现在您已经指出了,检查视图控制器是否已经呈现似乎是基本逻辑。我要先测试一下!
  • 我只是想到了这一点:因为当我的视野消失时我停止了我的信标的测距。你的测试真的有必要吗?因为如果没有测距,就没有测试我的设备是否在我的信标附近,因此我的视图控制器无论如何都不能被“再次”调用。听起来是对的,还是我的假设走错了路?
  • 如果你确定没问题,我只是担心 iBeacon 和 UI 的异步性质。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-18
  • 2013-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多