Откройте страницу после нажатия на уведомление, используя облачные сообщения ionic и firebase

Добрый вечер. Я пытаюсь обработать щелчок уведомления таким образом, чтобы, когда пользователь нажимал уведомление, открывалась определенная страница моего приложения. Я использую FIREBASE COULD MESSAGING AND IONIC 3

Вот код файла app.component.ts, в котором написан код для обработки уведомлений:

import { Platform, Nav, ToastController } from 'ionic-angular';

import { HomePage } from '../pages/home/home';

import { Component, ViewChild } from '@angular/core';

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

import { Signup } from '../pages/signup/signup';

   @Component({
      templateUrl: 'app.html',
      selector: 'Myappname',
   })
   export class MyApp {

        @ViewChild(Nav) nv: Nav;

        rootPage: any = HomePage;

        constructor(public fcm: FCM, platform: Platform) {

          platform.ready().then(() => {

                  fcm.onNotification().subscribe(data => {

                         if (data.wasTapped) {

                              this.nv.push(Signup);

                         } else {

                           console.log("Received in foreground");

                         }
                 })
         });
    }
 }         

Когда уведомление получено на мобильном устройстве, если пользователь нажимает на него, отображается только домашняя страница, и он не перенаправляется на страницу регистрации, как указано в коде.

Любая помощь? Спасибо.


person the smart life    schedule 02.02.2018    source источник
comment
привет @THE HOLLY SPIRIT У меня также есть образец, вы можете найти какое-либо решение для этого, в моем случае прослушиваемые данные всегда показывают ложное решение   -  person jose    schedule 28.03.2018
comment
Привет @jose, убедитесь, что в вашем объекте полезной нагрузки для свойства clickAction установлено значение FCM_PLUGIN_ACTIVITY.   -  person the smart life    schedule 29.03.2018


Ответы (2)


Я наконец нашел решение. поскольку я использовал облачные функции Firebase для отправки уведомления, вот код, который я использовал, чтобы заставить onNotification() работать, когда пользователь нажимает на полученное уведомление.

exports.Hello = functions.database.ref('/users/{userId}').onCreate(event=>{

         admin.messaging().sendToTopic('all', {
              data:{
                 "key1": value1,
                 "key2": value2
              },
              notification: {
                  clickAction : "FCM_PLUGIN_ACTIVITY",
                  sound : "default",
                  title : "Notification title",
                  body : "message content"
              }
         });

});

Поэтому мы должны установить для свойства clickAction объекта notification значение FCM_PLUGIN_ACTIVITY, чтобы метод onNotification() выполнялся, когда пользователь нажал на уведомление.

Вот пример кода для app.component.ts, в котором реализован метод onNotification().

  import { Platform, Nav, ToastController } from 'ionic-angular';

  import { HomePage } from '../pages/home/home';

  import { Component, ViewChild } from '@angular/core';

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

  import { Signup } from '../pages/signup/signup';

  @Component({
        templateUrl: 'app.html',
        selector: 'Myappname',
  })
  export class MyApp {

    @ViewChild(Nav) nv: Nav;

    rootPage: any = HomePage;

    constructor(public fcm: FCM, platform: Platform) {

      platform.ready().then(() => {

              fcm.onNotification().subscribe(data => {

                     if (data.wasTapped) {

                          this.nv.push(Signup);

                     } else {

                       console.log("Received in foreground");

                     }
             })
           });
      }
  }         

И теперь он работает нормально!

person the smart life    schedule 03.02.2018

Попробуйте установить корневую страницу в качестве страницы регистрации, надеюсь, это сработает:

this.nv.setRoot(Signup);

и если это не сработает, попробуйте добавить это перед вашим fcm.onNotification()

var $this = this;

а затем используйте $this для ссылки внутри вашего оператора if // (wasTapped)

$this.nv.setRoot(Signup);
person Mahesh Jadhav    schedule 02.02.2018
comment
Привет @Махеш. я попробовал два варианта, но это не работает. - person the smart life; 02.02.2018
comment
Можете ли вы просто удалить это назначение rootPage = homepage, а затем проверить, работает ли это, когда вы получаете уведомление - person Mahesh Jadhav; 02.02.2018
comment
Можете ли вы попробовать это последнее, попробуйте установить rootPage как signupPage внутри, нажав this.rootPage = signup, и внутри конструктора установите rootPage = homepage и проверьте, куда вы перенаправляетесь после получения домашней страницы уведомления или signupPage - person Mahesh Jadhav; 03.02.2018
comment
Если это домашняя страница без ошибок, я предложу одно решение - person Mahesh Jadhav; 03.02.2018
comment
Привет @махеш. Я нашел решение. пожалуйста, смотрите ответ. И большое спасибо за вашу помощь. - person the smart life; 03.02.2018
comment
О да, я думал, что вы можете войти внутрь wasTapped, вы должны были сообщить, что вы не можете войти только в метод уведомления .. в любом случае рад, что это сработало - person Mahesh Jadhav; 03.02.2018
comment
ПРИВЕТ @махеш. на самом деле, когда пользователь нажимает на уведомление, пользователь больше не перенаправляется на страницу регистрации. - person the smart life; 11.02.2018
comment
Ваш код работает или у вас все еще есть проблемы? - person Mahesh Jadhav; 12.02.2018
comment
какое решение этой проблемы, подскажите - person user2828442; 22.05.2018