如何在离子框架中获取设备 UUID

Posted

技术标签:

【中文标题】如何在离子框架中获取设备 UUID【英文标题】:How to get the device UUID in ionic framework 【发布时间】:2015-02-12 12:45:54 【问题描述】:

通过以下方式安装了cordova设备插件:

sudo cordova plugin add org.apache.cordova.device

然后下载 ngCordova 并将 ng-cordova.min.js 包含在 js 文件夹中,也包含在 index.html

接下来我做了如下注入ngCordova

angular.module('starter', ['ionic', 'starter.controllers','ngCordova'])

然后按如下方式包含在控制器中

angular.module('starter.controllers', [])

.controller('AppCtrl', function($scope, $ionicModal, $timeout, $ionicPlatform,$cordovaDevice)
but still getting the following errors

ReferenceError: device is not defined
at Object.getUUID (http://localhost:8100/js/ng-cordova.min.js:1:14929)
at new <anonymous> (http://localhost:8100/js/controllers.js:27:26)
at invoke (http://localhost:8100/lib/ionic/js/ionic.bundle.js:11591:17)
at Object.instantiate (http://localhost:8100/lib/ionic/js/ionic.bundle.js:11602:23)
at http://localhost:8100/lib/ionic/js/ionic.bundle.js:14906:28
at updateView (http://localhost:8100/lib/ionic/js/ionic.bundle.js:42986:30)
at eventHook (http://localhost:8100/lib/ionic/js/ionic.bundle.js:42933:17)
at Scope.$broadcast (http://localhost:8100/lib/ionic/js/ionic.bundle.js:20605:28)
at $state.transition.resolved.then.$state.transition (http://localhost:8100/lib/ionic/js/ionic.bundle.js:34122:22)
at wrappedCallback (http://localhost:8100/lib/ionic/js/ionic.bundle.js:19197:81)

你现在能告诉我出了什么问题吗?

如果有其他方法可以读取设备 UUID,请告诉我它的方向。

【问题讨论】:

【参考方案1】:

使用ngCordova and cordova Device plugin:

cordova 插件添加 org.apache.cordova.device

module.controller('MyCtrl', function($scope, $cordovaDevice) 
  var uuid = $cordovaDevice.getUUID();
);

【讨论】:

【参考方案2】:

哇通过这个问题发现了我做错了什么。 http://forum.ionicframework.com/t/problem-to-use-ngcordova-device-is-not-defined/11979

当我们在具有除cordova 支持之外的其他平台的其他设备上进行测试时,会发生这种情况。 这对我来说是一个有用的发现。

【讨论】:

【参考方案3】:

如果您使用“> ionic serve”,则设备将“未定义”。在模拟器或物理设备中尝试。

【讨论】:

好点 - 因为这对很多人(包括我自己)来说可能不是很明显【参考方案4】:

http://forum.ionicframework.com/t/ionic-cordova-device-uuid/13652

您只能在 ionic.Platform.ready() 回调函数中访问 c​​ordova 插件:

angular.module('starter.controllers', [])

.controller('DashCtrl', function ($scope, $state, $cordovaDevice) 

var init = function () 
  console.log("initializing device");
  try 

    $scope.uuid = $cordovaDevice.getUUID();

  
  catch (err) 
    console.log("Error " + err.message);
    alert("error " + err.$$failure.message);
  

;

ionic.Platform.ready(function()
  init();
);

)

这是因为 Cordova 插件比 Web 应用程序需要更多时间来加载。 ionic.Platform.ready() 回调在 Cordova 完全加载后立即触发,如果已经加载则立即触发。

【讨论】:

【参考方案5】:

是的,还有另一种方法。 您只是不需要 ngCordova

当您添加插件cordova plugin add org.apache.cordova.device 时,它会加载到您的应用程序中,因此您想要的信息位于window.device

如果您想在代码中的任何位置获取设备 uuid,您只需调用 window.device.uuid

如果您想在应用启动后立即使用,请使用:

ionic.Platform.ready(function()
  console.log( window.device.uuid );
);

【讨论】:

【参考方案6】:

今天已经为此苦苦挣扎了几个小时,请使用以下命令安装 cordova 设备插件:

cordova plugin add cordova-plugin-device

确保您还在 config.xml 中引用了该插件:

&lt;plugin name="cordova-plugin-device" source="npm" spec="~1.1.1" /&gt;

【讨论】:

【参考方案7】:

您可以在 platform.ready 函数中使用 ionic.Platform.device()

$ionicPlatform.ready(function 
  console.log(ionic.Platform.device());// returns an object containing device uuid,version, platform, manufacturer ...
);

希望这对某人有所帮助:)。 问候。

【讨论】:

【参考方案8】:

在 v2 中,它的工作方式如下:

import  Device  from 'ionic-native';
console.log('Device UUID is: ' + Device.uuid);

参考:http://ionicframework.com/docs/v2/native/device/

【讨论】:

【参考方案9】:

安装:

@ionic-native/核心 @ionic-native/设备

enter link description here

ionic cordova plugin add cordova-plugin-device
npm install --save @ionic-native/device

将此插件添加到您应用的模块中

 // app.module.ts
import  Device  from '@ionic-native/device';

...

@NgModule(
  ...

  providers: [
    ...
    Device
    ...
  ]
  ...
)
export class AppModule  

用法

import  Device  from '@ionic-native/device';

constructor(private device: Device)  

...

console.log('Device Model is: ' + this.device.model+
  '\n Device UUID is: ' + this.device.uuid+
  '\n Device serial is: ' + this.device.serial+
  '\n Device platform is: ' + this.device.platform+
  '\n Device version is: ' + this.device.version+
  '\n Device manufacturer is: ' + this.device.manufacturer);

如果不运行更改 "import Device from '@ionic-native/device';""import Device from '@ionic-native/device/ngx';"

"this.device.uuid" 代表“调查”

使用这些命令在浏览器中运行

    ionic build

    ionic cordova platform add browser

    cordova run browser

并且有效!在这些版本中

在浏览器中

在真实设备中

【讨论】:

以上是关于如何在离子框架中获取设备 UUID的主要内容,如果未能解决你的问题,请参考以下文章

获取设备 uuid 离子 ios 应用程序

如何在离子框架中动态隐藏/显示导航栏?

如何获取离子框架的版本?

如何在 iOS 7 中使用 iBeacons 获取设备详细信息,如 UUID 或设备名称

如何使用离子框架在选择选项中获取带有图像和名称的下拉菜单? [关闭]

如何使用反应在离子框架中调用api?