web-dev-qa-db-fra.com

Pourquoi le message d'erreur plugin_not_install avec le plug-in Ionic Framework healthkit?

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
4
arodebaugh

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.

6
Mister Smith

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:

  1. exécuter ionic cordova platform rm Android
  2. faire manually remove config.xml
  3. lancez ionic integrations enable cordova --add pour générer un nouveau fichier config.xml
  4. do (si les plugins ne sont pas nombreux) reinstall them all
  5. lancez 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:

  1. ionic cordova plugin rm <plugin name>
  2. npm uninstall --save <npm-of-plugin>

installation de deux commandes:

  1. ionic cordova plugin add <plugin name>
  2. 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.

1
soumare

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...

0
Dismi Paul

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/

0
Gianlo