当我进入iBeacon系列时,我可以在前台启动应用吗?

我正在使用iBeacons为iOS创build应用程序。 我知道,如果我设置了一个要监视的区域,当我input/退出一个区域时,框架可以调用我的应用程序,或者打开区域内的屏幕。 我已经设法在这个callback中创build一个本地通知。 我的问题是,是否有可能将应用程序放到前台,就像用户启动的一样?

不,我不相信这是可能的。 苹果的哲学是,用户在控制什么应用程序在前台。 将应用程序引入前台的唯一三种方法是:(1)点击图标,(2)点击与应用程序关联的通知,或者(3)通过自定义URL从另一个应用程序启动应用程序。

我有一位长期以来坚持认为这是可能的同事,所以我今天亲自尝试了一下。 在我们的开源SavengerHunt应用程序中 ,我修改了AppDelegate的didDetermineState方法来添加下面的代码,试图强制应用程序进入前台。

  NSLog(@"Attempting for force window %@ into foreground", self.window); [self.window makeKeyAndVisible]; NSLog(@"Done with attempt"); 

在后台检测到iBeacon时执行的代码,并且日志行显示正常。 该应用程序,但是,并没有改变到前台。

  2014-03-06 11:35:43.655 scavengerhunt[277:60b] Sending a notification that a beacon is nearby 2014-03-06 11:35:43.678 scavengerhunt[277:60b] Attempting for force window <UIWindow: 0x14e96730; frame = (0 0; 320 480); gestureRecognizers = <NSArray: 0x14e95870>; layer = <UIWindowLayer: 0x14e961f0>> into foreground 2014-03-06 11:35:43.686 scavengerhunt[277:60b] Done with attempt 

鉴于这不起作用,最好的办法是向用户提供本地通知。 如果他们点击它,你的应用程序将移动到前台。