Firebase 推送通知点击不起作用

2023-12-29

我在使用 firebase 实现通知时遇到问题。点击事件不起作用。我正在使用 HTTP 1 版本发送不记名令牌。

{
  "message": {
    "token": "8888****usertoken****8888",
    "notification": {
      "title": "Background Message Title",
      "body": "Background message body"
    },
    "webpush": {
      "fcm_options": {
        "link": "https://dummypage.com"
      }
    }
  }
}

我还尝试过 click_action、action 和许多其他变体,但都不起作用。

我使用的是8.0.0版本

根据此链接上找到的文档https://firebase.google.com/docs/cloud-messaging/js/send-multiple https://firebase.google.com/docs/cloud-messaging/js/send-multiple,我应该能够使用 fcm_options 来实现它。

我尝试了一种实现 messages.onBackgroundMessage 的解决方法,但是当我实现此方法并使用 self.registration.showNotification 时,通知会显示两次。一个由浏览触发,另一个由此代码触发。

注册 self.addEventListener('notificationclick' 似乎仅在我实现 onBackgroundMessage 时才起作用。

我遵循了文档,但这让我发疯。

这是我的服务人员代码:

importScripts('https://www.gstatic.com/firebasejs/8.0.0/firebase-app.js');
importScripts('https://www.gstatic.com/firebasejs/8.0.0/firebase-messaging.js');

var firebaseConfig = {
    apiKey: "xxxxxx",
    authDomain: "xxxxxxxx.firebaseapp.com",
    databaseURL: "https://xxxxxx.firebaseio.com",
    projectId: "xxx-xxx",
    storageBucket: "xxx-xxx.appspot.com",
    messagingSenderId: "222222222",
    appId: "1:2222:web:22222"
};
console.log("fire base messaging")

firebase.initializeApp(firebaseConfig);
const messaging = firebase.messaging();


messaging.onBackgroundMessage(function (payload) {
    console.log("onBackgroundMessage", payload)
    var dataFromServer = payload.notification;
    var notificationTitle = dataFromServer.title;
    var notificationOptions = {
        body: dataFromServer.body,
        image: dataFromServer.image,
        data: {
            url: "https://google.com"
        }
    };
    return self.registration.showNotification(notificationTitle,
        notificationOptions);
});

////Code for adding event on click of notification
self.addEventListener('notificationclick', function (event) {
    console.log("notificationclick", event)
    var urlToRedirect = event.notification.data.url;
    event.notification.close();
    event.waitUntil(self.clients.openWindow(urlToRedirect));
});

结果我将整个 URL 传递给 webpush.fcm_options.link = "https://google.com",我所要做的就是仅传递相对路径,如 webpush.fcm_options.link = "/mypage"。

所以发送的请求会是这样的:

{
  "message": {
    "token": "8888****usertoken****8888",
    "notification": {
      "title": "Background Message Title",
      "body": "Background message body"
    },
    "webpush": {
      "fcm_options": {
        "link": "/mypage" 
      }
    }
  }
}

我在文档中没有看到这只是相对路径。它甚至声明需要 HTTPS。我花了几个小时研究这个,我希望它对其他人有帮助。

https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#WebpushFcmOptions https://firebase.google.com/docs/reference/fcm/rest/v1/projects.messages#WebpushFcmOptions

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Firebase 推送通知点击不起作用 的相关文章

随机推荐

  • FacebookShare 更新后导致编译器错误

    我刚刚跑了pod update对于我的应用程序 现在它无法编译 给出这些问题LinkShareContent swift in FacebookShare Cannot assign to property contentDescripti
  • C++ 运行时通过字符串名称访问成员函数

    我有两节课 class MyClassInfo public void AddMethod std string name void pointer I don t know what signature should be class M
  • 重命名 auth_user 会破坏新设置的迁移

    遵循看起来像好建议 https stackoverflow com questions 14904046 migrating existing auth user data to new django 1 5 custom user mod
  • 获取 Active Storage 变体的元数据

    我有一个 Active Storage 图像变体 例如 我正在尝试获取width and height该变体的值 因为它们是未知的 用于width and heightHTML 属性 我预计他们会在这里 model logo image v
  • 使用 xslt:analyze-string 将首字母缩略词添加到 HTML

    我想使用 xslt analyze string 将首字母缩略词添加到 HTML 文本中 问题 在我的 HTML 文本中有诸如 strong some text strong 被视为 XML 节点 当我应用 xslt analyze str
  • 我无法启用推送通知参数

    我三个月前创建了一个应用程序 并已成功批准进入 itunes 我需要做出的改进之一是包括 推送通知 问题是 当我尝试在developer apple com 的 App ID 中编辑该参数时 复选框被禁用 我无法检查它 这是他们告诉我们应该
  • 底部应用栏在使用片段导航时向上/向下滑动(导航架构组件)

    我正在查看底部应用程序栏 有一个很好的功能可以在滚动时隐藏它app hideOnScroll true 问题是我无法弄清楚当片段被删除时如何以编程方式向上或向下滑动它导航至和来自 例如 设置概述 开MainActivity具有导航主机片段
  • Fortran 中任何类型数组的过程

    Basis 我想编写一个过程 对任何输入数组类型进行一些操作 integer real 4 real 8 我在 StackOverflow 上读到的唯一想法是模仿 C 模板 使用通用过程进行覆盖 使用预处理器包含重复代码 但是搜索流行的I
  • 内存泄漏、访问已释放的内存和双重释放之间有什么区别?

    我试图找出与内存模型相关的这三种问题之间的区别 如果我想模拟一个memory leak场景中 我可以创建一个指针而不调用相应的删除方法 int main OK int p new int delete p Memory leak int q
  • 如何更改 conemu 中的字符集/区域设置?

    我通过 conemu 使用 gitbash 我有一个字符集问题 其中字符在 git bash 中通过 conemu 和直接 git bash 看起来错误 我通过将 minttyrc 中的区域设置设置为 在 gitbash 中修复了它 Bol
  • 何时使用嵌入式数据库

    我正在编写一个应用程序 它解析一个大文件 生成大量数据并用它进行一些复杂的可视化 由于所有这些数据无法保存在内存中 因此我做了一些研究 并开始考虑将嵌入式数据库作为这些数据的临时容器 我的问题是 这是解决这个问题的传统方法吗 嵌入式数据库
  • 命名约定:寻找混合英语和领域/工作流术语的替代方案

    尽管在我们公司 所有人的母语都不是英语 但我们还是努力用英语编写文档 代码和注释 当然 除了与用户相关的内容之外 几乎所有内容都是如此 只要业务术语是可翻译的并且不太特定于该领域 这就可以了 但是 一旦业务术语变得过于具体 要么没有适当的翻
  • Apache 重写子网 IP 范围

    有人可以告诉我如何将以下 IP 范围 属于 Cloudfront 放入 mod rewrite 中吗 我希望将 example com 的非 www 请求重定向到 www example com 但不重定向来自以下 IP 范围的任何 IP
  • 为什么我必须刷新页面才能使 JavaScript 函数正常工作?

    我正在开发一个移动网站并使用 jQuery 当我加载某个页面并单击所需的按钮时 代码在刷新页面之前不会执行 为什么是这样 我是这样的 script js document ready function user save click fun
  • CAShapeLayer 的中风结束没有动画

    这是我用来制作动画的代码CAShapeLayer progressBarLayer strokeEnd CGFloat progressToDrawForProgress progress let progressAnimation CAB
  • 将 git 存储库复制到 USB 驱动器

    我正在开发一个开源项目 我的机器上有一个包含所有代码的 git 存储库 该存储库有点大 我想在无法访问我的计算机时继续处理它 如果我将存储库复制到我的 USB 驱动器中 它的行为是否仍然像我在计算机中的原始存储库上一样 相同的配置等 如果复
  • 如何在 where 子句中使用 row_number

    我正在尝试使用窗口函数来获取最近的 n 条记录 如下从这里 https stackoverflow com questions 61570170 something like select distinct on but for n 1 6
  • 如何在 Fortran 中重写结构体构造函数

    目前是否可以重写 Fortran 中的结构构造函数 我见过这样的建议示例 例如在 Fortran 2003 规范中 module mymod type mytype integer x Other stuff end type interf
  • WPF 应用程序可以进行依赖注入吗?

    我想开始在我的 WPF 应用程序中使用依赖注入 主要是为了更好的单元可测试性 我的应用程序主要是按照 M V VM 模式构建的 我正在看Autofac https code google com p autofac 对于我的 IoC 容器
  • Firebase 推送通知点击不起作用

    我在使用 firebase 实现通知时遇到问题 点击事件不起作用 我正在使用 HTTP 1 版本发送不记名令牌 message token 8888 usertoken 8888 notification title Background