web-dev-qa-db-fra.com

Obtenez un ID d'appareil unique dans QML

J'ai besoin d'obtenir un identifiant unique pour l'appareil. Au départ, je pensais utiliser l'imei de l'appareil, mais cela ne semble rien retourner:

import QtSystemInfo 5.0

DeviceInfo {
    id: device
}

Component.onCompleted {
    console.log(device.imei(0)) // Returns nothing
}

Cela peut ou non être un bug: https://bugs.launchpad.net/ubuntu/+source/qtsystems-opensource-src/+bug/1197542 mais puisqu'il n'y a eu aucune mise à jour depuis un an, j'espère que je pourrai peut-être utiliser d'autres informations.

Alors, quelqu'un sait-il comment obtenir un identifiant unique pour l'appareil? Il doit être persistant, mais il peut être totalement dénué de sens autrement qu'en tant qu'identifiant.

2
Tommy Brunn

Comme l'a dit dobey, il n'y a aucun moyen d'obtenir l'IMEI dans les applications confinées, j'ai donc renoncé à essayer d'obtenir un ID basé sur l'appareil lui-même. Au lieu de cela, je génère simplement un UUID et le stocke dans U1DB.

// uuid.js
.pragma library

function generateUUID(){
    var d = new Date().getTime();
    var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
        var r = (d + Math.random()*16)%16 | 0;
        d = Math.floor(d/16);
        return (c === 'x' ? r : (r&0x3|0x8)).toString(16);
    });
    return uuid;
};

// Elsewhere
U1db.Database {
    id: db
    path: "settings"
}

U1db.Document {
    id: user
    database: db
    docId: "user"
    create: true
    defaults: {
        "userId": ""
    }
}

// Somewhere I need the userId
Item {
    id: thing

    Component.onCompleted: {
        userId: user.contents.userId
        if (!userId) {
             userId = Uuid.generateUUID()
             var userContents = user.contents
             userContents.userId = userId
             user.contents = userContents
        }
        return userId
    }
}
0
Tommy Brunn

Cela fonctionne. C'est ainsi que ubuntu-system-settings est obtention de l'IMEI .

Au contraire, votre problème peut être que console.log () ne va pas à la sortie de la console sur laquelle vous vous attendez à le voir, ou le système sur lequel vous l'exécutez, n'a pas d'IMEI disponible (qui nécessite un modem GSM). Il existe également un numéro de série indiqué dans la page À propos des paramètres système, mais il est lu via un plug-in C++, que vous ne pouvez probablement pas utiliser directement à partir de votre application et peut nécessiter une réimplémentation.

La lecture des informations sur l'appareil est actuellement limitée aux applications système non confinées. Il n'y a aucun groupe de règles actuel à utiliser pour pouvoir lire l'IMEI dans une application confinée.

1
dobey