道歉标题,但围绕离子通知和本地通知感到沮丧。 我使用ionic 2构建了一个使用本地通知的应用程序。 我已经升级到ionic3,并已尝试了所有方法,但无法获得本地通知。
最新版本的本地通知不支持离子通知,因此我必须使用早期版本0.8.4或0.8.5。 但是尝试安装这些版本会引发错误。我已经尝试了所有事情,包括启动一个干净的ionic3项目和安装本地通知。 (例如,我尝试遵循此http://masteringionic.com/blog/2018-01-09-adding-local-notifications-to-an-ionic-framework-mobile-app/)
什么都没用。不知道我们如何在没有本地通知的情况下将Ionic用作生产框架?
有人有这个建议吗?
谢谢
更新: 最近,甚至只是尝试安装本地通知都失败了
无法安装“ de.appplant.cordova.plugin.local-notification”: CordovaError:无法通过获取插件cordova-plugin-app-event 注册表
更新: 我取得了一些进展。 我玩了更多,然后决定看看我拥有的另一个使用本地通知的较旧的离子项目。 它使用的是本地通知的特定版本,所以我去安装了该特定版本。
npm install @ionic-native/local-notifications@3.12.1
这样做之后,我可以运行ionic build并成功完成了!好消息!。 坏消息-当我运行ionic服务时,它会启动该应用程序,但出现白屏且控制台错误:我收到一条错误消息
polyfills.js:3未处理的承诺拒绝:没有LocalNotifications的提供者! ;区域:任务:Promise.then;值:错误:没有LocalNotifications的提供者!
即使我已将其添加到我的应用程序模块中的提供商列表中。
当我尝试运行android build时,出现以下错误。我正式没主意了。有帮助吗?
失败:生成失败,发生异常。 什么地方出了错: 任务':transformClassesWithDexForDebug'的执行失败。 com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexException:多个dex文件定义了Lorg / apache / cordova / BuildHelper; 建立失败 总时间:29.376秒 错误:cmd:命令失败,退出代码为1错误输出: 失败:构建失败,发生异常。 任务':transformClassesWithDexForDebug'的执行失败。 com.android.build.api.transform.TransformException:com.android.ide.common.process.ProcessException:java.util.concurrent.ExecutionException:com.android.dex.DexException:多个dex文件定义了Lorg / apache / cordova / BuildHelper;
答案 0 :(得分:1)
在Package.json中,我已升级
"@ionic-native/local-notifications": "^5.5.1"
现在正在工作。
我做了
$npm i -g npm-check-updates
$npm-check-updates -u
$npm install
但是请升级所有内容,避免出现错误。 所以我做了从package.json和package-lock.json的回滚
然后决定仅在package.json中手动更改
"@ionic-native/local-notifications": "^5.5.1"
然后做了:
$npm install
注意:
$npm-check-updates -u.
给了我这样的清单:
@angular/common ^7.2.2 → ^7.2.14
@angular/core ^7.2.2 → ^7.2.14
@angular/forms ^7.2.2 → ^7.2.14
@angular/http ^7.2.2 → ^7.2.14
@angular/platform-browser ^7.2.2 → ^7.2.14
@angular/platform-browser-dynamic ^7.2.2 → ^7.2.14
@angular/router ^7.2.2 → ^7.2.14
@angular/service-worker ^7.2.8 → ^7.2.14
@ionic-native/camera ^5.2.0 → ^5.5.1
@ionic-native/core ^5.0.0 → ^5.5.1
@ionic-native/device ^5.3.0 → ^5.5.1
@ionic-native/file ^5.2.0 → ^5.5.1
@ionic-native/file-path ^5.2.0 → ^5.5.1
@ionic-native/ionic-webview ^5.2.0 → ^5.5.1
@ionic-native/local-notifications ^5.2.0 → ^5.5.1
@ionic-native/native-audio ^5.2.0 → ^5.5.1
@ionic-native/network ^5.2.0 → ^5.5.1
@ionic-native/power-management ^5.4.0 → ^5.5.1
@ionic-native/splash-screen ^5.0.0 → ^5.5.1
@ionic-native/status-bar ^5.0.0 → ^5.5.1
@ionic/angular ^4.1.0 → ^4.3.1
cordova-android 7.1.4 → 8.0.0
cordova-android-support-gradle-release ^2.0.1 → ^3.0.0
cordova-plugin-filepath 1.5.1 → 1.5.4
cordova-plugin-ionic-webview ^3.1.2 → ^4.0.1
cordova-sqlite-storage 3.1.0 → 3.2.0
core-js ^2.5.4 → ^3.0.1
ionic-selectable ^4.4.0 → ^4.4.1
rxjs ~6.3.3 → ~6.5.1
zone.js ~0.8.29 → ~0.9.1
@angular-devkit/architect ~0.12.3 → ~0.13.8
@angular-devkit/build-angular ~0.13.0 → ~0.13.8
@angular-devkit/core ~7.2.3 → ~7.3.8
@angular-devkit/schematics ~7.2.3 → ~7.3.8
@angular/cli ~7.3.1 → ~7.3.8
@angular/compiler ~7.2.2 → ~7.2.14
@angular/compiler-cli ~7.2.2 → ~7.2.14
@angular/language-service ~7.2.2 → ~7.2.14
@ionic/angular-toolkit ~1.4.0 → ~1.5.1
@types/jasmine ~2.8.8 → ~3.3.12
@types/jasminewd2 ~2.0.3 → ~2.0.6
@types/node ~10.12.0 → ~12.0.0
codelyzer ~4.5.0 → ~5.0.1
jasmine-core ~2.99.1 → ~3.4.0
karma ~3.1.4 → ~4.1.0
karma-coverage-istanbul-reporter ~2.0.1 → ~2.0.5
karma-jasmine ~1.1.2 → ~2.0.1
karma-jasmine-html-reporter ^0.2.2 → ^1.4.2
protractor ~5.4.0 → ~5.4.2
ts-node ~8.0.0 → ~8.1.0
tslint ~5.12.0 → ~5.16.0
typescript ~3.1.6 → ~3.4.5
所以我可以决定要升级什么
答案 1 :(得分:0)
最后,我求助于直接使用Cordova插件,而不使用离子本机层。结果,我能够使用本地通知的分支,到目前为止,该通知在所有设备(Android和ios)上都运行良好。
我只是按照我的packages.json添加了此Cordova插件
“ cordova-plugin-local-notification”: “ git + https://github.com/Steffaan/cordova-plugin-local-notifications.git”,
然后我的代码看起来像这样...
import {Platform} from 'ionic-angular';
import { environment } from '../../environments/environment.prod';
declare var cordova;
@Injectable()
export class Notifications {
localNotifications: any;
constructor(public storage: Storage, public platform: Platform, public settings: Settings) {
this.localNotifications = cordova.plugins.notification.local;
}
getAllNotifications(): Promise<any[]> {
return new Promise(resolve => {
this.localNotifications.getAll(resolve);
});
}
etc...