Уведомление Firebase Push не запускает приложение Ionic - PullRequest
0 голосов
/ 15 мая 2019

РЕДАКТИРОВАТЬ: Решил проблему, запустив новый проект с нуля, добавив все зависимости один за другим, а затем скопировав источники

Я пытаюсь использовать push-уведомление Firebase с приложением Ionic 4. К сожалению, кажется, что есть проблема, когда мое приложение находится в фоновом режиме. Фактически нажатие на уведомление не откроет приложение.

Я пробовал много способов, учебных пособий, официальных или нет. Плагин Firebase или @ ionic-native / push. Мне удалось заставить работать уведомления, когда приложение находится на переднем плане. Что приятно. Но, как я уже сказал, невозможно запустить приложение, щелкнув уведомление, когда приложение находится в фоновом режиме (не закрыто).

Что меня беспокоит, так это то, что код, содержащийся в методе .subscribe () метода onNotificationOpen (), не будет выполняться, но по какой-то причине моя консоль Android Studio будет отображать что-то:

Вот что говорится, когда я получаю (но не нажимаю) уведомление в фоновом режиме: (очевидно, я заменил дату и название приложения)

TIMESTAMP 10795-11987 / APPNAME W / FirebaseMessaging: Канал уведомлений, установленный в AndroidManifest.xml, не был создан приложением. Будет использовано значение по умолчанию.

TIMESTAMP 10795-11987 / APPNAME W / FirebaseMessaging: ресурс значка fcm_push_icon не найден. В уведомлении будет использоваться значок по умолчанию.

Если я установлю значение по умолчанию в AndroidManifest.xml, оно, похоже, заменит его на и другое значение.

Вот мой код: У меня есть этот сервис, найденный где-то (учебник или стекопоток, не могу вспомнить), довольно просто:

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.

Большое спасибо! Надеюсь, я был ясен в своих объяснениях.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...