Пользовательские метрики¶
Что такое «Пользовательские метрики»?¶
Если вы посмотрите на экран блокировки, вы увидите круг. Внутри этого круга есть текст. Посмотрите внимательнее, и вы заметите, что текст содержит данные об активности пользователя. Дважды нажмите на середину круга, и увидите больше «метрик» о пользователе.
Там есть уведомление: «Сегодня было отправлено 7 текстовых сообщений.» Откуда это известно?¶
Информация поступает из стороннего приложения (nCounter), которая используется для работу функцию «User Metrics».¶
По большей части в этих сообщениях достаточно четко указано, что какие данные они используют и какое приложение этим связано. Но откуда берутся эти метрики?
Как я могу использовать пользовательские метрики в своём приложении?¶
Вся следующая информация будет основана на коде для приложения nCounter.
Файл apparmor приложения должен включать в политику параметр usermetrics :
{
"policy_groups": [
"usermetrics"
],
"policy_version": 16.04
}
Далее нужно будет импортировать в файл QML модуль для обработки метрики пользователя:
import UserMetrics 0.1
(Могут быть доступны обновленные версии выше 0.1)
Далее, выбранную Метрику нужно настроить в программном коде как объект:
Metric { // Define the Metric object.
property string circleMetric // Create a string-type variable called "circleMetric". This is so you can update it later from somewhere else.
id: metric // A name to reference the metric elsewhere in the code. i.e. when updating format values below.
name: "nCounter" // This is a unique ID for storing the user metric data
format: circleMetric // This is the metric/message that will display "today". Again it uses the string variable that we defined above
emptyFormat: i18n.tr("Check nCounter") // This is the metric/message for tomorrow. It will "activate" once the day roles over and replaces "format". Here I have use a simple translatable string instead of a variable because I didn’t need it to change.
domain: "ncounter.joe" // This is the appname, based on what you have in your app settings. Presumably this is how the system lists/ranks the metrics to show on the lock screen.
}
Теперь, когда метрика создана, можно обновить «format» или «emptyFormat», когда происходит событие, ссылаясь на переменные в объекте метрики.
onButtonPressed: {
metric.circleMetric = "New Metric Message"
metric.update(0)
console.log("Metric updated")
}
Здесь мы присваиваем новое значение строковой переменной circleMetric, которая находится внутри объекта метрики:
(Помните, что circleMetric - это значение переменной, задаваемое в формате)
Metric Id [dot] Имя переменной [equals] Новые данные для переменной
metric.circleMetric = "Новое сообщение метрики"
Затем мы сообщаем экрану блокировки о том, что необходимо обновить метрику.
Metric ID [dot] update (определённое значение, которое необходимо установить, если оно включено в формат)
metric.update(0)
(Note: In this example, 0 is arbitrary since the metric value doesn’t include a counter)
We have now updated the metric for today. When the time rolls over to tomorrow, the metric will be reset to whatever is in emptyFormat.
Для сообщений, звонков и большинства приложений значение этой опции по умолчанию - 0.
Как работает пользовательская метрика?¶
Пользовательская метрика состоит из двух «форматов»:
метрики/сообщения для текущих суток (
format)метрики сообщения для следующих суток (
emptyFormat)
The value of emptyFormat is what displays on the lock screen when no value has been stored in format. In order to display a new value of format the metric must be updated.
Есть два способа обновления метрики:
Задайте в метрике определённое значение:
metricID.update(x) (where x is a number of type double to set for a counter value). metricID is the id: specified in the Metric item. The counter value can be included in the format setting by using %1. e.g. format: "%1 buttons pressed today"
Увеличение метрики:
metricID.increment(x) (где x - значение, которое нужно добавить к текущему счетчику)
Показатель будет сбрасываться каждый день на значение, сохраненное в emptyFormat.
Applications make use of User Metrics by setting and updating the «formats» whenever a certain event takes place. e.g. When you press send in Telegram, or when you receive a phone call. The application may store the data for manipulation, but generally the data is stored in the system (/var/lib/usermetrics).
(Простой пример можно посмотреть в этой статье)
Ограничения и особенности¶
После регистрации метрика остается на экране блокировки даже после удаления приложения. Файл базы данных (db) хранится в папке /var/lib/usermetrics, который можно удалить только с правами root (команда sudo не поможет). Удаление этого файла и перезагрузка удалит все сохраненные метрики. Предположительно, файл db можно редактировать, а не удалять.
Исходя из того, как настроены «форматы», кажется, что трудно поддерживать текущее состояние более одного дня (это вполне возможно. Подробнее см. главу FluffyChat).
Особенность приложения nCounter. Хочется посчитать количество дней, но поскольку метрика «сбрасывается» каждый день, это представляет проблему. Можно создать workaround, который обновляет метрику каждый раз, когда приложение открывается. Таким образом, emptyFormat (по умолчанию) говорит пользователю открыть приложение. Это, однако, почти полностью противоречит цели метрики пользователя, за исключением аккуратного напоминания о статистике за день.
Процесс должен запускаться независимо в фоновом режиме (например, cron) для извлечения данных из определенного кода приложения. Например, есть приложение Индикатор погоды. Оно запускает процесс каждые X минут для автоматического обновления индикатора погоды без необходимости открывать приложение.