Obtenha um ID de dispositivo exclusivo no QML

2

Eu preciso de um ID exclusivo para o dispositivo. Eu originalmente pensei que eu usaria o dispositivo imei, mas isso não parece retornar nada:

import QtSystemInfo 5.0

DeviceInfo {
    id: device
}

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

Isso pode ou não ser um bug: link mas já que não houve atualizações por um ano, espero que talvez eu possa usar alguma outra informação.

Então, alguém sabe como posso obter um ID exclusivo para o dispositivo? Tem que ser persistente, mas pode ser totalmente sem sentido a não ser como um identificador.

    
por Tommy Brunn 04.01.2015 / 22:54

2 respostas

0

Como o dobey disse, não há como obter o IMEI em aplicativos confinados, então desisti de tentar obter uma identificação com base no próprio dispositivo. Em vez disso, eu apenas gero um UUID e o armazeno no 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
    }
}
    
por Tommy Brunn 10.01.2015 / 12:46
1

Isso funciona. É assim que ubuntu-system-settings é como o IMEI .

Em vez disso, o seu problema pode ser que o console.log () não está indo para qualquer saída do console que você está esperando para vê-lo, ou o sistema que você está executando, não tem IMEI disponível (o que requer um modem GSM ). Há também um número de série mostrado na página Sobre das configurações do sistema, mas está sendo lido por meio de um plug-in C ++, que você provavelmente não pode usar diretamente do seu aplicativo e pode precisar reimplementar.

A leitura das informações do dispositivo é limitada a aplicativos não limitados do sistema no momento. Não há nenhum policy_group atual para ser capaz de ler o IMEI em um aplicativo confinado.

    
por dobey 05.01.2015 / 16:00