ios - 在后台将位置发送到服务器 - ios 7

标签 ios ios7 push-notification cllocationmanager multitasking

当应用程序收到静默推送时,我尝试在后台发送用户位置。

我的代码:

application:didReceiveRemoteNotification:fetchCompletionHandler:

看起来像:

UIBackgroundTaskIdentifier bgTask = 0;
bgTask = [[UIApplication sharedApplication]  beginBackgroundTaskWithExpirationHandler:^{
          bgTask = UIBackgroundTaskInvalid;
    }];
[_cllManager startUpdatingLocation];
[[UIApplication sharedApplication] endBackgroundTask:bgTask];

locationManager:didUpdateLocations:

看起来像:

UIBackgroundTaskIdentifier bgTask = 0;
    bgTask = [[UIApplication sharedApplication]  beginBackgroundTaskWithExpirationHandler:^{
              bgTask = UIBackgroundTaskInvalid;
        }];
    // here I'm sending the request to server via AFNetworking
    [_cllManager stopUpdatingLocation];

    [[UIApplication sharedApplication] endBackgroundTask:bgTask];

我试图向自己发送无声推送

  • 推送始终到达我的设备
  • 有时请求会立即发送
  • 有时请求已发送,但我在日志中看不到它
  • 有时请求未发送 - 但当我打开应用程序时,所有未发送的请求 - 均已发送
  • 有时请求根本未发送

有什么想法吗?

最佳答案

静默推送通知不可靠,如果为相同服务/设备启用了普通推送通知,则不能保证始终在设备上传递。

我的建议是使用 1)苹果显着的区位变化特征。 2)使用区域监控

两者都可以在后台模式下完成。

关于ios - 在后台将位置发送到服务器 - ios 7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24139878/

相关文章:

objective-c - 如何在 iPhone SDK 的 Objective-C 中合并两个 UIImage 对象

iphone - 在 ios 7 设备上获取多个应用程序图标

uiwebview - 检测是否在iOS7下启用了一般网站限制

angularjs - 如果在不同的选项卡或浏览器上最小化,Firebase 通知会显示两次

ios - 删除 UITableView 行时删除通知(Swift)

iphone - 如何在viewDidAppear方法或viewDidLoad中请求JSON数据?

ios - view属性如何调用viewDidLoad函数呢?

javascript - Parse Cloud Code功能 不能使用Master Key,没有提供

ios - 在导航堆栈上使用一个 ViewController 启动

google-chrome - 是否可以创建浏览器扩展以允许传入请求?