关于Cordova&IonicNative插件开发遇到的一些坑
2020-03-16
2 min read
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]);
};