Metriche dell’utente#

Quali sono le metriche dell’utente?#

Se si guarda sullo schermo di blocco, si vedrà un cerchio. All’interno del cerchio c’è scritto. Guarda più da vicino, e noterai che il testo contiene i dati relativi all’attività dell’utente. Doppio tap al centro del cerchio, e vedrete più «metriche» sull’utente.

../../_images/met1.png

Questo mostra «7 messaggi di testo inviati oggi». Come lo sapeva?#

../../_images/met2.png

Questo è da un’applicazione di terze parti (nCounter) che fa uso della funzione User Metrics.#

Per la maggior parte, questi messaggi sono abbastanza chiaramente dichiarare ciò che stanno contando, e quale app è correlata. Ma da dove vengono queste metriche?

Come posso utilizzare User Metrics nella mia applicazione?#

Tutte le seguenti informazioni saranno basate sul codice per nCounter.

Il file apparmor della tua app deve includere usermetrics nella politica:

{
    "policy_groups": [
        "usermetrics"
    ],
    "policy_version": 16.04
}

Successivamente, è necessario importare il modulo nel file QML che gestirà le metriche dell’utente:

import UserMetrics 0.1

(Ci possono essere versioni aggiornate di questo sopra 0.1)

Successivamente, il Metric specifico deve essere definito nel codice come un oggetto:

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.
}

Ora che la metrica viene creata, possiamo aggiornare il «format» o «emptyFormat» quando un evento avviene facendo riferimento alle variabili dell’oggetto Metrico.

onButtonPressed: {
    metric.circleMetric = "New Metric Message"
    metric.update(0)
    console.log("Metric updated")
}

Qui assegnamo un nuovo valore alla variabile di stringa circleMetric che è all’interno dell’oggetto Metric:

(Ricorda che circleMetric è il valore variabile assegnato al formato)

Metric Id [punto] Nome variabile [uguale] Nuove informazioni variabili

metric.circleMetric = "Nuovo messaggio metrico"

Diremo poi alla schermata di blocco per aggiornare la metrica.

Aggiornamento Metric ID [dot] (importo specifico da impostare se incluso nel formato)

metric.update(0)

(Nota: In questo esempio, 0 è arbitrario poiché il valore metrico non include un contatore)

Ora abbiamo aggiornato la metrica per oggi. Quando il tempo passa a domani, la metrica sarà ripristinata a qualsiasi cosa sia in ``emptyFormat`.

Per la maggior parte delle applicazioni, questo default a 0 conta per messaggi, chiamate, ecc.

Come funzionano le metriche degli utenti?#

I metrici utente sono costituiti da due «formati»:

  • metriche/messaggio per oggi (format)

  • metriche/messaggio per domani (emptyFormat)

Il valore di emptyFormat è quello che visualizza sulla schermata di blocco quando nessun valore è stato memorizzato in format. Per visualizzare un nuovo valore di format la metrica deve essere aggiornata.

Ci sono due opzioni per aggiornare la metrica:

  • Impostare la metrica a un importo specifico:

metricID.update(x) (dove x è un numero di tipo doppio da impostare per un controvalore). metricID è il id: specificato nella voce Metrica. Il controvalore può essere incluso nell’impostazione format utilizzando %1. ad esempio format: "%1 pulsanti premuto oggi"

  • Incremento della metrica:

metricID.increment(x) (dove x è la quantità da aggiungere al contatore corrente)

La metrica ritornerà al valore memorizzato in emptyFormat ogni giorno.

Le applicazioni fanno uso di metriche dell’utente impostando e aggiornando i «formati» ogni volta che un determinato evento avviene. ad esempio. Quando si preme inviare in Telegram, o quando si riceve una telefonata. L’applicazione può memorizzare i dati per la manipolazione, ma generalmente i dati vengono memorizzati nel sistema (/var/lib/usermetrics).

(Vedi questo articolo<https://daker.me/2013/11/adding-usermetrics-to-your-app-on-ubuntu-touch.html>`_ per un semplice esempio)

Limitazioni e meraviglie#

Una volta che una metrica è registrata, rimane sulla schermata di blocco anche dopo che l’applicazione è stata disinstallata. Un file di database (db) viene memorizzato in /var/lib/usermetrics, che può essere eliminato da root (ma non con sudo). Cancellare questo file e riavviare rimuoverà tutte le metriche memorizzate. Presumibilmente, il file db potrebbe essere modificato invece di cancellato.

Based on how the «formats» are set up, it seems that it is difficult to maintain a running tally beyond one day (though not impossible. See FluffyChat).

In the case of the nCounter app. I wanted to count the number of days, but since the metric «resets» each day, that presents a problem. I created a workaround that updates the metric every time the application is opened. Thus, the emptyFormat (default) tells the user to open the application. This, however, nearly defeats the purpose of the metric entirely, other than having a neat stat reminder for the day.

There must be a way for a process to run independently in the background (e.g. cron) to retrieve data from a specific app code. One lead is the Indicator Weather app. This runs a process every X minutes to update the weather indicator automatically without having to open the app.