Firebase推送通知将不会启动Ionic应用程序

时间:2019-05-15 16:23:46

标签: firebase cordova ionic-framework firebase-cloud-messaging ionic4

编辑:通过从头开始一个新项目,一个接一个地添加所有依赖项,然后复制源代码,解决了该问题

我实际上是想在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出现相同的错误。

非常感谢!希望我的解释很清楚。

0 个答案:

没有答案