Cordova 应用程序监控 evothings Estimote/iBeacon,而应用程序处于终止状态 IOS
Posted
技术标签:
【中文标题】Cordova 应用程序监控 evothings Estimote/iBeacon,而应用程序处于终止状态 IOS【英文标题】:Cordova Application Monitoring evothings Estimote/iBeacon while the app is in killed state IOS 【发布时间】:2016-08-23 16:16:03 【问题描述】:我在我的科尔多瓦应用程序中安装了https://github.com/katzer/cordova-plugin-background-mode 和https://github.com/katzer/cordova-plugin-local-notifications。
我正在尝试在我的应用关闭时在后台监控信标,并在检测到信标并在区域内时发送通知。
使用这两个插件,当用户退出应用程序屏幕时应用程序成功运行,但应用程序仍在运行,但在用户完全终止进程时无法运行。
这可以仅使用 javascript 完成,还是我必须修改 AppDelegate.m 中的代码?
我已经使用以下代码进行了尝试:
#import "AppDelegate.h"
#import "MainViewController.h"
#import <CoreLocation/CoreLocation.h>
@interface AppDelegate ()
@property (nonatomic, strong) CLLocationManager *locationManager;
@property(nonatomic, assign) BOOL notifyEntryStateOnDisplay;
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
self.viewController = [[MainViewController alloc] init];
self.locationManager = [[CLLocationManager alloc] init];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region
UILocalNotification *notification = [[UILocalNotification alloc] init];
NSLog(@"BLUETOOTH");
if(state == CLRegionStateInside)
notification.alertBody = [NSString stringWithFormat:@"You are inside region %@", region.identifier];
else if(state == CLRegionStateOutside)
notification.alertBody = [NSString stringWithFormat:@"You are outside region %@", region.identifier];
else
return;
[[UIApplication sharedApplication] presentLocalNotificationNow:notification];
@end
虽然应用程序没有启动。我还更改了 xCode [General -> Capabilities] 中的设置,以便开启后台模式和推送通知。
应用程序在后台执行它需要做的事情并且没有被杀死,尽管一旦应用程序被杀死就会停止。我正在尝试在应用离线时发送通知,告知信标在范围内,以便用户可以打开应用。
【问题讨论】:
【参考方案1】:几点:
您必须设置self.locationManager.delegate=self
,并使您的AppDelegate 实现CLLocationManagerDelegate
协议,特别是发现信标时应调用的didEnterRegion
方法。
必须在 AppDelegate 中配置和初始化信标监控。您不能依赖插件来执行此操作,因为当应用切换到前台时,它不一定会保持信标监控处于活动状态。
测试时,在 AppDelegate 的 didEnterRegion
方法中设置日志消息或断点,以便知道它是否被调用。
【讨论】:
以上是关于Cordova 应用程序监控 evothings Estimote/iBeacon,而应用程序处于终止状态 IOS的主要内容,如果未能解决你的问题,请参考以下文章
iBeacon 监控不适用于 Cordova-plugin-ibeacon
AppDelegate.m (Cordova 2.3.0) 中不存在 didFinishLaunchingWithOptions 方法