如何在 IONIC 中获得 FCM Intent Extras

How to get FCM Intent Extras in IONIC

我正在处理 IONIC 和 FCM 的问题。如下所示,我从 Node JS 中的服务器向 IONIC 中的应用程序发送“数据”而不是“通知”,我在控制台中看到数据已发送,但我不知道如何访问它,根据在文档中,它在 Intent extras 中,但我没有成功。我可以使用也为我服务的“通知”,但问题是只有当你点击推送通知时你才能获得数据......所以如果客户端没有点击通知并从后台将无法获取该数据...

我在 Node 中的服务器:

const options = {
        priority: "high",
        timeToLive: 60 * 60 * 24,
      };
    
      const message_notification = {
        /*
        notification: {
          title: "¡Tienes un nuevo pedido!",
          body: "Tienes 30 segundos para aceptar el pedido, de lo contrario será rechazado.",
          sound: "default",
          vibrate: 1,
          Badge: 1,
          click_action: "FCM_PLUGIN_ACTIVITY"
        },
        */
        data: {
          detalles:  JSON.stringify(nuevopedido)
        },

      };
    
      admin
        .messaging()
        .sendToDevice(primeroCola.socket_id, message_notification, options)
        .then((response) => {
          console.log("Notificación enviada", response);
          
        })
        .catch((error) => {
          console.log(error);
        });

我的离子应用:

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

            console.log(JSON.parse(data.detalles))

        });

我尝试在 Ionic 中使用 cordova intent web 插件,但我无法获得 FCM intent,只是我在 ionic 中的项目,我对 Android 了解不多。

WebIntent.getIntent().then((intent) => {
            console.log('Action' + JSON.stringify(intent.action));
            const intentExtras = intent.extras;
            if (intentExtras == null) {
                console.log("No hay extras")
            } else {
                console.log('Extras de intent: ' + JSON.stringify(intentExtras));
            }
        }, (error) => {
            console.log('Error getting launch intent', error);
        });

onMessageReceived 中的 FCMPlugin.sendPushPayload(data); 之前添加这个(文件:MyFirebaseMessagingService):

FCMPlugin.setInitialPushPayload(data);

碰巧当你在FCM中只发送“数据”而没有“通知”时,它不会对有效负载进行设置(FCMPlugin.setInitialPushPayload(data)),因为没有什么可窃听的,所以没有通知并且它无法收听“通知”事件,因为应用程序已关闭,因此当您再次打开应用程序时(当应用程序关闭时)以某种方式获取数据,然后在您的应用程序中使用 getInitialPushPayload 时进行设置,你会得到数据:

离子应用:

async created() {
        
        const payload = await this.fcm.getInitialPushPayload()
        console.log(payload)
    },

现在,当您打开已关闭的应用程序时,您将收到数据。