使用iBeacon打开应用程序

时间:2014-03-18 09:41:02

标签: ios iphone ibeacon ios7.1

我对iO 7.1的新版本感到非常兴奋,iBeacon发生了重大变化,详见http://beekn.net/2014/03/apple-ios-7-1-launches-major-ibeacon-improvement/

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

根据话题,他们说

  

在iOS 7.0中,你可以关闭应用程序并停止发送   你的消息。现在,该应用程序甚至不需要打开或在   工作的背景。

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

那你怎么知道如果iOs 7.1设备进入iBeacon区域呢? 如果您可以在关闭的应用程序进入iBeacon区域时捕获,可以将其唤醒(打开它)吗?

2 个答案:

答案 0 :(得分:2)

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

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

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

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

我还使用Apple here的指南了解详情。

答案 1 :(得分:2)

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

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

    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];
        }
    }