Puis-je lancer une application au premier plan lorsque j'entre dans une gamme iBeacon?

Je crée une application pour iOS en utilisant iBeacons. Je sais, que si je configure une région à surveiller, le framework peut invoquer mon application quand j'entre / quitte une région, ou allume l'écran à l'intérieur de la région. J'ai également réussi à créer une notification locale dans ce callback. Ma question est la suivante: est-il possible de mettre l'application au premier plan, comme si elle avait été lancée par l'user?

Non, je ne crois pas que ce soit possible. La philosophie d'Apple est que l'user contrôle l'application au premier plan. Les trois seules façons de mettre une application au premier plan sont: (1) en appuyant sur son icône, (2) en appuyant sur une notification associée à l'application ou (3) via une URL personnalisée pour lancer l'application à partir d'une application différente.

J'ai un collègue qui a longtime insisté sur le fait que c'est possible, alors je l'ai essayé moi-même aujourd'hui pour voir avec certitude. Dans notre application SavengerHunt open source, j'ai modifié la méthode didDetermineState de didDetermineState pour append le code ci-dessous pour essayer de forcer l'application au premier plan.

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

Le code exécuté lorsqu'un iBeacon a été détecté en arrière-plan et que les lignes de journal sont apparues comme prévu. L'application, cependant, n'a pas changé au premier plan.

  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 

Étant donné que cela ne fonctionne pas, votre meilleur pari est de présenter une notification locale à l'user. S'ils tapent dessus, votre application se déplacera au premier plan.