关于Cordova&IonicNative插件开发遇到的一些坑

1. 在ionic-native下编译生成的类型声明包中的js文件内会对cordova进行重复引用:

解决方法:删除多余引入的cordova模块

2. 在类型声明文件index.d.ts中为调用Native层功能的方法的返回结果指定为Observable不生效:

index.d.ts文件内部方法声明:

  /**
   * 开启对条码扫描结果的接收
   */
  @cordova()
  openScanReceiver(): Observable<any> {
    return;
  }

解决方法:

给以上截图中的两个index.js补充 {"observable": true }

2. PluginResult.Status.OK 设置插件结果返回的状态明明是OK最后回调却是error

       PluginResult pr = new PluginResult(PluginResult.Status.OK, barcode);
       pr.setKeepCallback(true);
       barCodeCallbackContext.sendPluginResult(pr);

这个坑踩了一个上午!一个低级错误,注意检查插件的调用和插件中方法签名的声明是否一致!比如这里就漏掉了一个参数。

3. 如果需要为Cordova插件写一个IonicNative包装时,需要注意将传递的参数写在最前面。

// 🙆🏻‍♂️正确
exports.startService = function (interval, success, error) {
    exec(success, error, 'BackgroundTask', 'startService', [interval]);
};
// 🙅🏻‍♂️错误,Android原生将无法获取传递的参数
exports.startService = function (success, error,interval) {
    exec(success, error, 'BackgroundTask', 'startService', [interval]);
};