集成cordova-plugin-fcm的Ionic Android应用安装运行遇错误求助
嘿,我之前也遇到过一模一样的问题!结合你给出的版本信息,这个错误大概率是旧版cordova-plugin-fcm和你的Cordova/Android版本不兼容导致的——尤其是cordova-android 7.0.0和这款老插件的适配冲突。下面是几个亲测有效的解决办法:
卸载旧插件,改用兼容的维护版FCM插件
旧版cordova-plugin-fcm已经停止维护,对高版本Cordova的支持很差。推荐替换为活跃维护的fork版本:- 先卸载现有插件:
cordova plugin remove cordova-plugin-fcm - 安装兼容版本:
cordova plugin add cordova-plugin-fcm-with-dependecy-updated
这个版本修复了大量和Cordova 8.x、cordova-android 7.x的兼容问题,包括你碰到的
TypeError: Invalid data, chunk must be a string or buffer, not object错误。- 先卸载现有插件:
升级Node.js版本
错误里提到的UnhandledPromiseRejectionWarning和旧版Node.js对Promise的处理机制有关。建议升级到Node.js 12.x LTS版本(别太新,避免和Ionic 3.19.0不兼容),升级后重新安装项目依赖:rm -rf node_modules package-lock.json npm install清理Cordova缓存与构建文件
缓存文件损坏也可能导致这类奇怪的错误,执行以下步骤彻底清理:ionic cordova platform remove android ionic cordova platform add android@7.0.0 rm -rf node_modules package-lock.json npm install清理完成后再重新安装插件并运行应用。
临时修复Promise拒绝问题(不推荐长期使用)
如果你暂时不想替换插件,可以添加一个全局的Promise拒绝处理器来避免进程崩溃:
在项目根目录创建hooks/before_platform_add/00_init_promise.js文件(没有对应文件夹就手动创建),写入以下内容:process.on('unhandledRejection', (reason, promise) => { console.log('Unhandled Rejection at:', promise, 'reason:', reason); });不过这只是治标不治本,还是建议替换为兼容的插件版本。
错误原因说明
旧版cordova-plugin-fcm没有正确处理异步操作的Promise返回值,而Cordova 8.0.0和cordova-android 7.0.0采用了更严格的Promise处理机制,当插件返回不符合要求的Promise数据时,就会抛出这个类型错误。虽然插件能出现在列表中,但运行时可能存在潜在的功能异常。
内容的提问来源于stack exchange,提问作者FranSto

