我正在使用带有Evothings Javascript插件和Estimote iBeacons的Apache Cordova制作应用程序。当应用程序处于后台(未完全关闭)时,我设法使用Phonegap PushPlugin获取推送通知,但是我想更进一步,并在范围内接收推送通知当应用程序被完全杀死时,iBeacons。
我已经看到这可以从Estimote社区的各个帖子中获得,并且在这里通过使用本机Xcode开发堆栈溢出,但只是不使用Cordova / Evothings Javascript SDK。
我的应用程序目前运行EstimoteBeacons.startMonitoringForRegion()
功能,当应用程序关闭时,该功能在后台运行,但在应用程序被杀时,似乎根本无法运行任何代码。
我尝试过EstimoteBeacons.requestAlwaysAuthorization();
,但也没有做任何事情。
我还尝试使用Cordova local notification plugin,当应用程序被杀时,它再次无法正常工作,这让我相信当应用程序完全关闭时,甚至无法执行任何代码。
如果有人能对此有所了解,我将不胜感激。
由于
答案 0 :(得分:2)
当应用程序未在iOS上运行时,使其工作的关键是创建一个本机AppDelegate类,它也是CLLocationManager
接收didEnterRegion
回调的委托。至关重要的是CoreLocation的委托是应用程序的中心AppDelegate,以便让操作系统启动应用程序。
我对iOS上的Cordova不太熟悉,知道如何将插件或其他本机接口层绑定到本机AppDelegate。解决这个问题是使其发挥作用的关键。
答案 1 :(得分:-1)
我会假设只要您实施了CoreBluetooth的状态保存和恢复,它就不会成为问题。
我使用Apple的这份文件作为参考:
"在后台执行长期行动"以下与您的用例最相关。
如果你已经实现了,你可以发布一些代码吗?
击>
编辑: 我查看了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];
}