Healthkit: установите "enableBackgroundDelivery", но iOS не запускает приложение, когда на некоторых устройствах появляются новые данные о здоровье пользователя

Я работаю с HealthKit SDK над своим приложением (это связано со здоровьем). Я настроил "enableBackgroundDelivery", ожидая, что iOS разбудит мое приложение, когда появятся новые данные о работоспособности для пользователя, чтобы я мог начать запрашивать данные о работоспособности пользователя. iOS запускает приложение, когда появляются новые данные о работоспособности, и код работает должным образом на моем устройстве, а также на устройстве пользователя, но на некоторых устройствах iOS вообще не запускает приложение.

Если есть проблема с моим кодом, то он не должен работать на любом устройстве, но он работает с моим устройством и на устройствах пользователей, поэтому я думаю, что очень мало возможностей иметь проблему с моим кодом. Когда я искал другие возможности для этой проблемы, я обнаружил следующие причины, по которым iOS не активирует приложение, когда на некоторых устройствах появляются новые данные о работоспособности пользователя.

  1. Отслеживание фитнеса и здоровье отключены в меню "Настройки" -> "Конфиденциальность" -> "Движение и фитнес". А Калибровка движения и Расстояние отключены в Настройки -> Конфиденциальность -> Службы определения местоположения -> Системные услуги. В этом случае само приложение "Здоровье" по умолчанию не может получить данные о состоянии здоровья, поэтому оно не разбудит мое приложение.

  2. Фоновое обновление приложения отключено для моего приложения. В этом случае, когда приложение свернуто или принудительно закрыто, HealthKit не разбудит мое приложение, потому что пользовательская настройка как таковая.

  3. iOS намеренно не будит мое приложение или какое-либо приложение часто по многим причинам, таким как экономия батареи пользовательского устройства, или если пользователь активно использует так много приложений, то iOS отдает приоритет этим приложениям, а iOS планирует сервисы нашего приложения на будущее, Внутренние алгоритмы iOS учитывают производительность и оптимизацию устройства и распределяют сервисы для приложений, установленных на устройстве, это означает, что наш код будет выполняться только тогда, когда iOS решит, что он будет выполнен. Это может быть причиной того, что я не вижу данные о работоспособности некоторых пользователей, но как долго? iOS должна разбудить мое приложение хотя бы через один или два дня, но этого не произошло.


Для пользователей, с которыми я сталкиваюсь, указанные выше параметры # 1 и # 2 установлены правильно. Если причина № 3, iOS должна разбудить мое приложение по крайней мере через один или два дня, но это не пробуждение приложения, я общался с некоторыми пользователями, и у них есть некоторые данные в стандартном приложении iOS "Здоровье",


Кто-нибудь сталкивался с такой проблемой? Кто-нибудь имел представление о каких-либо других причинах того, почему iOS не разбудил мое приложение, кроме указанных выше причин (с точки зрения кода и настроек iOS)?

Мой код выглядит примерно так: https://gist.github.com/phatblat/654ab2b3a135edf905f4a854fdb2d7c8

Благодарю.

1 ответ

Я много искал, так как не получил никаких фоновых обновлений, хотя использовал стандартную реализацию от Apple и включил фоновую доставку HealthKit в Capabilities.

Оказывается, фоновое обновление должно быть включено в настройках. В самом низу диалогового окна разрешений HealthKit написано: «Чтобы разрешить фоновые обновления, включите «Настройки» -> «Основные» -> «Фоновое обновление ».

Даже если мое приложение там даже не указано, это помогло. Я отключил его по умолчанию, так что, возможно, это будет полезно для кого-то.

Другие вопросы по тегам