所有
我决定尝试使用离子和phonegap构建。一切顺利,直到我尝试使用插件。一旦我尝试调用插件,我就会
插件'设备'没找到,或者不是CDVPlugin
在weinre控制台中,我得到了
5秒后,deviceready尚未解雇。频道未被解雇: onCordovaInfoReady
我可以在Phonegap Build上看到插件被识别,如果我下载ipa文件并展开内容,我可以看到一切都在那里。我怀疑这是一个离子问题,因为我正在与Phonegap的Ismael合作(超级敏感且乐于助人,BTW)。他给我发了一个phonegap样本,根据他的配置设置和代码,我运行相同但仍有问题。如果有人能帮助我,我会非常感激。
我做了什么
环境
config.xml中
<?xml version='1.0' encoding='utf-8'?>
<widget id="com.xxxx.xxxx" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0" xmlns:gap="http://phonegap.com/ns/1.0">
<name>xxxxxxxx</name>
<description>
xxxx
</description>
<author email="xxxx@gmail.com">
xxxx
</author>
<content src="index.html" />
<access origin="*" />
<preference name="phonegap-version" value="3.3.0" />
<preference name="fullscreen" value="true" />
<preference name="webviewbounce" value="false" />
<preference name="UIWebViewBounce" value="false" />
<preference name="DisallowOverscroll" value="true" />
<gap:plugin name="org.apache.cordova.device" />
<gap:plugin name="org.apache.cordova.media" />
<gap:plugin name="org.apache.cordova.media-capture" />
<gap:plugin name="org.apache.cordova.file" />
</widget>
的index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width">
<title>Ionic Seed App</title>
<!-- ionic css -->
<link href="lib/css/ionic.css" rel="stylesheet">
<!-- your app's css -->
<link href="css/app.css" rel="stylesheet">
<!-- ionic/angularjs scripts -->
<script src="lib/js/ionic.bundle.js"></script>
<script src="lib/js/moment.min.js"></script>
<!-- cordova script (this will be a 404 during development) -->
<script src="cordova.js"></script>
<!-- your app's script -->
<script src="js/app.js"></script>
<script src="js/services.js"></script>
<script src="js/controllers.js"></script>
</head>
<body ng-app="xxxx" animation="slide-left-right-ios7">
<!--
The nav bar that will be updated as we navigate between views
Additional attributes set its look, ion-nav-bar animation and icons
Icons provided by Ionicons: http://ionicons.com/
-->
<ion-nav-bar type="bar-positive"
animation="nav-title-slide-ios7"
back-button-type="button-icon button-clear"
back-button-icon="ion-ios7-arrow-back"></ion-nav-bar>
<!--
The views will be rendered in the <ion-nav-view> directive below
Templates are in the /templates folder (but you could also
have templates inline in this html file if you'd like).
-->
<ion-nav-view></ion-nav-view>
</body>
</html>
app.js
var app = angular.module('xxxx', ['ionic', 'xxxx.services', 'xxxx.controllers']);
app.value('globals', {
'ACSKey': 'xyz',
'session_id': '',
'logged_in_userId': ''
});
app.config(function($stateProvider, $urlRouterProvider) {
// Ionic uses AngularUI Router which uses the concept of states
// Learn more here: https://github.com/angular-ui/ui-router
// Set up the various states which the app can be in.
// Each state's controller can be found in controllers.js
$stateProvider
.state('login', {
url: "/login",
templateUrl: "templates/login.html",
controller: 'LoginCtrl'
})
.state('register', {
url: "/register",
templateUrl: "templates/register.html",
controller: 'RegisterCtrl'
})
// setup an abstract state for the tabs directive
.state('tab', {
url: "/tab",
abstract: true,
templateUrl: "templates/tabs.html"
})
.state('main', {
url: "/main",
templateUrl: "templates/main.html",
controller: "MainCtrl"
})
.state('premise', {
url: "/premise",
templateUrl: "templates/premise.html",
controller: "PremiseOfTheDayCtrl"
})
.state('friends', {
url: "/friends",
templateUrl: "templates/friends.html",
controller: "FriendsCtrl"
})
.state('tab.about', {
url: '/about',
views: {
'about-tab': {
templateUrl: 'templates/about.html'
}
}
});
// if none of the above states are matched, use this as the fallback
$urlRouterProvider.otherwise('/login');
});
app.run(function($rootScope, $location, $ionicPlatform) {
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
alert('deviceready');
}
// $ionicPlatform.ready(function() {
// // Initialize plugin here
// console.log('ionicPlatform.ready');
// });
var _session_id = window.localStorage.getItem("_session_id");
var logged_in_userId = window.localStorage.getItem("logged_in_userId");
if (_session_id === null || _session_id === '') {
// no logged user, we should be going to #login
if (next.templateUrl === "templates/login.html") {
// already going to #login, no redirect needed
} else {
// not going to #login, we should redirect now
$location.path("/login");
}
} else {
$location.path("/main");
}
});
答案 0 :(得分:0)
我花了相当多的时间在Phonegap Build上测试插件,发现这些插件适用于Phonegap 2.9,但是在Phonegap Build上打破版本3.1和3.3。
没有解决方法,我已经在iOS和Android本地构建。
即使在本地构建,Phonegap平台也存在一些插件问题,这个脚本在iOS上为我修复了这个问题:
#!/bin/bash
echo "Killing xcode..."
killall Xcode
rm -rf platforms/ios
rm plugins/ios.json
cordova platform add ios
cordova build ios
node .cordova/hooks/after_build/copy_icons_screens.js
## Above isn't being caught by the hook during iOS for some reason. Hook is caught by Android build
open platforms/ios/*.xcodeproj
在Android方面,一定要清理CordovaLib项目然后清理你的AppName项目 - 顺序很重要。
此处的复制图标和安装插件挂钩也是关键:
http://devgirl.org/2013/11/12/three-hooks-your-cordovaphonegap-project-needs/
答案 1 :(得分:0)
显然等了几个星期再试一次,让Phonegap Build赶上了。当我再次尝试时,插件被识别并显示了我的录音对话框......