当应用程序处于后台时,phonegap-plugin-push on("notification") 事件不会触发

2024-05-08

我正在 Ionic2 中使用以下插件进行推送通知

http://ionicframework.com/docs/native/push/ http://ionicframework.com/docs/native/push/

预期行为:当应用程序关闭并收到通知时,当用户点击通知时, on("notification") 事件应在应用程序打开后触发。

实际行为:我已成功收到通知。但是当应用程序处于后台或关闭时,当我收到通知并点击通知时, on("notification") 事件不会触发。

科尔多瓦版本 7.0.1 安卓版本 6.2.3

My code:

this.platform.ready().then(() => {
    this.pushsetup();
});

private pushOptions: PushOptions;
private pushObject: PushObject;
pushsetup() {
    // to check if we have permission
    this.push.hasPermission()
        .then((res: any) => {
            if (res.isEnabled) {
                console.log('We have permission to send push notifications');
                // configuration of push notification
                this.pushOptions = {
                    android: {
                        senderID: 'XXXXXXXXXXX',
                        icon: 'icon_notification'
                    },
                    ios: {
                        alert: 'true',
                        badge: true,
                        sound: 'false',
                        senderID: 'XXXXXXXXXXX'
                    },
                    windows: {}
                };
                this.pushObject = this.push.init(this.pushOptions);

                // attach push events
                this.storage.get('isPushRegistered')
                    .then(isPushRegistered => {
                        if( !isPushRegistered ){
                            this.pushObject.on('registration').subscribe((registration: any) => {
                                console.log('Device registered', registration)
                                this.storage.set('isPushRegistered', true)
                            });
                        }
                    })


                this.pushObject.on('notification').subscribe((notification: any) => {
                    console.log('Received a notification', notification)
                });
                this.pushObject.on('error').subscribe(error => console.error('Error with Push plugin', error));
            }
        });
}

所以,在我的代码中,你可以看到this.pushObject.on('通知')事件。应用程序关闭时不会触发。

感谢您的时间和支持。


这不是客户端代码的问题。出现此问题的原因是通知负载。

来自phonegap-plugin-push 的官方文档

通知的行为有所不同,具体取决于接收应用程序的前台/后台状态以及发送到应用程序的有效负载。

例如,如果您发送以下有效负载: PhoneGap-插件-推送/

{
  "notification": {
    "title": "Test Notification",
    "body": "This offer expires at 11:30 or whatever",
    "notId": 10
  }
}

当您的应用程序位于前台时,您注册的任何 on('notification') 处理程序都将被调用。但是,如果您的应用程序在后台运行,通知将显示在系统托盘中。单击系统托盘中的通知将启动应用程序,但您的 on('notification') 处理程序将not作为具有通知负载的消息被调用不会导致调用插件的 onMessageReceived 方法。

如果您发送包含通知和数据对象混合的有效负载,如下所示:

{
    "notification": {
        "title": "Test Notification",
        "body": "This offer expires at 11:30 or whatever",
        "notId": 10
    },
    "data" : {
        "surveyID": "ewtawgreg-gragrag-rgarhthgbad"
    }
}

当您的应用程序位于前台时,您注册的任何 on('notification') 处理程序都将被调用。如果您的应用程序在后台运行,通知将显示在系统托盘中。单击系统托盘中的通知将启动应用程序,并且您的 on('notification') 处理程序将not作为具有通知负载的消息被调用不会导致调用插件的 onMessageReceived 方法。

使用此插件时我推荐的推送有效负载格式(虽然它与 Google 的文档不同)100% 有效的时间:

{
    "data" : {
        "title": "Test Notification",
        "body": "This offer expires at 11:30 or whatever",
        "notId": 10,
        "surveyID": "ewtawgreg-gragrag-rgarhthgbad"
    }
}

当您的应用程序位于前台时,您注册的任何 on('notification') 处理程序都将被调用。如果您的应用程序在后台运行,则通知将显示在系统托盘中。单击系统托盘中的通知将启动应用程序和您的 on('notification') 处理程序will be使用以下数据调用:

{
    "message": "This offer expires at 11:30 or whatever",
    "title": "Test Notification",
    "additionalData": {
        "surveyID": "ewtawgreg-gragrag-rgarhthgbad"
    }
}

链接到文档 https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#android-behaviour

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

当应用程序处于后台时,phonegap-plugin-push on("notification") 事件不会触发 的相关文章

随机推荐

  • JavaFX中如何获取鼠标位置?

    我是java fx 的初学者 如何在 JavaFX 中获取鼠标在 x 和 y 中的位置 我尝试使用 AWTMouseInfo 也导入了它 但它不起作用 我还在 Ensembles 中看到了它的代码 在 高级阶段 拖动球窗口 这就是我需要做的
  • NSFileManager.defaultManager().fileExistsAtPath 返回 false 而不是 true

    这怎么可能 let exists NSFileManager defaultManager fileExistsAtPath path absoluteString print exists exists false This is pat
  • 调整表格上的列宽

    目前 如果表格的宽度不大于容器的宽度 我可以调整表格列的大小 我希望发生的是在调整列大小时表格的宽度增加 以便滚动条出现在表格下方 基本上允许我调整大小而不受容器宽度的限制 这是一个小提琴 https jsfiddle net thatOn
  • 垂直对齐在复合模式下不起作用

    根据文档 以下内容应该有效 但对我不起作用 我错过了什么吗 PdfPTable rs1 new PdfPTable 1 PdfPCell c new PdfPCell Paragraph p new Paragraph some text
  • 最近的 AWS 区域的客户端 IP 地址

    Question 我想从客户端设备将一些数据上传到 AWS 但我想上传到最近的 AWS 区域的 S3 存储桶 同样 我希望能够从最近的区域下载 当然 我会在每个区域设置一个存储桶 我可以使用一个系统 它可以获取客户端的 IP 地址 然后确定
  • 为什么要打开重定向 URL?

    我一直在浏览 OWASP 前 10 个漏洞 以更深入地了解每种特定类型的漏洞 我已完成最后一项 未经验证的 URL 重定向 我了解这次攻击 我在 OWASP 中读到了有关此类网络钓鱼计划的内容 现在看来这一点是显而易见的 我很难理解为什么这
  • 使用 CoreTelephony 获取运营商名称仅返回“Carrier”

    我尝试使用此代码获取运营商名称 使用 CoreTelephony CTTelephonyNetworkInfo netinfo CTTelephonyNetworkInfo alloc init CTCarrier carrier neti
  • 如何使用符号来标识 ruby​​ 方法中的参数

    我正在学习 Rails 并回到 ruby 来了解 Rails 中的方法 以及 ruby 的实际工作原理 当我看到如下方法调用时 validates first name presence gt true 我有点迷惑不解了 如何在 ruby
  • 计算 MySQL 中每个唯一 ID 与前一行的日期差异

    我是一名 SQL 初学者 正在学习查询的诀窍 我正在尝试查找同一客户购买之间的日期差异 我有一个如下所示的数据集 ID Purchase Date 1 08 10 2017 1 08 11 2017 1 08 17 2017 2 08 09
  • Pandas - 按每个可能的键组合聚合

    我有一个 DataFrame Pandas 我想通过 A B C 和 D 列的组合尽可能按数据进行分组 假设它具有以下形式 A B C D E F G 0 Y X Y Z 1 2 7 1 Y X Y Z 3 4 8 2 X Y U V 1
  • 使用 AppDomains 并行化非线程安全 DLL

    我有一个非托管 C DLL 我的 NET 应用程序通过 p invoke 使用它 我从这个 DLL 中需要的方法相当耗时 我想并行化方法调用 问题是它使用了一堆静态和全局变量 因此它不是线程安全的 并且无法更改 我的计划是通过从多个 App
  • 从 Microsoft Graph 请求“/joinedTeams”时出现“未经授权”错误

    我正在设置一个用于通过 Microsoft Graph API 修改 Microsoft Teams 帐户 团队 频道 的应用程序 但我无法从我需要调用的所有端点获得响应 我已遵循guide https learn microsoft co
  • 严格标准:在 wordpress/wp-includes/class-oembed.php 第 116 行中,仅应通过引用传递变量

    我已经查看了很多类似的问题 但关于我的代码 我没有得到它 错误 Strict Standards Only variables should be passed by reference in wordpress wp includes c
  • 二维数组中的寻路

    假设我有这个二维数组地图 0 0 0 0 7 1 1 1 1 1 1 1 1 0 7 7 7 7 1 1 1 24 1 1 1 1 0 7 24 24 24 24 24 24 24 1 1 3 1 0 7 23 23 23 23 23 23
  • Flask:缓存静态文件(.js、.css)

    我真的找不到任何这方面的资源 那么如何将视图 函数的缓存与静态文件 即 css js 分开 我想将静态对象缓存一周 另一方面 我只需要缓存函数 视图几分钟 当我执行以下操作时 from flask ext cache import Cach
  • 使用Web蓝牙API时找不到移动设备

    我正在学习 Web 蓝牙 API 使用 google 开发控制台 我无法找到我的移动设备 还尝试了 github 上提供的演示 https github com WebBluetoothCG demos https github com W
  • msmq - 触发器 - 独立可执行调用不起作用

    过去几天我一直在尝试使用 msmq 触发器来调用 exe 文件 它永远不会被调用 这些是我遵循的步骤 创建了一个提及队列路径并检查了查看的触发器 启用 选中 创建了一个不带任何条件的规则 以便每当获得新消息时都会触发触发器 并选择提到独立可
  • 无法触发我的活动

    第一次加载页面时 IsPostback 我在代码中创建一个按钮并将其添加到我的页面 然后向单击事件添加一个事件处理程序 但是 当单击按钮时 页面重新加载后 我的事件处理程序不会触发 谁能解释为什么 Brad 你的答案不完整 他很可能在页面生
  • 如何在 Visual Studio 2015 中为多个解决方案和项目设置单个 Nuget 包文件夹

    我们正在 Visual Studio 2015 中开发多个解决方案 这些解决方案共享一些需要 nuget 包的核心项目 当从一个解决方案添加 nuget 包并随后由另一解决方案打开时 无法解析 nuget 引用 文件夹结构如下 Codeba
  • 当应用程序处于后台时,phonegap-plugin-push on("notification") 事件不会触发

    我正在 Ionic2 中使用以下插件进行推送通知 http ionicframework com docs native push http ionicframework com docs native push 预期行为 当应用程序关闭并