Хобрук: Ваш путь к мастерству в программировании

Push-уведомление не работает в фоновом режиме

Я использую функцию push-уведомлений плагина native firebase.

Текущее поведение:

Он отлично работает на переднем плане. Но когда приложение находится в фоновом режиме, и я пытаюсь нажать на уведомление, оно показывает undefined. Пожалуйста, посмотрите видео ниже. Я тестировал это на устройстве Android.

Ожидаемое поведение:

Когда я нажимаю на уведомление, оно должно открыть приложение и правильно отобразить сообщение.

Видео

app.component.ts

constructor(public platform: Platform)
{
    platform.ready().then(() => {
           this.onNotificationOpen();
      });
}

onNotificationOpen(): void {
        if (this.platform.is('cordova')) {
            this.firebase.onNotificationOpen()
                .subscribe(res => {
                    if (res.tap) {//background mode
                        console.log(res.body);
                        this.showAlert(res.body);
                    } else if (!res.tap) {//foreground mode
                        console.log(res.body);
                        this.showAlert(res.body);
                    }
                });
        }
    }

        showAlert(message: string): void {
        let alert = this.alertCtrl.create({
            title: 'Push Notification',
            subTitle: message,
            buttons: ['OK']
        });
        alert.present();
    }

package.json

{
  "name": "ionic-hello-world",
  "author": "Ionic Framework",
  "homepage": "http://ionicframework.com/",
  "private": true,
  "scripts": {
    "clean": "ionic-app-scripts clean",
    "build": "ionic-app-scripts build",
    "ionic:build": "ionic-app-scripts build",
    "ionic:serve": "ionic-app-scripts serve"
  },
  "dependencies": {
    "@angular/common": "4.1.0",
    "@angular/compiler": "4.1.0",
    "@angular/compiler-cli": "4.1.0",
    "@angular/core": "4.1.0",
    "@angular/forms": "4.1.0",
    "@angular/http": "4.1.0",
    "@angular/platform-browser": "4.1.0",
    "@angular/platform-browser-dynamic": "4.1.0",
    "@ionic-native/core": "3.6.1",
    "@ionic-native/device": "3.6.1",
    "@ionic-native/facebook": "^3.10.0",
    "@ionic-native/firebase": "^3.10.3",
    "@ionic-native/keyboard": "^3.10.3",
    "@ionic-native/splash-screen": "3.6.1",
    "@ionic-native/status-bar": "3.6.1",
    "@ionic/cli-plugin-cordova": "^1.2.0",
    "@ionic/cli-plugin-ionic-angular": "^1.2.0",
    "@ionic/storage": "2.0.1",
    "@ngrx/core": "^1.2.0",
    "@ngrx/store": "^2.2.1",
    "d3": "^4.7.4",
    "firebase": "^3.7.5",
    "ionic-angular": "3.2.1",
    "ionicons": "3.0.0",
    "moment": "^2.18.1",
    "pouchdb": "^6.1.2",
    "pouchdb-adapter-cordova-sqlite": "^2.0.2",
    "rxjs": "5.1.1",
    "sw-toolbox": "3.6.0",
    "zone.js": "0.8.10"
  },
  "devDependencies": {
    "@ionic/app-scripts": "1.3.7",
    "@ionic/cli-plugin-cordova": "1.2.1",
    "@ionic/cli-plugin-ionic-angular": "1.2.0",
    "typescript": "~2.2.1"
  },
  "cordovaPlugins": [
    "cordova-plugin-whitelist",
    "cordova-plugin-console",
    "cordova-plugin-statusbar",
    "cordova-plugin-device",
    "cordova-plugin-splashscreen",
    "ionic-plugin-keyboard"
  ],
  "cordovaPlatforms": [
    "ios",
    {
      "platform": "ios",
      "version": "",
      "locator": "ios"
    }
  ],
  "description": "helloWorld: An Ionic project"
}

  • Вы отправляете push-уведомление с консоли Firebase? Я не использую тот же плагин, но обратите внимание, что Firebase AFAIK не отправляет те же данные в уведомлении, когда приложение работает в фоновом режиме (поскольку заголовок и тело отображаются в самом уведомлении). Пожалуйста, взгляните на этот ответ (особенно его последняя часть) 29.05.2017
  • О.... ты молодец. Не могли бы вы поместить сюда последнюю часть, а также ссылку на репозиторий Git? Спасибо @sebaferreras 29.05.2017
  • Нп! Я добавил эти части по запросу :) 29.05.2017

Ответы:


1

Вместо этого я бы рекомендовал использовать cordova-plugin-firebase. Вы можете ознакомиться с этим репозиторием, чтобы узнать, как использовать этот плагин.

Обратите внимание, что содержание отправленного уведомления не будет одинаковым, если приложение запущено на переднем плане или если приложение закрыто, когда приходит уведомление. Для этого при отправке уведомления добавьте title и body в раздел Дополнительные параметры:

введите здесь описание изображения

29.05.2017
  • Один вопрос. Можете ли вы сказать мне, какова задача этого метода, который вы использовали в репозитории Git this.saveToken(token);? 29.05.2017
  • Просто используется, если вы хотите отправить токен пользователя на ваш сервер 29.05.2017
  • Хорошо, конечно. Спасибо :) 29.05.2017
  • stackoverflow.com/questions/ 46493420/ помогите @sebaferreras 30.09.2017
  • Новые материалы

    Понимание СТРУКТУРЫ ДАННЫХ И АЛГОРИТМА.
    Что такое структуры данных и алгоритмы? Термин «структура данных» используется для описания того, как данные хранятся, а алгоритм используется для описания того, как данные сжимаются. И данные, и..

    Как интегрировать модель машинного обучения на ios с помощью CoreMl
    С выпуском новых функций, таких как CoreML, которые упростили преобразование модели машинного обучения в модель coreML. Доступная модель машинного обучения, которую можно преобразовать в модель..

    Создание успешной организации по науке о данных
    "Рабочие часы" Создание успешной организации по науке о данных Как создать эффективную группу по анализу данных! Введение Это обзорная статья о том, как создать эффективную группу по..

    Технологии и проблемы будущей работы
    Изучение преимуществ и недостатков технологий в образовании В быстро меняющемся мире технологии являются решающим фактором в формировании будущего работы. Многие отрасли уже были..

    Игорь Минар из Google приедет на #ReactiveConf2017
    Мы рады сообщить еще одну замечательную новость: один из самых востребованных спикеров приезжает в Братиславу на ReactiveConf 2017 ! Возможно, нет двух других кланов разработчиков с более..

    Я собираюсь научить вас Python шаг за шагом
    Привет, уважаемый энтузиаст Python! 👋 Готовы погрузиться в мир Python? Сегодня я приготовил для вас кое-что интересное, что сделает ваше путешествие более приятным, чем шарик мороженого в..

    Альтернатива шаблону исходящих сообщений для архитектуры микросервисов
    Познакомьтесь с двухэтапным сообщением В этой статье предлагается альтернативный шаблон для папки Исходящие : двухэтапное сообщение. Он основан не на очереди сообщений, а на..