如何在 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)
},
现在,当您打开已关闭的应用程序时,您将收到数据。
我正在处理 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)
},
现在,当您打开已关闭的应用程序时,您将收到数据。