2

我对 iOs 7.1 的新版本感到非常兴奋,它对 iBeacon 进行了重大更改,如下所述:http: //beekn.net/2014/03/apple-ios-7-1-launches-major-ibeacon-改进/

在这里:http ://beekn.net/2014/03/prisoners-dilemma-ios-7-1-challenges-ibeacon-developers/

根据话题,他们说

在 iOS 7.0 中,您只需关闭应用程序,它就会停止向您发送消息。现在,该应用程序甚至不需要打开或在后台运行。

据我所知,当应用程序关闭(不在后台)或发送任何本地通知时,您无法执行任何操作。

那么你怎么知道一个 iOs 7.1 设备是否进入了 iBeacon 区域呢?如果你能捕捉到一个关闭的应用程序进入 iBeacon 区域时,你能唤醒它(打开它)吗?

4

2 回答 2

2

简而言之,是的。我已经在一个应用程序中实现了这一点,并在进入信标范围后调用:

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region;

那时我的应用程序在后台。如果它被终止重新打开但留在后台。我设置为 CLLocationManager 委托的类接收到上述方法的回调,并在我的情况下发布本地通知。但是,您也可以直接触发打开应用程序。

商店中有一个很棒的小示例应用程序,名为 Hide My iPhone by John Yorke。他在这里开源了代码,它展示了如何在应用程序中设置和响应信标。

我还在这里使用了 Apple 的指南来了解更多信息。

于 2014-03-18T09:55:44.137 回答
2

即使您的应用程序已完全关闭,iOS 也会在进入 iBeacon 区域时启动您的应用程序。您可以通过执行以下操作来验证它:

  1. 在AppDelegate中定义locationManager,并添加委托CLLocationManagerDelegate;
  2. 在 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 中初始化 locationManager

    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate = self;
    
  3. 添加方法:

    - (void)locationManager:(CLLocationManager *)manager didExitRegion:(CLRegion *)region {
        if ([region isKindOfClass:[CLBeaconRegion class]]) {
            UILocalNotification *notification = [[UILocalNotification alloc] init];
            notification.alertBody = @"didExitRegion";
            notification.soundName = @"Default";
            [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
        }
    }
    
    
    - (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region {
        if ([region isKindOfClass:[CLBeaconRegion class]]) {
            UILocalNotification *notification = [[UILocalNotification alloc] init];
            notification.alertBody = @"didEnterRegion";
            notification.soundName = @"Default";
            [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
        }
    }
    
于 2014-06-09T03:53:45.527 回答