如何从 nodejs 接收(不发送)推送通知?

Posted

技术标签:

【中文标题】如何从 nodejs 接收(不发送)推送通知?【英文标题】:How can I receive (not send) push notification from nodejs? 【发布时间】:2019-02-19 15:23:48 【问题描述】:

我正在构建一个网络应用程序来帮助 Airbnb 房东管理他们的房源。我希望收到新预订的通知,而不是每隔几分钟 ping Airbnb 的服务器。 Airbnb 的 API 无法将数据推送到服务器,所以我想也许我可以模拟设备并接收推送通知。

这是否可以模拟设备并在 nodejs 中接收推送通知?

更新

ios 应用似乎在以下地址注册推送通知:

https://api.airbnb.com/v2/air_notification_devices

使用以下数据:


    "app_version": "19.08",
    "device_type": "iphone_gcm",
    "device_id": "DEVICE_ID",
    "token": "TOKEN",
    "enabled": true

并使用以下 cookie:

SRVID=mofi-production-12ab3c456-7defg_172.21.128.38:32350

然后返回:


    "air_notification_device": 
        "app_version": "19.08",
        "created_at": "2019-03-01T16:27:13Z",
        "device_id": "DEVICE_ID",
        "device_type": "iphone_gcm",
        "enabled": true,
        "id":ID,
        "locale": "en",
        "token": "DIFFERNT_TOKEN",
        "updated_at": "2019-03-01T16:27:13Z",
        "user_id": USER_ID
    ,
    "metadata": 

【问题讨论】:

您确定设备可以通过这种方式接收数据并且不进行轮询吗? @zero298 是的,我很确定他们正在使用推送通知。我认为轮询不适用于应用程序,因为应用程序无法真正可靠地在后台运行。 这很有趣,尽管我想知道维护 node.js 服务器和 AirBnB 之间访问的安全性。您需要被授权为用户,通常通过 OAuth。访问到期后,您将如何在没有用户的情况下重新建立?此外,AirBnB 关于其 api 的宣传中提到,他们将向其 api 合作伙伴发送一条包含预订详细信息的消息:“当 Airbnb 客人预订您的房源时,我们将传回消息和预订详细信息,允许应用程序构建自定义工作流程并为我们共同的客人。”不是这样吗? 我意识到报价可能是通过同步预订 api 进行的,其中预订是通过代表您的 api 调用发生的,他们正在向您发送详细信息。如果您有兴趣收到通知或了解在您的应用程序之外发生的预订,这对您没有帮助。 基于 device_type 它可以是旧版本:developers.google.com/cloud-messaging 或只有旧名称。最好捕获通知。 【参考方案1】:

TL;DR: 是的,你可以,但如果没有收到这些通知的知识,你不会做太多事情。

您必须查看应用程序如何注册通知。 拥有文档后,请查看如何注册通知。

顺便说一句:Airbnb 在浏览器中有推送通知?如果是这样,我会对此更感兴趣,而不是开始调试 android 应用程序。

如果没有官方 API,您将有大量的逆向工程,但其中 90% 使用的是来自 google 的 is FCM。

在一个公开的英文网站上,他们只写关于 OAuth2 和更新的内容,但在 my language 我有:

我可以使用 Airbnb API 做什么?

API 允许开发人员团队在 新的和现有的爱彼迎账户。您的应用程序的用户将拥有 接收关于内容更新的推送通知的选项, 价格和可用性。一旦 Airbnb 客人预订了您的报价,我们 将传递您的预订信息和详细信息,允许 应用程序来创建您自己的数据流并提供惊人的 为我们的普通客人提供体验。

值得从安装手机模拟器开始,监听所有网络通信并安装应用程序。但这并不容易,因为您必须进行中间人攻击才能进行 HTTPS 通信。

选项是反编译官方应用并在代码中搜索。

首先,您需要发现用于通知的服务。如果这是 FCM,那么过程如下所示:

标识应用程序实例的application generates唯一令牌

应用程序将此令牌发送到 Airbnb 以注册通知

我在 Node 中找不到会订阅通知的客户端,但这里是 Web (JS),所以这是可能的。 (再次逆向工程)

有一些关于XMPP server receive upstream messages,但最好在C++ / Unity 中编写小应用程序,这将进一步向Node 转发通知,例如通过websocket。

【讨论】:

谢谢!我已经在中间设置了这个人,并且可以看到 https 流量的内容。我一直在查看 ios 应用程序与其服务器之间的流量,但也许我应该查看 android?我可以从应用请求中判断它是否是 FCM 吗? 我发现了这个可以用来接收通知,对吧? github.com/MatthieuLemoine/push-receiver#readme 我用推送通知注册中的一些数据更新了我的问题 看来push-receiver 是您所需要的。您仍然必须找到senderId,这是一个 12 位数字(对于 FCM。我不知道如何使用 GCM)。在sendTokenToBackendOrWhatever 中,您将发货实现到 apir-api。并且返回的 teken 可以是“VAPID”键,它允许您通过客户端发送通知。但我有点担心在以下数据中缺少user_id。除非身份验证在不同的地方。 看来你必须从安卓下载senderId,因为iOS使用证书。也许最好检查一下 android 是否使用 FCM 而不是 GCM。

以上是关于如何从 nodejs 接收(不发送)推送通知?的主要内容,如果未能解决你的问题,请参考以下文章

如何接收和处理 Chrome 通知/推送通知?

如何在 nodejs 中使用 FCM 发送 AWS SNS 推送通知?

向 Parse 发送推送通知,如何在设备中接收它

如何创建从服务器到所有通知授予用户的网络推送通知?

Azure 移动应用程序:无法从我的 nodeJS 后端发送推送通知

如何不向不想接收推送的用户发送FCM?