Steve Nay
Steve Nay

Reputation: 2829

device.uuid undefined in PhoneGap on Android?

I'm writing a PhoneGap application that sends requests to a central database. It needs to be able to identify the unique devices that connect to it.

PhoneGap's device.uuid property would seem to do the trick. On webOS and iPhone, I get back a unique string of alphanumeric characters, which will satisfy my need. However, the Android devices I've tested (Motorola Droid and the Android SDK emulator, both running Android 2.1) return "undefined" as the device.uuid.

device.platform and device.name return correct values on all three platforms, so the problem doesn't have to do with the device object itself (it's defined in the code blocks where I use it).

Is this an Android limitation? A problem with PhoneGap?

Is there any other way to get such a globally unique identifier if not through device.uuid?

EDIT: It appears that the deviceready event is never getting fired, which needs to happen before the device.uuid property becomes available.

Upvotes: 4

Views: 6052

Answers (4)

quinlan
quinlan

Reputation: 122

this works for me:

first installation of device plugin:

cordova plugin add cordova-plugin-device

and in my index.js i have this:

var app = {
    initialize: function() {
        $.support.cors = true;
        this.bindEvents();
    },
    bindEvents: function() {
        document.addEventListener('deviceready', this.onDeviceReady, false);
    },
    onDeviceReady: function() {
        app.receivedEvent('deviceready');
    },
    receivedEvent: function(id) {
        console.log('Received Event: ' + id);
    },   
    getDeviceInfo: function() {
        var aio = new Object();
        aio.agent = device.platform + "," + device.version + "," + device.model;
        aio.deviceid = device.uuid;
        return aio;
    }
};
app.initialize();

module.controller('AppController',function($scope) {
    console.log('GOOOO');
    ons.ready(function() {
        console.log("ons ready");

        var appInfoObj = app.getDeviceInfo();
        console.log("Agent: " + appInfoObj.agent);
        console.log("UUID: " + appInfoObj.deviceid);
    });
});

Upvotes: 0

dpnmn
dpnmn

Reputation: 543

Depending on Phonegap version and/or device, you might need to install the plugin explicitly. In our project, device was present but device.uuid was undefined. Running cordova plugin add org.apache.cordova.device fixed the issue in our case.

Upvotes: 3

Tom Saunders
Tom Saunders

Reputation: 56

I had the same problem. It was working previously, and I eventually traced the problem back to the manifest permissions.

If android.permission.ACCESS_NETWORK_STATE is not enabled, deviceready will not fire, and device.uuid will not be available.

Upvotes: 0

Steve Nay
Steve Nay

Reputation: 2829

I haven't yet found a solution for this, but it is worth noting that this issue is fixed in Android 2.2. But other than that, you'll have to find some other way of getting a unique device identifier if the device is running 2.1 or earlier.

Upvotes: 1

Related Questions