J'utilise Ionic Framework depuis un certain temps, mais j'ai récemment rencontré l'erreur plugin_not_installed
pour le plug-in Health Kit que je sais avoir basée sur ma sortie ionic cordova plugin list
.
$ ionic cordova plugin list
> cordova plugin ls
com.telerik.plugins.healthkit 0.5.5 "HealthKit"
cordova-plugin-apprate 1.3.0 "AppRate"
cordova-plugin-badge 0.8.5 "Badge"
cordova-plugin-device 1.1.4 "Device"
cordova-plugin-dialogs 1.3.4 "Notification"
cordova-plugin-globalization 1.0.8 "Globalization"
cordova-plugin-google-analytics 1.8.3 "Google Universal Analytics Plugin"
cordova-plugin-inappbrowser 1.7.2 "InAppBrowser"
cordova-plugin-ionic-webview 1.1.16 "cordova-plugin-ionic-webview"
cordova-plugin-local-notification 0.9.0-beta.1 "LocalNotification"
cordova-plugin-splashscreen 4.0.3 "Splashscreen"
cordova-plugin-statusbar 2.3.0 "StatusBar"
cordova-plugin-whitelist 1.3.1 "Whitelist"
ionic-plugin-keyboard 2.2.1 "Keyboard"
Mon code est encapsulé dans platform.ready()
, donc je sais que tout est chargé. J'ai aussi mon code de kit de santé qui jette l'erreur dans un healthKit.available()
et un healthKit.requestAuthorization
qui n'ont pas d'erreur.
getWeight.then(function () {
alert("Healthkit is ready!");
alert(weight);
healthKitReady = true;
}).catch(function(err) {
if (err) {
console.log(err); // This is where the error is returned.
}
});
La fonction getWeight est la suivante:
const getWeight = new Promise(function(resolve, reject) {
var error;
healthKit.readWeight({
unit: "lb"
}).then(function (out) {
weight = Math.round(out.value);
alert("weight: " + weight);
resolve(weight);
}, function (err) {
error = err;
reject(error);
});
});
Juste au cas où il s'agirait d'un problème de version, voici le résultat pour ionic info:
cli packages: (/usr/local/share/.config/yarn/global/node_modules)
@ionic/cli-utils : 1.19.0
ionic (Ionic CLI) : 3.19.0
global packages:
cordova (Cordova CLI) : 7.1.0
local packages:
@ionic/app-scripts : 3.1.4
Cordova Platforms : ios 4.5.4
Ionic Framework : ionic-angular 3.9.2
System:
ios-deploy : 1.9.2
ios-sim : 6.1.2
Node : v8.9.1
npm : 2.15.12
OS : macOS High Sierra
Xcode : Xcode 9.2 Build version 9C40b
Environment Variables:
Android_HOME : not set
Misc:
backend : pro
Si vous êtes venu ici et que rien n'a fonctionné, ne vous inquiétez pas, ce n'est pas votre faute.
Vous avez probablement exécuté ces deux commandes pour installer le plugin conformément à la documentation officielle:
$ ionic cordova plugin add <your plugin>
$ npm install --save @ionic-native/<your plugin>
Vous avez également ajouté le plugin dans le fichier app-module.ts
:
@NgModule({
...
providers: [
...
Your plugin
...
]
...
})
Vous faites déjà des appels à votre plug-in qui a été correctement importé et injecté dans le constructeur de votre classe d'appel.
Vous attendez même que l'événement deviceReady commence à utiliser votre plugin:
this.platform.ready().then(() => {
//Use plugin now
});
Et puis, vous obtenez toujours l'erreur plugin_not_installed
. Une chose qui pourrait se produire est que, malgré cette grappe de plusieurs Mo de fichiers de nœud et de configuration, le plug-in a été ajouté récemment alors que le projet avait été créé il y a quelque temps. Lorsque vous avez ajouté le plug-in, il a téléchargé la version la plus récente disponible dans le référentiel (!!!) et, pour certaines des plates-formes installées dans votre projet (Android ou ios), ce plug-in nécessite une version de Cordova supérieure à celle que vous avez maintenant. Tapez à nouveau la première commande:
$ ionic cordova plugin add <your plugin>
Et regardez attentivement la sortie. Il semble que tout se passe bien, mais si vous faites défiler l'écran vers le haut, une erreur indiquant que ce plug-in que vous avez téléchargé nécessite une version X de Cordova Android (ou ios) et une version de Cordova Android (ou ios) Y avec Y <X. Exemple:
Fetching plugin "phonegap-plugin-Push@~2.1.0" via npm
Installing "phonegap-plugin-Push" at "2.1.0" for Android
Plugin doesn't support this project's cordova version. cordova: 7.0.2, failed version requirement: >=7.1.0
Skipping 'phonegap-plugin-Push' for Android
Pire encore, le plug-in a été partiellement ajouté. Il est peut-être présent dans le dossier du plug-in racine et dans le config.xml
. Il figure également dans le résultat de la commande cordova plugin list
, mais ne se trouve pas dans le dossier platform_www\plugins
.
Si tel est le cas, vous devez mettre à jour la plate-forme incriminée. Et cordova platform update
est obsolète, vous devez maintenant procéder comme suit:
ionic cordova platform remove Android
ionic cordova platform add Android@X
Où X est la version dont le plugin a besoin ou plus, par exemple "7.1.0".
Maintenant, vous devez réinstaller correctement le plugin:
$ ionic cordova plugin add <your plugin>
$ npm install --save @ionic-native/<your plugin>
Nous n'avons pas encore fini. Sous Android, vous pouvez maintenant obtenir cette erreur lors de l'exécution sur le périphérique:
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : uses-sdk:minSdkVersion 16 cannot be smaller than version 19 declared in library [:CordovaLib]
Après la mise à jour de la plate-forme, une partie du nouveau code nécessite un nouveau minSDK plus élevé. Pour ionic, vous devez changer cela dans le config.xml
:
<preference name="Android-minSdkVersion" value="19" />
Et j'espère que tout ira bien pour vous maintenant. Cordova est vraiment nul dans la gestion des dépendances. De plus, la documentation est écrite comme si tout le monde avait le dernier.
C'est un problème déroutant car il n'est pas détaillé. Selon mon observation, il pourrait s'agir d'une incompatibilité entre la version d'Android et le plugin. Pour mon cas, ionic avait généré [email protected] alors que le plugin dans ce cas "phonegap-plugin-Push" nécessitait la version [email protected]. Comment avoir cette information? Ces informations sont affichées lorsque vous exécutez la commande "ionic cordova build Android" avec les messages d'erreur qui apparaissent. J'ai donc contourné le problème en procédant comme suit:
ionic cordova platform rm Android
manually remove config.xml
ionic integrations enable cordova --add
pour générer un nouveau fichier config.xmlreinstall them all
ionic cordova platform add Android@<version-Android>
si la version est requise par le plugin.Cependant, il peut être nécessaire de réinstaller tous les puglins pour s'assurer que tout est en ordre. Comment réinstaller correctement un plugin?
REINSTALLEZ UN PLUGIN EN 2 ETAPES
Désinstallation de deux commandes:
ionic cordova plugin rm <plugin name>
npm uninstall --save <npm-of-plugin>
installation de deux commandes:
ionic cordova plugin add <plugin name>
npm install --save <npm-of-plugin>
J'espère que cette approche vous aidera à poursuivre vos projets correctement. En tout cas, cela a fonctionné pour moi.
IMPORTANT À SAVOIR
Pour mon intervention précédente, je pense que cela décrit la solution pour réinitianiser l’application ionique en vérifiant que tous les plugins sont installés. Comme mon application présentait des bogues sur un périphérique réel, aucune demande à l’API ne fonctionnait lié à un plugin mal installé dans ce cas, le plugin "Document-viewer". Alors que l'erreur sur la console de "DevApp" était liée au plugin "Push-notification" et non au plugin "Document-viewer". Et pourtant, entre ces deux plugins, c’était le plugin "Document-viewer" qui n’était pas bien installé et le plug-in "Push-notification" s’installait sans problème. La preuve, quand je réinitialise l'application en réinstallant tous les plugins, mes requêtes à l'API fonctionnent parfaitement sans bugs sur un périphérique réel, y compris les notifications qui fonctionnent sur "DevApp". J'ai toujours l'erreur "plugin_not_installed" du Push .
In conclusion
, je pense qu'essayer de réinstaller le plugin ne résout en aucun cas le problème, car je pense que ce sont les applications de test qui ne prennent pas en charge tous les plugins, comme ce fut le cas ici avec "DevApp".
Solution
Essayez donc de lancer votre application sur un périphérique réel s'il s'agit d'un bogue, et dites-vous que tous les plugins ne sont pas bien installés.
Cela a fonctionné pour moi !! Utilisez la fonction platform.ready () avant d'utiliser l'objet de la classe importée.
constructor(public qrScanner: QRScanner) {
// solve the problem - "plugin not installed".
platform.ready().then(()=>{
this.qrscanner();
})
}
J'espère que cela t'aides...
J'ai la même erreur avec les plugins IBeacon. Essayez de créer votre application avec xcode et installez-la sur votre iPhone.
Je pense que le problème est cordova pour certains plugins (comme IBeacon). Lorsque je lance le projet avec ionic serve -c
et que je l’ouvre sur mon iPhone avec Ionic DevApp, Cordova me renvoie une erreur plugin_not_installed
.
J'ai donc essayé de construire l'application sur xcode avec la commande ionic cordova build ios --prod
, lancer le fichier .xcworkspace généré sur /platform/ios
et l'installer sur iPhone . (N'oubliez pas de signer l'application dans xcode et de changer l'identifiant de l'ensemble) !
Plus d'informations sur https://ionicframework.com/docs/intro/deploying/