编辑:通过从头开始一个新项目,一个接一个地添加所有依赖项,然后复制源代码,解决了该问题
我实际上是想在Ionic 4应用程序中使用Firebase推送通知。 可悲的是,当我的应用程序在后台运行时,似乎出现了问题。 实际上,单击通知不会打开应用程序。
我尝试了很多方法,无论是教程还是官方的。 Firebase插件或@ ionic-native / push。 当应用处于前台状态时,我设法使通知起作用。很好但是正如我所说,当应用程序处于后台状态(未关闭)时,无法通过单击通知来启动该应用程序。
让我感到烦恼的是,onNotificationOpen()的.subscribe()方法中包含的代码无法执行,但是由于某些原因,我的android studio控制台会显示一些内容:
这是我在后台收到(而不是单击)通知时的意思:(我显然替换了日期和应用名称)
TIMESTAMP 10795-11987 / APPNAME W / FirebaseMessaging:该应用尚未创建在AndroidManifest.xml中设置的通知频道。将使用默认值。
TIMESTAMP 10795-11987 / APPNAME W / FirebaseMessaging:找不到图标资源fcm_push_icon。通知将使用默认图标。
如果我确实在AndroidManifest.xml中设置了默认值,则似乎将其替换为和其他值。
这是我的代码: 我有这个服务,在某个地方(教程或stackoverflow,无法回忆),非常简单:
import { Injectable } from '@angular/core';
import { Firebase } from '@ionic-native/firebase/ngx';
import { AngularFirestore } from 'angularfire2/firestore';
import { Platform } from '@ionic/angular';
import { Router } from '@angular/router';
import { Observable } from 'rxjs';
@Injectable({
providedIn: 'root'
})
export class FcmService {
constructor(private firebase: Firebase,
private afs: AngularFirestore,
private platform: Platform,
private router: Router) { }
getToken = async () => {
let token;
if (this.platform.is('android')) {
token = await this.firebase.getToken();
}
if (this.platform.is('ios')) {
token = await this.firebase.getToken();
await this.firebase.grantPermission();
}
this.saveToken(token);
}
subscribe = (str: string) => this.firebase.subscribe(`topic_string_${str}`);
unsubscribe = (str: string) => this.firebase.unsubscribe(`topic_string_${str}`);
private saveToken = (token) => {
if (!token) {
return;
}
const devicesRef = this.afs.collection('devices');
const data = {
token,
userId: 'testUserId'
};
return devicesRef.doc(token).set(data);
}
onNotifications = (): Observable<any> => this.firebase.onNotificationOpen();
}
还有我的app.component.ts(请注意,起初它不是在那儿处理的,但是为了更快地进行测试,我在这里放了这个简单的代码)。
this.fcm是上述服务的实例。 当应用程序在前台时,else语句正确执行。 另外,请注意,目前我不使用saveToken方法,但这不应该成为问题。
this.fcm.getToken();
this.fcm.onNotifications().subscribe(x => {
if (x.tap) {
console.log(`Notification background`, x);
} else {
console.log(`Notification foreground`, x);
}
});
最后但并非最不重要。我有一个奇怪的错误,当我搜索修复程序时会看到很多错误。 cordova-plugin-fcm-with-dependecy-updated插件将自动使我的构建失败,并出现以下错误:
出了什么问题: 评估脚本时发生问题。 无法应用插件[类'com.google.gms.googleservices.GoogleServicesPlugin'] 对于输入字符串:“ +”
这对于Android是错误的。 我尝试过多种方式修复版本,但始终以失败告终,不得不删除并重新添加android平台以清理混乱。
phonegap-push btw出现相同的错误。
非常感谢!希望我的解释很清楚。