Как периодически отправлять данные о работоспособности пользователя на сервер в iOS - PullRequest
1 голос
/ 20 июня 2019

Я пытаюсь создать приложение, которое собирает пользовательские данные из HealthKit и CMMotionActivities из CoreMotion и отправляет их на сервер. Поскольку 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...