在应用未运行时按需获取用户位置,而不显示推送通知

时间:2015-09-02 12:03:38

标签: ios objective-c swift location

我正在开发一个应用程序(家庭安全),其中一个家庭成员可以在未经其他家庭成员同意的情况下请求并获取其他家庭成员的当前位置即使应用未运行。 推送通知无法实现这一点,因为推送通知在应用未运行时无法正常工作。当有人请求位置时,我不想向用户显示通知。无论应用程序是否正在运行,我希望它能够正常运行。请建议我完成这项任务的任何解决方案。

PS。请不要告诉我,我不应该获得这样的用户位置,否则我的应用将被拒绝。因为我正在为家庭安全公司开发此应用程序,家庭成员将首先阅读并接受公司的政策。

2 个答案:

答案 0 :(得分:2)

首次使用requestAlwaysAuthorization代替requestWhenInUseAuthorization CLAuthorizationStatus来访问应用位置时的位置。

现在使用

UIApplication* application = [UIApplication sharedApplication];
__block UIBackgroundTaskIdentifier background_task;
background_task = [application beginBackgroundTaskWithExpirationHandler:^ {
    [application endBackgroundTask: background_task];
    background_task = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
    [[self locationManager] startUpdatingLocation];//call you web-api here to update location on server.
    [application endBackgroundTask: background_task];
    background_task = UIBackgroundTaskInvalid;
});

这会有所帮助。

答案 1 :(得分:0)

在没有用户干预的情况下请求设备的位置,并且在iOS中无法运行应用程序。

在应用程序终止时,在iOS中获取设备位置的唯一方法是使用重要位置更改。即使应用程序未运行,SLC也会提供位置更新。它只会唤醒应用程序并提供位置更新。

但是,如果您想要请求设备的位置,则必须运行应用程序才能接收请求并进行处理。