4

我正在编写一个将请求发送到中央数据库的 PhoneGap 应用程序。它需要能够识别连接到它的唯一设备。

PhoneGap 的device.uuid属性似乎可以解决问题。在 webOS 和 iPhone 上,我得到一个唯一的字母数字字符串,这将满足我的需要。但是,我测试过的 Android 设备(摩托罗拉 Droid 和 Android SDK 模拟器,都运行 Android 2.1)返回“未定义”作为device.uuid.

device.platformdevice.name在所有三个平台上返回正确的值,因此问题与对象本身无关device(它在我使用它的代码块中定义)。

这是Android限制吗?PhoneGap 有问题吗?

如果不通过,还有其他方法可以获得这样的全球唯一标识符device.uuid吗?

编辑:似乎该deviceready事件永远不会被触发,这需要在device.uuid属性可用之前发生。

4

4 回答 4

3

根据 Phonegap 版本和/或设备,您可能需要显式安装插件。在我们的项目中,设备存在,但 device.uuid 未定义。在我们的案例中,运行cordova plugin add org.apache.cordova.device解决了这个问题。

于 2014-10-28T09:18:09.397 回答
1

我还没有找到解决方案,但值得注意的是,这个问题在 Android 2.2 中已修复。但除此之外,如果设备运行的是 2.1 或更早版本,您必须找到其他方法来获取唯一设备标识符。

于 2010-07-26T21:40:41.510 回答
0

我有同样的问题。它以前可以工作,我最终将问题追溯到清单权限。

如果android.permission.ACCESS_NETWORK_STATE未启用,deviceready则不会触发,并且device.uuid不可用。

于 2013-02-21T05:15:05.470 回答
0

这对我有用:

第一次安装设备插件:

cordova plugin add cordova-plugin-device

在我的 index.js 我有这个:

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);
    });
});
于 2016-07-01T09:31:33.523 回答