Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/121.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c iOS应用程序后台位置(推送通知)_Objective C_Ios_Push Notification_Core Location_Cllocationmanager - Fatal编程技术网

Objective c iOS应用程序后台位置(推送通知)

Objective c iOS应用程序后台位置(推送通知),objective-c,ios,push-notification,core-location,cllocationmanager,Objective C,Ios,Push Notification,Core Location,Cllocationmanager,我面临一个问题,当我的应用程序在后台运行时收到推送通知时,我的应用程序需要用户的位置 读了一点书后,我觉得这是不可能的,即: 1) 后台应用程序 2) 收到推送通知 3) 获取用户位置并执行代码块 我发现这表明你可以每隔N分钟运行一个任务来获取用户的位置。所以使用这个我可以每十分钟检查一次,这会起作用,但是如果我一直激活GPS,那将是对用户电池的浪费。因此,我想知道我是否可以在后台任务中告诉用户是否有推送通知等待我的应用程序?那样的话,我会每隔十分钟检查一次,如果有,我会激活GPS 也许我做得不

我面临一个问题,当我的应用程序在后台运行时收到推送通知时,我的应用程序需要用户的位置

读了一点书后,我觉得这是不可能的,即:

1) 后台应用程序

2) 收到推送通知

3) 获取用户位置并执行代码块

我发现这表明你可以每隔N分钟运行一个任务来获取用户的位置。所以使用这个我可以每十分钟检查一次,这会起作用,但是如果我一直激活GPS,那将是对用户电池的浪费。因此,我想知道我是否可以在后台任务中告诉用户是否有推送通知等待我的应用程序?那样的话,我会每隔十分钟检查一次,如果有,我会激活GPS

也许我做得不对,我真的很感激任何建议。很抱歉没有任何后台任务的代码,因为我仍在尝试让它工作

[更新]


谢谢达斯汀的建议。经过一点测试,我决定选择一个更简单的选项。我现在使用苹果的位置发生了重大变化。我将更改存储在一个数组中,我已将其设置为仅在上次更改大于10分钟前更新。然后,当应用程序处于活动状态时,我将阵列中最接近的时间与发送推送通知的时间进行匹配,并使用该位置。

如前所述,我使用了替代解决方案,如下所示:

在viewDidLoad或didFinishingLaunchingWithOptions下添加:

locationsLogged = [[NSMutableArray alloc] init];
lastLocationTime = [[NSDate alloc] init]
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
在ApplicationIdentinterBackground下添加:

[locationManager startMonitoringSignificantLocationChanges];
加:


然后,在ApplicationIDBecomeActive上,您可以使用应用位置信息所需的任何逻辑。

正如我使用的替代解决方案所讨论的,这里是:

在viewDidLoad或didFinishingLaunchingWithOptions下添加:

locationsLogged = [[NSMutableArray alloc] init];
lastLocationTime = [[NSDate alloc] init]
locationManager = [[CLLocationManager alloc] init];
[locationManager setDelegate:self];
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
在ApplicationIdentinterBackground下添加:

[locationManager startMonitoringSignificantLocationChanges];
加:


然后,在ApplicationIDBecomeActive上,您可以使用所需的任何逻辑来应用位置信息。

是什么发送推送通知的?取决于您可能执行KVO的内容。这是一个基于回合的游戏/应用程序-当用户完成回合时,会向对方用户发送推送通知,让他们知道现在轮到他们了。让通知设置一个布尔值,对应于是否轮到玩家。对布尔值执行KVO。@dciso:您可以选择将您的解决方案发布为您自己问题的答案,以便其他用户可以快速看到您为解决问题所做的工作。只是想一想:)是什么发送推送通知的?取决于您可能执行KVO的内容。这是一个基于回合的游戏/应用程序-当用户完成回合时,会向对方用户发送推送通知,让他们知道现在轮到他们了。让通知设置一个布尔值,对应于是否轮到玩家。对布尔值执行KVO。@dciso:您可以选择将您的解决方案发布为您自己问题的答案,以便其他用户可以快速看到您为解决问题所做的工作。只是一个想法:)