为什么我使用Ionic Framework插件healthkit收到错误plugin_not_installed?

aro*_*ugh 6 cordova ionic-framework healthkit ionic3 angular

我一直在使用Ionic Framework一段时间,但我最近遇到plugin_not_installed了Health Kit插件的这个错误,我知道我根据我的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"
Run Code Online (Sandbox Code Playgroud)

我的代码被包装,platform.ready()所以我知道一切都已加载.我还有我的健康工具包代码,它将错误抛入a healthKit.available()和a中healthKit.requestAuthorization,没有错误.

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.
     }
  });
Run Code Online (Sandbox Code Playgroud)

函数getWeight是这样的:

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);
    });
});
Run Code Online (Sandbox Code Playgroud)

如果这是版本问题,这是离子信息的输出:

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
Run Code Online (Sandbox Code Playgroud)

Mis*_*ith 16

如果你来到这里并没有任何效果,不要担心,这不是你的错.

根据官方文档,您可能已经执行了这两个命令来安装插件:

$ ionic cordova plugin add <your plugin>
$ npm install --save @ionic-native/<your plugin>
Run Code Online (Sandbox Code Playgroud)

您还在app-module.ts文件中添加了插件:

@NgModule({
    ...

    providers: [
        ...
        Your plugin
        ...
    ]
...
})
Run Code Online (Sandbox Code Playgroud)

您已经调用了已经正确导入并注入调用类构造函数的插件.

您甚至在等待deviceReady事件开始使用您的插件:

this.platform.ready().then(() => {
    //Use plugin now
});
Run Code Online (Sandbox Code Playgroud)

然后你仍然得到plugin_not_installed错误.可能发生的一件事是,尽管存在节点和配置文件的多MB集群,但最近在项目创建时添加了插件.当您添加的插件,它已下载的存储库(!!!)可用的最新版本和一些安装在项目中的平台(Android或iOS)这个插件需要科尔多瓦的版本比你现在有一个更大的.再次键入第一个命令:

$ ionic cordova plugin add <your plugin>
Run Code Online (Sandbox Code Playgroud)

仔细看看输出.它看起来好了但是如果你向上滚动你可能会发现一个错误,说你已经下载的这个插件需要Cordova android(或ios)版本X,你有Cordova android(或ios)版本Y,Y <X.示例:

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
Run Code Online (Sandbox Code Playgroud)

更糟糕的是,插件已部分添加,它可能存在于根插件文件夹和config.xml,并且在cordova plugin list命令输出中列出,但它不存在于platform_www\plugins文件夹中.

如果是这种情况,您需要更新违规平台.并且cordova platform update已被弃用,因此您现在需要这样做:

ionic cordova platform remove android
ionic cordova platform add android@X
Run Code Online (Sandbox Code Playgroud)

其中X是插件需要或更大的版本,例如"7.1.0".

现在您需要再次正确安装插件:

$ ionic cordova plugin add <your plugin>
$ npm install --save @ionic-native/<your plugin>
Run Code Online (Sandbox Code Playgroud)

我们还没有完成.在Android中,您现在可能在设备上运行时遇到此错误:

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]
Run Code Online (Sandbox Code Playgroud)

更新平台后,一些新代码需要更高的新minSDK.对于离子,您需要在以下内容中进行更改config.xml:

<preference name="android-minSdkVersion" value="19" />
Run Code Online (Sandbox Code Playgroud)

希望你现在好起来的.科尔多瓦真的很依赖依赖管理.此外,文档的编写好像每个人都拥有最新的一切.

  • 作为一名原生 Android 和 iOS 开发者,我立刻就知道多平台传播者承诺的轻松无缝的旅程是在撒谎。 (4认同)

小智 10

这对我有用!!在使用导入类的对象之前使用 platform.ready() 函数。

constructor(public qrScanner: QRScanner) {

                // solve the problem - "plugin not installed".
                platform.ready().then(()=>{
                  this.qrscanner();
                })

}
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助...


小智 1

我的 IBeacon 插件也有同样的错误。尝试使用 xcode 构建您的应用程序并将其安装在您的 iPhone 上。

我认为问题出在一些插件的cordova上(比如IBeacon)。当我使用 Ionic DevApp 运行该项目并ionic serve -c在 iPhone 上打开它时,cordova 返回一个错误plugin_not_installed

所以我尝试使用以下命令在 xcode 上构建应用程序ionic cordova build ios --prod,启动生成的 .xcworkspace 文件/platform/ios并将其安装在 iPhone 上。(记得在 xcode 中对应用程序进行签名并更改捆绑包标识符)!

更多信息请访问https://ionicframework.com/docs/intro/deploying/