如何在iOS中定期将用户健康数据发送到服务器

时间:2019-06-20 09:17:25

标签: ios swift background fetch health-kit

我正在尝试制作一个应用程序,该应用程序从HealthKit收集用户数据,并从CoreMotion收集CMMotionActivities并将其发送到服务器。由于CoreMotion包含许多CMMotionActivity记录,因此我试图减小数据大小并尽可能多地与服务器共享。

我已经通过后台抓取实现了数据报告:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    //other stuff
    UIApplication.shared.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
    return true
}

func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    profile.loadUserProfile { (result) in
        result.ifSuccess {
            completionHandler(.newData)
        }
        result.ifFailure {
            completionHandler(.failed)
        }
    }
}

func loadUserProfile(completion: @escaping (Result<Any>)->Void) {
    dispatchGroup.enter()
    loadUserHealthProfile() // load health data and dispatchGroup.leave()
    dispatchGroup.enter()
    loadUserMotionProfile() // load motion data and dispatchGroup.leave()
    dispatchGroup.notify(queue: DispatchQueue.main) { [unowned self] in
        self.networkingClient.report(model: self.userProfile.userData) { result in
            completion(result)
        }
    }
}

尽管可以使用,但不确定此解决方案是否正确。正如我在Apple文档中看到的那样,后台获取旨在将更新下载到应用程序中,反之亦然。是否有与服务器共享用户健康和运动数据的正确方法?

UPD

它不能按预期方式工作,当设备被锁定时,application.isProtectedDataAvailable为true,并且我无法查询HealthKit数据。应用程序发送数据的唯一情况是在用户与iPhone交互时触发获取操作吗?

0 个答案:

没有答案