Уведомления IOS, когда приложение находится на переднем плане

Я использую cordova-plugin-fcm для push-уведомлений в случае закрытия фона и приложения. В случае приложения на переднем плане я планирую локальное уведомление с помощью плагина. Это мой код:

            FCMPlugin.onNotification((msg) => {
            this.notificationMsg = msg;
            if (msg.wasTapped) {
             // code for app background and app killed
            }
            else {
                LocalNotifications.schedule({
                        id: 1,
                        title: 'title',
                        text: 'text',
                    })
           }
        })

Но никакие локальные уведомления не появляются на переднем плане. Но как только я сворачиваю приложение, оно приходит. В чем проблема? Что-то делать с версией плагина? Пожалуйста помоги.


person Saksham Gupta    schedule 05.01.2018    source источник
comment
Тоже сталкиваюсь с такой же проблемой..   -  person Kanak Sony    schedule 05.01.2018
comment
любые обновления? Я использую версию Local Notifcation 0.9.0.beta.3 и не могу получить локальное уведомление на переднем плане и свернуть приложение. Но v0.8.5, получайте локальное уведомление, пока сворачиваете приложение не на переднем плане. Любая помощь?   -  person Finder    schedule 07.12.2018
comment
Удалось ли вам найти какое-либо решение этой проблемы? У меня такая же проблема.   -  person rout0802    schedule 25.04.2019


Ответы (3)


NotificationEventAdditionalData.foreground возвращает логическое значение, которое равно true, если приложение находится на переднем плане, и false в противном случае.

Этот пример работает со мной отлично

import { Component } from '@angular/core';
import { Platform } from 'ionic-angular';
import { StatusBar } from '@ionic-native/status-bar';
import { SplashScreen } from '@ionic-native/splash-screen';

import { TabsPage } from '../pages/tabs/tabs';

import { FCM } from '@ionic-native/fcm';

@Component({
  templateUrl: 'app.html'
})
export class MyApp {
  rootPage: any = TabsPage;
  isIOS: boolean = false;

  constructor(platform: Platform, statusBar: StatusBar, splashScreen: SplashScreen, private fcm: FCM) {
    platform.ready().then(() => {
      // Okay, so the platform is ready and our plugins are available.
      // Here you can do any higher level native things you might need.
      this.isIOS = platform.is('ios');

      if (this.isIOS) {
        // disable status bar overlay webview
        statusBar.overlaysWebView(false);
      } else {
        // let status bar overlay webview
        statusBar.overlaysWebView(true);
      }

      // set status bar to white
      statusBar.backgroundColorByHexString('#8c0f1a');

      // use light content
      statusBar.styleLightContent();

      splashScreen.hide();

    fcm.subscribeToTopic('marketing').catch(e => console.log('Error subscribing to topic', e));



        fcm.getToken().then(token => {
          // backend.registerToken(token);
          console.log(token);
        });

        fcm.onNotification().subscribe(data => {
          if (data.wasTapped) {
            console.log("Received in background");
          } else {
            console.log("Received in foreground");
          };
        });

        fcm.onTokenRefresh().subscribe(token => {
          // backend.registerToken(token);
          console.log(token);
        });
      }

  }
}
person Amr.Ayoub    schedule 05.01.2018
comment
Значит, вы также получаете уведомления, когда приложение находится на переднем плане? - person Saksham Gupta; 06.01.2018
comment
попробуйте приведенный выше пример, если он работает, примите этот ответ? - person Amr.Ayoub; 06.01.2018
comment
нет, это не работает. по-прежнему не приходят уведомления, когда приложение находится на переднем плане - person Saksham Gupta; 06.01.2018

Используйте приведенный ниже плагин локальных уведомлений Cordova, который отлично работает для меня: https://github.com/katzer/cordova-plugin-local-notifications

Плагин создает объект cordova.plugins.notification.local и становится доступным после запуска устройства.

Пример:

cordova.plugins.notification.local.schedule({
title: 'My first notification',
text: 'Thats pretty easy...',
foreground: true
});
person Nimesh khatri    schedule 22.02.2018
comment
Я использую этот плагин только вместе с cordova-plugin-fcm. Но они несовместимы. - person Saksham Gupta; 22.02.2018
comment
Вам не нужно использовать два плагина, просто удалите старый и установите этот. - person Nimesh khatri; 22.02.2018
comment
Но мне нужны уведомления в случае, если приложение убито, а также в фоновом режиме - person Saksham Gupta; 22.02.2018

Если вы хотите получать уведомления на переднем плане с помощью FCMPlugin, вы можете просто отредактировать следующий файл

https://github.com/fechanique/cordova-plugin-fcm/blob/master/src/android/MyFirebaseMessagingService.java#L53

измените следующую строку:

//sendNotification(remoteMessage.getNotification().getTitle(),remoteMessage.getNotification().getBody(), remoteMessage.getData());

to:

sendNotification(remoteMessage.getNotification().getTitle(), remoteMessage.getNotification().getBody(), data);
remove and add the platform you using and you are all set 
person Leonid Prokopenko    schedule 02.09.2018