Многие приложения для фитнеса и здоровья предоставляют функцию подписки на данные, которая позволяет пользователям получать уведомления в режиме реального времени в приложении, как только их фитнес-записи или записи о состоянии здоровья обновляются, например, количество шагов за день, частота сердечных сокращений или дистанция бега.
Однако следить за здоровьем и физической формой в течение длительного времени не так просто. Уведомления в реальном времени здесь менее полезны. Это может быть общей проблемой для приложений для отслеживания фитнеса и здоровья, поскольку достижение конкретных целей не способствует долгосрочному мышлению. Я столкнулся с этой проблемой в своем собственном фитнес-приложении. Допустим, пользователь моего приложения пытается составить план физических упражнений. Они ставят перед собой долгосрочную цель — проходить 10 000 шагов три раза в неделю. Когда цель по шагам будет достигнута за текущий день, мое приложение отправит сообщение с количеством шагов за день. Однако мое приложение все еще не может уведомить пользователя о том, достигнута ли цель за неделю. Это означает, что пользователю придется вручную проверять, выполнил ли он свои долгосрочные цели, что может быть довольно хлопотно.
Я наткнулся на возможность подписки на события на основе сценариев, предоставляемую HMS Core Health Kit, и попробовал интегрировать ее в свое приложение. Вместо подписки на один тип данных я теперь могу подписаться на определенные сценарии, которые подразумевают комбинацию одного или нескольких типов данных. В примере, приведенном выше, сценарием будет ходьба на 10 000 шагов в течение любого из трех дней недели. В конце недели мое приложение выдаст пользователю уведомление о том, достиг ли он своей цели.
После интеграции возможности подписки на события на основе сценариев из комплекта, моим пользователям стало удобнее отслеживать свои долгосрочные цели в области здоровья и фитнеса. В результате значительно улучшился пользовательский опыт, а срок хранения данных увеличился. Теперь мое приложение — это действительно умный и удобный помощник по фитнесу и здоровью. Далее я покажу вам, как мне удалось этого добиться.
Метод интеграции
Регистрация в качестве подписчика
Подайте заявку на сервис Health Kit на HUAWEI Developers, выберите созданный вами продукт и выберите Регистрация возможности уведомления о подписке. Вы можете выбрать режим подписки HTTP, ввести адрес уведомления об обратном вызове и проверить подключение адреса. В настоящее время возможность подписки доступна только для корпоративных разработчиков. Если вы являетесь индивидуальным разработчиком, вы не сможете использовать эту возможность для своего приложения.
Вы также можете выбрать уведомление со стороны устройства и задать имя пакета приложения и действие, если ваше приложение:
-
Использует режим подписки со стороны устройства.
-
Подписывается на события цели по сценарию.
-
Полагается на обмен данными между APK.
Регистрация записей подписки
Чтобы добавить или обновить записи подписки, отправьте HTTP-запрос следующим образом:
POST
https://health-api.cloud.huawei.com/healthkit/v1/subscriptions
Пример запроса
POST
https://health-api.cloud.huawei.com/healthkit/v1/subscriptions
Тело запроса
POST
https://health-api.cloud.huawei.com/healthkit/v1/subscriptions
Content-Type: application/json
Authorization: Bearer ***
x-client-id: ***
x-version: ***
x-caller-trace-id: ***
{
"subscriberId": "08666998-78f6-46b9-8620-faa06cdbac2b",
"eventTypes": [
{
"type": "SCENARIO_GOAL_EVENT",
"subType": "ACHIEVE",
"eventType": "SCENARIO_GOAL_EVENT$ACHIEVE",
"goalInfo": {
"createTime": 1654660859105,
"startDay": 20220608, // Set the goal start date, which must be later than the date on which the goal is created.
"recurrence": {
"unit": 1, // Set the period unit to day.
"count": 30, // Set the entire period to 30 days.
"expectedAchievedCount": 28
},
"goals": [
{
"goalType": 1,
"metricGoal": {
"value": 10000, // Set the goal to 10,000 steps.
"fieldName": "steps",
"dataType": "com.huawei.continuous.steps.total"
}
}
]
}
}
]
}
Получение уведомлений о достижении цели
Отправьте HTTP-запрос следующим образом, чтобы получить уведомления о достижении цели:
POST
https://www.example.com/healthkit/notifications
Пример запроса
POST
https://www.example.com/healthkit/notifications
Тело запроса
POST
https://lfhealthdev.hwcloudtest.cn/test/healthkit/notifications
Content-Type: application/json
x-notification-signature: ***
[{
"appId": "101524371",
"subscriptionId": "3a82f885-97bf-47f8-84d1-21e558fe6e99",
"periodIndex": 0,
"periodStartDay": 20220608,
"periodEndDay": 20220608,
"goalAchieve": [{
"goalType": 1,
"metricGoal": {
"value": 10000.0,
"fieldName": "steps",
"dataType": "com.huawei.continuous.steps.total"
},
"achievedFlag": true // Goal achieved.
}
]
}
(Необязательно) Запрос результатов достижения целей
Отправьте HTTP-запрос следующим образом, чтобы запросить результаты событий на основе сценария за один период:
GET
https://health-api.cloud.huawei.com/healthkit/v1/subscriptions/3a82f885-97bf-47f8-84d1-21e558fe6e99/achievedRecord
Пример запроса
GET
https://health-api.cloud.huawei.com/healthkit/v1/subscriptions/3a82f885-97bf-47f8-84d1-21e558fe6e99/achievedRecord
Тело ответа
HTTP/1.1 200 OK
Content-type: application/json;charset=utf-8
[
{
"openId": "MDFAMTAxNTI0MzcxQGQ0Y2M3N2UxZTVmNjcxNWFkMWQ5Y2JjYjlmZDZiaNTY3QDVhNmNkY2FiaMTFhYzc4NDk4NDI0MzJiaNjg0MzViaYmUyMGEzZjZkNzUzYWVjM2Q5ZTgwYWM5NTgzNmY",
"appId": "101524371",
"subscriptionId": "3a82f885-97bf-47f8-84d1-21e558fe6e99",
"periodIndex": 0,
"periodStartDay": 20220608,
"periodEndDay": 20220608,
"goalAchieve": [{
"goalType": 1,
"metricGoal": {
"value": 10000.0, // Goal value
"fieldName": "steps",
"dataType": "com.huawei.continuous.steps.total"
},
"achievedResult": "20023", // Actual value
"achievedFlag": true // Flag indicating goal achieved
}]
},
{
"openId": "MDFAMTAxNTI0MzcxQGQ0Y2M3N2UxZTVmNjcxNWFkMWQ5Y2JjYjlmZDZiaNTY3QDVhNmNkY2FiaMTFhYzc4NDk4NDI0MzJiaNjg0MzViaYmUyMGEzZjZkNzUzYWVjM2Q5ZTgwYWM5NTgzNmY",
"appId": "101524371",
"subscriptionId": "3a82f885-97bf-47f8-84d1-21e558fe6e99",
"periodIndex": 1,
"periodStartDay": 20220609,
"periodEndDay": 20220609,
"goalAchieve": [{
"goalType": 1,
"metricGoal": {
"value": 10000.0, // Goal value
"fieldName": "steps",
"dataType": "com.huawei.continuous.steps.total"
},
"achievedResult": "9800", // Actual value
"achievedFlag": false // Flag indicating goal not achieved
}]
}
]
Заключение
Часто можно встретить приложения, которые уведомляют пользователей о событиях, связанных с фитнесом и здоровьем, в режиме реального времени, например, за каждый пробегаемый километр, или когда пульс пользователя пересекает определенный порог, или когда он прошел определенное количество шагов в текущий день.
Однако цели в области здоровья и фитнеса, как правило, являются долгосрочными и могут быть разбиты на небольшие периодические цели. Это означает, что приложения, предлагающие только уведомления в реальном времени, не так привлекательны, как могли бы быть.
Пользователи могут поставить долгосрочную цель, например, похудеть на 10 кг за три месяца или ходить в спортзал и заниматься спортом три раза в неделю в течение ближайшего года, а затем разбить ее на месячные или недельные отрезки. Они могут ожидать от приложений функции напоминания о своих целях в области фитнеса или здоровья в долгосрочной перспективе.
Health Kit может помочь нам сделать это легко, не требуя слишком большой нагрузки на разработчиков.
Этот набор предоставляет возможность подписки на события на основе сценариев, позволяя приложениям для здоровья и фитнеса периодически уведомлять пользователей о том, достигли они поставленных целей или нет, причем своевременно.
Благодаря этим уведомлениям пользователи приложения смогут лучше отслеживать свои цели и быть более мотивированными для их достижения, или даже использовать приложение, чтобы поделиться своими целями с друзьями и близкими.