【问题标题】:ionic cordova cordovaDevice not working properly离子科尔多瓦科尔多瓦设备无法正常工作
【发布时间】:2016-08-12 05:23:29
【问题描述】:

我正在创建一个需要引用 iOS 和 Android 设备 UUID 的 Ionic 应用程序。

据我了解,在使用这些 Cordova 插件时,设备需要先加载应用程序,然后您可以引用 cordovaDevice.getUUID()。

我在登录/注册页面上运行它,这是我的应用程序的第一页。

这是我的登录控制器的一部分:

document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
    console.log(device.cordova);
    $scope.id = $cordovaDevice.getUUID();
    return $scope.id;
}

在该代码之上我有 $scope.id = "1"; 我正在返回 $scope.id,以便将其发布到 api 端点。 当我在我的设备上加载 ios 应用程序时,我第一次运行该应用程序时它就可以工作。 id 等于设备的实际 ID。 如果我重新打开应用程序,它就不再工作了,id 保持等于 1。

【问题讨论】:

  • 把它放在 angular.run 上,就像 var myId=1; angular.run(function($cordovaDevice) {myId=$cordovaDevice.getUUID(); }
  • @AnujGupta 那么我将如何在我的控制器中使用 $scope.id ?我不需要使它成为rootscope吗?或者我可以直接在我的控制器中使用 run 吗?
  • 你安装了cordova设备插件吗?如果已安装,则只能访问 $cordovaDevice
  • 然后尝试在$cordovaDevice.getUUID(); 上包装超时可能需要一些时间来获取 UUID ?
  • @HardikVaghani 也可以!

标签: angularjs cordova ionic-framework cordova-plugins ngcordova


【解决方案1】:

因此,在进一步研究之后,我发现由于我试图在我的第一个视图中加载cordova 设备功能,因此我们最终会遇到竞争条件。

我从Raymond Camden得到这个答案

“Angular 将显示您的视图并异步触发 ionicPlatform.ready。这当然不是错误,但它提出了一个问题。如果您想使用 Cordova 插件功能,并且您的应用程序依赖于马上,你怎么轻松处理?

我所做的是向我的应用程序添加一个中间视图。一个简单的登陆页面。我修改了 stateProvider 以添加一个新状态,然后将其设为默认值。在我的 ionicPlatform.ready 中,我使用位置服务来移动到以前的默认状态。”

所以我实现了一个“正在加载”视图,该视图显示加载并在 1000 毫秒后使用 state.go 转换到我的登录页面。

【讨论】:

  • 你也可以只包装 $cordova.getUUID();在超时功能中,这也有效,谢谢@hardikvaghani
【解决方案2】:
var id=1;
angular.run(function($cordovaDevice) {
  $ionicPlatform.ready(function() {
    id= $cordovaDevice.getUUID();
}
}

现在您可以在其他控制器中的任何地方使用它,例如

.controller('AppCtrl', function($scope, $cordovaDevice) {
 console.log(id);
})

【讨论】:

  • 执行此操作时,我得到“未定义设备”和“未定义 ID”。
  • 您是否从 cordova plugin add cordova-plugin-device 安装了插件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-30
  • 2015-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多