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

iOS - Cordova 如何调用目标 c 函数?

AppDelegate.m (Cordova 2.3.0) 中不存在 didFinishLaunchingWithOptions 方法

基于 Cordova 的 Fabric 项目

调试 Cordova 插件

无法开始工作 ibeacon 演示应用程序