为戏剧性的标题道歉,但我对离子和本地通知有很多挫败感。 我使用使用本地通知的ionic 2构建了一个应用程序。 我已经升级到ionic3并尝试了所有方法,但无法使本地通知正常工作。
最新版本的本地通知不支持 ionic 因此我必须使用早期版本 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": Cordova错误:无法通过以下方式获取插件cordova-plugin-app-event 注册表
更新:我取得了一点进展。 我又玩了一些,决定看看我拥有的另一个使用本地通知的旧离子项目。 它使用的是特定版本的本地通知,所以我去安装了该特定版本。
npm install @ionic-native/local-notifications@3.12.1
完成此操作后,我可以运行离子构建,并且它没有失败就完成了!!好消息!。 坏消息 - 当我运行 ionic serve 时,它会启动应用程序,但出现白屏和控制台错误:我收到一个错误,上面写着
polyfills.js:3 未处理的承诺拒绝:本地通知没有提供程序! ;区:;任务:承诺;值:错误:本地通知没有提供程序!
即使我已将其添加到我的应用程序模块中的提供商列表中。
当我尝试运行安卓版本时,出现以下错误。我正式没有想法了。有什么帮助吗???
失败:生成失败,出现异常。 出了什么问题: 任务":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;
在 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
所以我可以决定升级什么
最后,我直接使用 Cordova 插件,而不使用离子原生层。结果,我能够使用本地通知的分支,到目前为止,该分支在所有设备(android 和 ios(中都运行良好。
我只是根据我的软件包添加了这个科尔多瓦插件.json
"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...