Estimote iBeacons和Cordova - 当iOS被杀时发送推送通知

时间:2015-09-16 19:20:41

标签: cordova ionic-framework phonegap-plugins ibeacon estimote

我正在使用带有Evothings Javascript插件和Estimote iBeacons的Apache Cordova制作应用程序。当应用程序处于后台(未完全关闭)时,我设法使用Phonegap PushPlugin获取推送通知,但是我想更进一步,并在范围内接收推送通知当应用程序被完全杀死时,iBeacons。

我已经看到这可以从Estimote社区的各个帖子中获得,并且在这里通过使用本机Xcode开发堆栈溢出,但只是不使用Cordova / Evothings Javascript SDK。

我的应用程序目前运行EstimoteBeacons.startMonitoringForRegion()功能,当应用程序关闭时,该功能在后台运行,但在应用程序被杀时,似乎根本无法运行任何代码。

我尝试过EstimoteBeacons.requestAlwaysAuthorization();,但也没有做任何事情。

我还尝试使用Cordova local notification plugin,当应用程序被杀时,它再次无法正常工作,这让我相信当应用程序完全关闭时,甚至无法执行任何代码。

如果有人能对此有所了解,我将不胜感激。

由于

2 个答案:

答案 0 :(得分:2)

当应用程序未在iOS上运行时,使其工作的关键是创建一个本机AppDelegate类,它也是CLLocationManager接收didEnterRegion回调的委托。至关重要的是CoreLocation的委托是应用程序的中心AppDelegate,以便让操作系统启动应用程序。

我对iOS上的Cordova不太熟悉,知道如何将插件或其他本机接口层绑定到本机AppDelegate。解决这个问题是使其发挥作用的关键。

答案 1 :(得分:-1)

我会假设只要您实施了CoreBluetooth的状态保存和恢复,它就不会成为问题。

我使用Apple的这份文件作为参考:

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/CoreBluetoothBackgroundProcessingForIOSApps/PerformingTasksWhileYourAppIsInTheBackground.html

"在后台执行长期行动"以下与您的用例最相关。 如果你已经实现了,你可以发布一些代码吗?

编辑: 我查看了Evothings库,我不认为那里的任何插件都可以让你在关闭/终止时唤醒应用程序。

我认为在这种情况下,您需要编写自己的Cordova插件。

在Objective-C方面,该代码看起来像这样:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{ 
  if([launchOptions objectForKey:@"UIApplicationLaunchOptionsLocationKey"])
  {
    self.beaconManager = [ESTBeaconManager new];
    self.beaconManager.delegate = self;
    // don't forget the NSLocationAlwaysUsageDescription in your Info.plist
    [self.beaconManager requestAlwaysAuthorization];
    [self.beaconManager startMonitoringForRegion:[[ESTBeaconRegion alloc]
                                                  initWithProximityUUID:ESTIMOTE_PROXIMITY_UUID
                                                  identifier:@"AppRegion"]];
  }
  return YES;
}

-(void)beaconManager:(ESTBeaconManager *)manager didEnterRegion:(ESTBeaconRegion *)region
{
  UILocalNotification *notification = [[UILocalNotification alloc] init];
  notification.alertBody = @"Enter region";
  notification.soundName = UILocalNotificationDefaultSoundName;

  [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}

-(void)beaconManager:(ESTBeaconManager *)manager didExitRegion:(ESTBeaconRegion *)region
{
  UILocalNotification *notification = [[UILocalNotification alloc] init];
  notification.alertBody = @"Exit region";
  notification.soundName = UILocalNotificationDefaultSoundName;

  [[UIApplication sharedApplication] presentLocalNotificationNow:notification];
}