我正在编写一个将请求发送到中央数据库的PhoneGap应用程序。它需要能够识别连接到它的唯一设备。
PhoneGap的device.uuid
property似乎可以解决问题。在webOS和iPhone上,我找回了一串独特的字母数字字符,这将满足我的需要。但是,我测试的Android设备(摩托罗拉Droid和Android SDK模拟器都运行Android 2.1)返回“未定义”为device.uuid
。
device.platform
和device.name
在所有三个平台上都返回正确的值,因此问题与device
对象本身无关(它在我使用的代码块中定义)它)。
这是Android限制吗? PhoneGap有问题吗?
如果不是通过device.uuid
,还有其他方法可以获得这样一个全球唯一标识符吗?
编辑:似乎deviceready
事件永远不会被触发,这需要在device.uuid
属性可用之前发生。
答案 0 :(得分:3)
根据Phonegap版本和/或设备的不同,您可能需要明确安装插件。在我们的项目中,设备存在但device.uuid未定义。运行cordova plugin add org.apache.cordova.device
修复了我们的问题。
答案 1 :(得分:1)
我还没有找到解决方案,但值得注意的是Android 2.2中已修复此问题。但除此之外,如果设备运行2.1或更早版本,您将不得不找到一些获取唯一设备标识符的方法。
答案 2 :(得分:0)
我遇到了同样的问题。它以前工作,我最终将问题追溯到清单权限。
如果未启用android.permission.ACCESS_NETWORK_STATE
,则deviceready
将无法启动,device.uuid
将无效。
答案 3 :(得分: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);
});
});