我应该在我的 6 和 7 版本的 iOs 应用程序中使用区域监控。如果我的应用程序被关闭,那么系统应该打开它。它适用于 iOS 6,但不适用于 iOS 7。我的意思是,如果应用程序在 ios 7 中关闭,系统不会打开我的应用程序。

关于关闭应用程序,我的意思是,从内存中杀死这个应用程序。

我使用这个代码:

manager = [CLLocationManager new];

manager.delegate = self;

[manager startUpdatingLocation];

if ([UIDevice isIOS7OrHigher]) {

    CLCircularRegion *reg = [[CLCircularRegion alloc] initCircularRegionWithCenter:CLLocationCoordinate2DMake(56.844947, 53.208852) radius:20.f identifier:@"reg14132"];

    [manager startMonitoringForRegion:reg];

    CLCircularRegion *reg1 = [[CLCircularRegion alloc] initCircularRegionWithCenter:CLLocationCoordinate2DMake( 56.844158,53.20913) radius:20.f identifier:@"reg14131232"];

    [manager startMonitoringForRegion:reg1];

} else {

    CLRegion *reg = [[CLRegion alloc]  initCircularRegionWithCenter:CLLocationCoordinate2DMake(56.844947, 53.208852) radius:20.f identifier:@"reg14132"];

    [manager startMonitoringForRegion:reg];

    CLRegion *reg1 = [[CLRegion alloc] initCircularRegionWithCenter:CLLocationCoordinate2DMake( 56.844158,53.20913) radius:20.f identifier:@"reg14131232"];
    [manager startMonitoringForRegion:reg1];
}

我使用委托(delegate)方法记录日志。另外,我使用此代码进行测试
if (launchOptions) {
    UILocalNotification *note = [UILocalNotification new];
    note.alertBody = [NSString stringWithFormat:@"launchOptions = %@", launchOptions];
    [[UIApplication sharedApplication] presentLocalNotificationNow:note];
}

最佳答案

这是现在从 iOS7 开始的预期行为。在 iOS6 及更早版本中,即使您从 app-switcher 手动杀死应用程序,当用户进入/退出区域时,您仍然会收到通知。此行为已将 更改为 iOS7 的 。如果用户从 app-switcher 杀死了该应用程序,即通过在您的应用程序上滑动,那么他们将不再收到任何基于位置的通知,包括区域监控通知。一位 Apple 员工在 Apple 官方开发者论坛 - link here 中证实了这一点。

Apple Dev 提供的唯一解决方案是“如果此更改对您有问题或您希望看到不同的东西,请提交错误报告。”

我个人认为这是一个糟糕的决定,因为它违背了后台通知的目的。您将不得不建议您的用户从 iOS6 升级,因为他们将继续期待类似的功能,而此更改尚未在任何地方记录。

编辑 :正如下面的@herz 所指出的,从 iOS 7.1 开始,后台监控功能已恢复到 iOS 6 中的状态。区域将被监控并且您的应用程序将收到通知,即使它被应用程序切换器杀死.

10-08 01:01