firebase-cloud-messaging 相关问题

Firebase云消息传递(FCM)是GCM的新版本。它继承了可靠且可扩展的GCM基础架构以及新功能。它是一种跨平台解决方案,可让用户免费提供和接收消息和通知。它支持Android,iOS,桌面Web浏览器,带有JavaScript或WebPush的移动网络和物联网(IoT)设备。

进行远程服务调用时出现未知错误:远程主机终止握手

我已将 firebase-admin (Java SDK) 版本更新至 9.3.0 当我尝试发送批次 (FirebaseMessaging.sendEach) 时,出现以下错误: com.google.firebase.messaging。

回答 1 投票 0

SenderId 不匹配,PERMISSION_DENIED Firebase FCM v1

我尝试使用 FCM 发送通知,但出现错误, 我在 Firebase 中创建了一个新项目。 如何生成新的服务器密钥?如下图所示? 授权:...

回答 1 投票 0

在后台更新 FCM 令牌

我一直在努力解决与 FCM 代币相关的问题,如果有人能解释它是如何工作的,我将非常感激。 Firebase 令牌告诉通知服务器哪个...

回答 1 投票 0

当应用程序在后台时,如何使用 FCM 消息触发 onMessageReceived?

我制作了一个接收 FCM 消息的 Android 应用程序,我想要以下行为: 当应用程序完全关闭时:在系统托盘中收到通知。 当应用程序启动但处于...

回答 1 投票 0

firebase 消息传递 [错误:flutter/runtime/dart_vm_initializer.cc(41)] 未处理的异常:

大家好,我正在构建一个应用程序,我想实现 firebase 消息传递,但我无法让它工作。直到这行代码一切都很顺利 无效 getToken() 异步 { 细绳? t...

回答 1 投票 0

找不到库“GoogleSignIn”

我正在开发一个 iOS 应用程序,在添加 Firebase Cloud Messaging (FCM) 来实现推送通知之前,该应用程序运行良好。 Android端整合后仍然可以完美运行...

回答 1 投票 0

Flutter Firebase 后台通知处理程序不更新数据

我正在开发一个flutter 出租车应用程序。该应用程序依赖 Firebase 消息传递来侦听事件,例如乘客是否发送了乘车请求,因此驾驶员应该收到一个 Firebase 通知,告知驾驶员应用程序

回答 1 投票 0

推送通知:从 GCM `DeprecatedApi` 切换到 FCM `未找到请求的实体。`

自从我为所有 Android 用户从 Cloud Messaging API(旧版)迁移到 Firebase Cloud Messaging API (V1) 以来,我的行为很奇怪。 我没有更改应用程序方面的任何内容 - google-serv...

回答 1 投票 0

Firebase Cloud Functions - 由于端点已弃用,通过 FCM 发送消息不起作用

我希望你能帮助我解决这个问题。我有一个 Firebase 云功能,当在 firestore 数据库上创建文档时,它会通过 FCM 向某个主题发送消息。这是我的代码...

回答 1 投票 0

无法让 Firebase Cloud Messaging 在 Android 上的 Edge 浏览器上运行FCM测试</tit...</desc> <question vote="1"> <p>所以,我编写了一段简单的代码:</p> <p>前端:</p> <pre><code><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>FCM TEST</title> </head> <body> <p id="token" style="padding-left: 50px"></p> <script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-messaging-compat.js"></script> <script> const firebaseConfig = { apiKey: "XXXXX", authDomain: "XXXXX", projectId: "XXXXX", messagingSenderId: "XXXXX", appId: "XXXXX", }; firebase.initializeApp(firebaseConfig); const messaging = firebase.messaging(); if ("serviceWorker" in navigator) { navigator.serviceWorker .register("/firebase-messaging-sw.js") .then(function (registration) { console.log( "Registration successful, scope is:", registration.scope ); Notification.requestPermission() .then(function () { console.log("Notification Permission"); let serviceWorkerRegistration = { vapidKey: "XXXXX", }; if (registration) { console.log("included registration"); serviceWorkerRegistration = { ...serviceWorkerRegistration, ServiceWorkerRegistration: registration, }; } return messaging .getToken(serviceWorkerRegistration) .then((token) => { if (token) { console.log("Token: ", token); document.getElementById("token").innerHTML = token; } else { // Show permission request. console.log( "No Instance ID token available. Request permission to generate one." ); } }); }) .catch(function (reason) { console.error(reason); }); messaging.onMessage((payload) => { console.log( "[firebase-messaging-sw.js] Received foreground message ", payload ); // Customize notification here const notificationTitle = payload.data.title; const notificationOptions = { body: payload.data.body, // icon: "/firebase-logo.png", }; registration.showNotification( notificationTitle, notificationOptions ); }); }) .catch(function (err) { console.log("Service worker registration failed, error:", err); }); } </script> </body> </html> </code></pre> <p>我的 firebase-messaging-sw.js:</p> <pre><code>importScripts( "https://www.gstatic.com/firebasejs/10.7.0/firebase-app-compat.js" ); importScripts( "https://www.gstatic.com/firebasejs/10.7.0/firebase-messaging-compat.js" ); const firebaseConfig = { apiKey: "XXXXX", authDomain: "XXXXX", projectId: "XXXXX", messagingSenderId: "XXXXX", appId: "XXXXX", }; firebase.initializeApp(firebaseConfig); const messaging = firebase.messaging(); messaging.onBackgroundMessage((payload) => { console.log( "[firebase-messaging-sw.js] Received background message ", payload ); // Customize notification here const notificationTitle = payload.data.title; const notificationOptions = { body: payload.data.body, // icon: "/firebase-logo.png", }; self.registration.showNotification(notificationTitle, notificationOptions); }); </code></pre> <p>在后端,我制作了一个简单的 Node Express 服务器,您可以在其中从 FE 发送 FcmToken。 (确实需要复制 fcm 令牌并将其粘贴到 Postman 中)。</p> <pre><code>import { initializeApp, cert, applicationDefault } from "firebase-admin/app"; import { getMessaging } from "firebase-admin/messaging"; import express, { json } from "express"; import "dotenv/config"; import cors from "cors"; const app = express(); app.use(express.json()); app.use( cors({ origin: "*", methods: ["GET", "POST", "DELETE", "UPDATE", "PUT", "PATCH"], }) ); app.use(function (req, res, next) { res.setHeader("Content-Type", "application/json"); next(); }); initializeApp({ credential: applicationDefault(), }); app.post("/send", function (req, res) { const receivedTokens = req.body.fcmTokens; console.log("receivedToken", req.body.fcmTokens); const message = { data: { title: req.body.title, body: req.body.body, }, tokens: receivedTokens, }; getMessaging() .sendEachForMulticast(message) .then((response) => { res.status(200).json({ message: "Successfully sent message", token: receivedTokens, }); }) .catch((error) => { res.status(400); res.send(error); console.log("Error sending message:", error); }); }); app.get("/ping", function (req, res) { console.log("process env: ", process.env.GOOGLE_APPLICATION_CREDENTIALS) res.status(200).json({ message: "Successfully pinged test", file: process.env.GOOGLE_APPLICATION_CREDENTIALS, }); }); app.listen(3000, function () { console.log("Server started on port 3000"); }); </code></pre> <p>这段代码实际上适用于以下测试用例:</p> <ul> <li>Chrome Windows</li> <li>边缘窗口</li> <li>Chrome 安卓</li> <li>Chrome Mac 操作系统</li> <li>Edge Mac 操作系统</li> </ul> <p>它<strong>不</strong>工作的唯一测试用例是<strong>Android 上的Edge</strong>。我的 Android 上的 Edge 版本是 120.0.2210.64</p> <p>此外,也许值得注意的是,Android 上的 Edge 中的 onMessage 函数在其他任何地方都<strong>不</strong>被调用。</p> <p>有人知道为什么吗?或者也许有解决方案?我是不是做错了什么?</p> <p>提前致谢。</p> </question> <answer tick="false" vote="0"> <p>我也有同样的问题。 如果相同的代码在不同的浏览器上运行并且令牌正确,则您可能正在使用另一个应用程序的相同域或子域。</p> <p>示例:<br/> 如果您有一个带有 <a href="https://xxx.example.com/app1" rel="nofollow noreferrer">https://xxx.example.com/app1</a> 且带有推送通知的页面。如果您在 <a href="https://xxx.example.com/app2" rel="nofollow noreferrer">https://xxx.example.com/app2</a> 添加新应用程序,Edge 将无法管理通知(2024 年 8 月)。</p> <p>如果打开通知选项,Edge 将显示一条消息:“通知已在 app1 上设置”。我不知道为什么。也许是因为 FCM 的 Service Worker 位于根文件夹中?或者只是因为 Edge 无法在同一域或子域上拥有多个应用程序?</p> <p>要解决这个问题,必须创建多个子域:<br/> <a href="https://app1.example.com" rel="nofollow noreferrer">https://app1.example.com</a> 和 <a href="https://app2.example.com" rel="nofollow noreferrer">https://app2.example.com</a></p> <p>此时 Edge 将在您的 Android 上添加“app1”作为推送通道。</p> </answer> </body></html>

所以,我编写了一段简单的代码: 前端: FCM测试</tit...</desc> <question vote="1"> <p>所以,我编写了一段简单的代码:</p> <p>前端:</p> <pre><code><!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <title>FCM TEST</title> </head> <body> <p id="token" style="padding-left: 50px"></p> <script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-app-compat.js"></script> <script src="https://www.gstatic.com/firebasejs/10.7.0/firebase-messaging-compat.js"></script> <script> const firebaseConfig = { apiKey: "XXXXX", authDomain: "XXXXX", projectId: "XXXXX", messagingSenderId: "XXXXX", appId: "XXXXX", }; firebase.initializeApp(firebaseConfig); const messaging = firebase.messaging(); if ("serviceWorker" in navigator) { navigator.serviceWorker .register("/firebase-messaging-sw.js") .then(function (registration) { console.log( "Registration successful, scope is:", registration.scope ); Notification.requestPermission() .then(function () { console.log("Notification Permission"); let serviceWorkerRegistration = { vapidKey: "XXXXX", }; if (registration) { console.log("included registration"); serviceWorkerRegistration = { ...serviceWorkerRegistration, ServiceWorkerRegistration: registration, }; } return messaging .getToken(serviceWorkerRegistration) .then((token) => { if (token) { console.log("Token: ", token); document.getElementById("token").innerHTML = token; } else { // Show permission request. console.log( "No Instance ID token available. Request permission to generate one." ); } }); }) .catch(function (reason) { console.error(reason); }); messaging.onMessage((payload) => { console.log( "[firebase-messaging-sw.js] Received foreground message ", payload ); // Customize notification here const notificationTitle = payload.data.title; const notificationOptions = { body: payload.data.body, // icon: "/firebase-logo.png", }; registration.showNotification( notificationTitle, notificationOptions ); }); }) .catch(function (err) { console.log("Service worker registration failed, error:", err); }); } </script> </body> </html> </code></pre> <p>我的 firebase-messaging-sw.js:</p> <pre><code>importScripts( "https://www.gstatic.com/firebasejs/10.7.0/firebase-app-compat.js" ); importScripts( "https://www.gstatic.com/firebasejs/10.7.0/firebase-messaging-compat.js" ); const firebaseConfig = { apiKey: "XXXXX", authDomain: "XXXXX", projectId: "XXXXX", messagingSenderId: "XXXXX", appId: "XXXXX", }; firebase.initializeApp(firebaseConfig); const messaging = firebase.messaging(); messaging.onBackgroundMessage((payload) => { console.log( "[firebase-messaging-sw.js] Received background message ", payload ); // Customize notification here const notificationTitle = payload.data.title; const notificationOptions = { body: payload.data.body, // icon: "/firebase-logo.png", }; self.registration.showNotification(notificationTitle, notificationOptions); }); </code></pre> <p>在后端,我制作了一个简单的 Node Express 服务器,您可以在其中从 FE 发送 FcmToken。 (确实需要复制 fcm 令牌并将其粘贴到 Postman 中)。</p> <pre><code>import { initializeApp, cert, applicationDefault } from "firebase-admin/app"; import { getMessaging } from "firebase-admin/messaging"; import express, { json } from "express"; import "dotenv/config"; import cors from "cors"; const app = express(); app.use(express.json()); app.use( cors({ origin: "*", methods: ["GET", "POST", "DELETE", "UPDATE", "PUT", "PATCH"], }) ); app.use(function (req, res, next) { res.setHeader("Content-Type", "application/json"); next(); }); initializeApp({ credential: applicationDefault(), }); app.post("/send", function (req, res) { const receivedTokens = req.body.fcmTokens; console.log("receivedToken", req.body.fcmTokens); const message = { data: { title: req.body.title, body: req.body.body, }, tokens: receivedTokens, }; getMessaging() .sendEachForMulticast(message) .then((response) => { res.status(200).json({ message: "Successfully sent message", token: receivedTokens, }); }) .catch((error) => { res.status(400); res.send(error); console.log("Error sending message:", error); }); }); app.get("/ping", function (req, res) { console.log("process env: ", process.env.GOOGLE_APPLICATION_CREDENTIALS) res.status(200).json({ message: "Successfully pinged test", file: process.env.GOOGLE_APPLICATION_CREDENTIALS, }); }); app.listen(3000, function () { console.log("Server started on port 3000"); }); </code></pre> <p>这段代码实际上适用于以下测试用例:</p> <ul> <li>Chrome Windows</li> <li>边缘窗口</li> <li>Chrome 安卓</li> <li>Chrome Mac 操作系统</li> <li>Edge Mac 操作系统</li> </ul> <p>它<strong>不</strong>工作的唯一测试用例是<strong>Android 上的Edge</strong>。我的 Android 上的 Edge 版本是 120.0.2210.64</p> <p>此外,也许值得注意的是,Android 上的 Edge 中的 onMessage 函数在其他任何地方都<strong>不</strong>被调用。</p> <p>有人知道为什么吗?或者也许有解决方案?我是不是做错了什么?</p> <p>提前致谢。</p> </question> <answer tick="false" vote="0"> <p>我也有同样的问题。 如果相同的代码在不同的浏览器上运行并且令牌正确,则您可能正在使用另一个应用程序的相同域或子域。</p> <p>示例:<br/> 如果您有一个带有 <a href="https://xxx.example.com/app1" rel="nofollow noreferrer">https://xxx.example.com/app1</a> 且带有推送通知的页面。如果您在 <a href="https://xxx.example.com/app2" rel="nofollow noreferrer">https://xxx.example.com/app2</a> 添加新应用程序,Edge 将无法管理通知(2024 年 8 月)。</p> <p>如果打开通知选项,Edge 将显示一条消息:“通知已在 app1 上设置”。我不知道为什么。也许是因为 FCM 的 Service Worker 位于根文件夹中?或者只是因为 Edge 无法在同一域或子域上拥有多个应用程序?</p> <p>要解决这个问题,必须创建多个子域:<br/> <a href="https://app1.example.com" rel="nofollow noreferrer">https://app1.example.com</a> 和 <a href="https://app2.example.com" rel="nofollow noreferrer">https://app2.example.com</a></p> <p>此时 Edge 将在您的 Android 上添加“app1”作为推送通道。</p> </answer> </body></html>

回答 0 投票 0

FCM 未使用 HTTP v1 向客户端发送推送

是否有人遇到 fcm 使用 HTTP v1 传送推送通知的问题? 我遇到了一个奇怪的问题的场景。当我在手机中运行调试版本或发布版本时,我...

回答 1 投票 0

如何使用 Kotlin 在 Android 中向 MainActivity 提供 ActivityCompat.requestPermissions

我正在尝试将通知与我的应用程序集成。根据谷歌官方文档,有两种处理通知的方法。一个位于系统托盘中,应用程序将简单地启动到其中...

回答 1 投票 0

Firebase:如何通知客户端 CloudFunction 已执行

当 CloudFunction 由 EventTrigger 启动时: onDocumentCreated、onDocumentUpdated、onDocumentDeleted、 书面文件 ...代码执行可能成功 .then(...) 或不成功 ...

回答 1 投票 0

Firebase_messaging:应用程序终止时 onMessageOpenedApp.listen() 不起作用

当用户单击其有效负载后面的通知时,我必须打开特定的屏幕(经典...)。 这是代码: // 侦听器 2 :: 当单击 notif 并打开应用程序时: Firebase 梅萨...

回答 4 投票 0

我想在应用程序运行时点击通知时使用通知数据执行某些操作。我如何在颤振中实现这个

我已经设置了 firebase 推送通知,并且正在我的 flutter 应用程序中接收通知。我就是这样处理的。 Future init() 异步 { 如果(平台.isIOS){ iosInit(...

回答 1 投票 0

无法使用 Firebase 和 dotnet Maui 更改 Android 通知的背景颜色

我正在使用 Firebase 将推送通知发送到 .NET8 MAUI 应用程序...通知有效,但通知的背景颜色显示为非常浅的灰色,因此无法看到

回答 0 投票 0

如何在 Windows 上从 Firebase 云消息传递接收推送通知

我已经能够将推送通知从 Firebase(Firebase 云消息传递)发送到我的 Android 应用程序中。 我想知道我是否可以用 c# (.net) 构建一个可以接收通知的应用程序...

回答 3 投票 0

来自 Node.js 管理 sdk 的 Firebase 消息通知未传送(或显示)到 iOS 设备

我在从 Firebase 发送到 iOS 设备的通知中遇到问题。客户端应用程序是使用 flutter 制作的。 通知是使用 admin-firebase 从 Node.js 云函数发送的

回答 1 投票 0

如何为JSON格式的FCM消息配置优先级?

我制作了一个发送 FCM 消息的云函数,并用 Python 编写。 JSON配置如下......但我不知道如何设置message.android.priority和message.android.notification。

回答 1 投票 0

PHONE_REGISTRATION_ERROR /未实现的 GCM 错误

我们使用的设备具有Linux操作系统,启用了javascript(使用node.js)。我们正在使用 google FCM 来接收通知。我们正在使用 javascript 库(在此处添加了 register())来获取 fcm

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.