天道酬勤,学无止境

GCM 推送通知延迟(Push notifications delay with GCM)

问题

我们有一个应用程序(Ruby on Rails)将推送通知发送到一个 android 应用程序,我们正面临 GCM 问题,其中一些通知要么延迟要么从未收到。 考虑到这些通知是发送给员工而不是最终用户的事实,我的问题是:

什么是发送这些推送通知而不会有任何延迟或丢弃的最佳方式?有没有一种方法可以独立于 GCM 和 SNS 等可用服务发送推送通知?

请记住,我们正在寻找一种可以无延迟地发送这些通知的解决方案,因为应用程序必须在发送后 1 到 20 秒内收到通知才能正常运行。

提前感谢任何会回答这个问题的人......

回答1

看看“急”:

他们在其网站上声明以下内容:

最可靠的推送通知网关,非常适合实时应用程序。

由于其不稳定性和推送通知限制,Google Cloud Messaging 根本不适合对时间敏感的实时应用程序。

Pushy 通过使用 MQTT 协议维护专用的后台套接字连接来工作,MQTT 协议是一种极其轻量级的发布/订阅协议,消耗的网络带宽和电池非常少,非常适合移动设备。

您最多可以在 100 台设备上免费使用它,因此您可以尝试一下,看看它是否符合您的需求。 我没试过。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • WhatsApp 如何克服 GCM 推送通知延迟?(How Does WhatsApp overcome the GCM Push notifications delay?)
    问题 我正在尝试使用 GCM 服务,除了 GCM 推送通知或交付有效载荷的长时间延迟之外,一切都很好......有时我的应用程序需要 5 分钟才能收到通知或有效载荷。 我需要立即交付...我知道 GCM 的作用,即等待另一台设备上线,但在我的情况下,我持有两台设备并且它们在线,但我收到了延迟通知! WhatsApp(作为使用 GCM 的应用程序示例)如何克服这个问题..并立即发送? [即(消息类型:打字,在线 - 最后一次看到)不能延迟...] GCM 延迟推送是已知问题:这个问题我的问题是:使用 GCM 的其他应用程序如何克服这个问题 回答1 发送通知时,您可以将优先级参数设置为“高”。 从文档: 默认情况下,消息以正常优先级发送。 正常优先级可优化客户端应用的电池消耗,除非需要立即交付,否则应使用该优先级。 对于具有正常优先级的消息,应用程序可能会以未指定的延迟接收消息。 当以高优先级发送消息时,它会立即发送,该应用程序可以唤醒睡眠设备并打开与服务器的网络连接。 我知道这个答案来晚了,但是如果您仍然面临这个问题(或其他任何人),请告诉我它是否有帮助。 回答2 大玩家 让我们从规模的角度关注 WhatsApp。 它们的规模是全球性的,是市场份额最大的公司之一。 对于这样的玩家,无论情况如何,都必须提供一致且流畅的用户体验。 这意味着像我们这样的“小鱼开发商
  • GCM 推送通知 | 不一致的检索、不必要的延迟和空包(GCM push notifications | Inconsistent retrieval, unwanted delays, and empty bundle)
    问题 我正在我的应用程序中集成推送通知,用于发送信息和基本消息。 这个想法是它们永远不会从服务器(云到设备)发送,而是从设备(设备到设备)发送。 我使用的第三台服务器是 Firebase。 我可以在 GCM 注册就好了。 但是,当我在 50% 的情况下发送消息时,我从未看到它。 当我这样做时,需要 10 多分钟才能得到它,而且捆绑包总是空的。 这是我的代码: 要注册,我从我的 Application.java 调用它 GcmRegister gcmRegister = new GcmRegister(this); gcmRegister.register(); 要发送帖子,我会异步执行此操作: try { Bundle b = new Bundle() b.putString("title", title); b.putString("message", message); ///apikey is the id i get from registering with GCM gcm.send(apiKey + "@gcm.googleapis.com", String.valueOf(new AtomicInteger().incrementAndGet()), b); } catch (IOException e) log.e(e.getMessage()); e
  • GCM-推送通知到达设备需要多长时间?(GCM - How long does it take for push notifications to reach the device?)
    问题 我对接收推送通知消息(使用GCM)的速度感兴趣。 发送的推送通知到达设备需要多长时间,特别是当我向大量设备(例如100,000甚至1,000,000)发送消息时? 回答1 GCM旨在在设备可用时立即发送通知。 如“消息的GCM生存期”文档所述: 在最佳情况下,如果设备已连接到GCM,则屏幕处于打开状态,并且没有节流限制,消息将立即发送。 如果您指的是平均速度,则在Google IO '15(01:57)中提到过: 如果设备在线,则平均..50毫秒。 还有一些因素可能会影响通知本身的传递。 其中一个示例是设置delay_while_idle标志(有关更多信息,请参阅Message文档的GCM生存时间)。 希望这可以使您的要求更加清楚。 干杯! :D PS:根据最近的IO '16,他们现在有Firebase Cloud Messaging,其核心是基于GCM。 小心检查一下。 ;) 回答2 从FCM接收任何PN(推送通知)的时间与目标设备的数量无关紧要。 然而,一件很重要的事情是所有设备都可能会或可能不会同时收到通知,因为在Android 6.0(Api 23)之后,打ze模式开始发挥作用,这限制了立即从FCM捕获PN。 因此,如果任何设备处于打ze模式,则它将收到延迟的PN。
  • 如何避免Android GCM消息中的延迟/更改心跳(How to avoid delay in Android GCM messages / change heartbeat)
    问题 我读过许多有关GCM问题的文章,这些问题影响到某些人。 似乎在某些设备/路由器/运营商中,通知遭受了延迟。 我的路由器遇到了此问题:WIFI上的消息延迟很长,但是当我禁用WIFI并连接到移动网络时,消息立即出现。 似乎可以通过Android应用程序来解决。 诸如增加使GCM连接保持活动状态的心跳之类的事情。 谁能告诉我们应该怎么做才能避免延误? 我们如何通过Android应用程序保持与GCM的连接? 一个代码示例(以及在何处以及如何使用它)将非常有帮助。 这篇文章解释了这个问题。 它说:“我们可以每两分钟从GCM服务器(这是免费的)上执行ping操作来保持连接状态。” 我们该怎么做? 非常感谢 以下应用似乎可以解决问题。 令人惊讶的是,第一个不需要任何许可,第二个不需要互联网连接,而第三个仅适用于有根电话: https://play.google.com/store/apps/details?id=at.pansy.droid.gcmWifiFix https://play.google.com/store/apps/details?id=com.elotro.pushheartbeat https://play.google.com/store/apps/details?id=com.andqlimax.pushfixer 回答1 我会在第一个答案中将此作为评论
  • 谷歌云消息推送通知(google Cloud Messaging Push notification)
    问题 我可以在 Google Chrome 上使用 POSTMAN 客户端将有效负载消息发送到 GCM 服务器以进行测试吗? 其次,如果是,要发送的 header 和 url 参数是什么。 回答1 是的你可以。 1. 使用 JSON 负载发送通知 网址: https://android.googleapis.com/gcm/send : https://android.googleapis.com/gcm/send 标题: 授权:key=<your-api-key> 内容类型:应用程序/json 正文(单击“原始”选项卡): { "collapse_key": "score_update", "time_to_live": 108, "delay_while_idle": true, "data": { "score": "4x8", "time": "15:16.2342" }, "registration_ids":["4", "8", "15", "16", "23", "42"] } 注意: registration_ids是唯一的必填字段,其他都是可选的。 2. 发送带有纯文本负载的通知 网址: https://android.googleapis.com/gcm/send : https://android.googleapis.com/gcm/send 标题: 授权
  • GCM / FCM 推送通知中的消息限制(Message throttling in GCM / FCM push notification)
    问题 我想知道什么是 Google FCM 推送通知中的消息限制? 我正在尝试使用 FCM 实现示例推送通知,但不了解他们的步骤中提到的消息限制。 也没有找到关于它的文档。 https://aerogear.org/docs/unifiedpush/aerogear-push-android/guides/#google-setup 有人可以澄清这个术语吗? 回答1 https://stuff.mit.edu 的 Throttling 文档很好地解释了它: 为了防止滥用(例如向设备发送大量消息)并优化设备的整体网络效率和电池寿命,GCM 使用令牌桶方案实现消息节流。 消息在每个应用程序和每个折叠键的基础上受到限制(包括不可折叠的消息)。 每个应用程序折叠键都被授予一些初始令牌,然后定期授予新令牌。 每个令牌对发送到设备的单个消息有效。 如果应用程序折叠密钥耗尽其可用令牌的供应,则新消息将缓冲在待处理队列中,直到在定期授予时新令牌可用。 因此,在定期授权间隔之间进行节流可能会增加在短时间内发送大量消息的应用程序崩溃密钥的消息传递延迟。 如果出于网络和电池效率的原因,应用程序崩溃键的待处理队列中的消息可能会在下一次定期授权之前传递,如果它们被 GCM 搭载属于非节流类别的消息。 简单地说,我想你可以简单地看到像漏斗一样的节流,它可以防止消息溢出(通常用于下游消息传递)
  • 使用Asp.Net的GCM推送通知(GCM Push Notification with Asp.Net)
    问题 如您所见,Google正在迁移其推送通知系统。 http://developer.android.com/guide/google/gcm/c2dm.html 是否有任何示例或指南可用于通过Asp.Net应用程序实施Google Cloud Messaging(GCM)? 回答1 我有一段代码对我来说很好用,可能会有所帮助,我对其进行了测试... void send(string regId) { var applicationID = "xxxxxxxx"; var SENDER_ID = "xxxxx"; var value = txtMsg.Text; WebRequest tRequest; tRequest = WebRequest.Create("https://android.googleapis.com/gcm/send"); tRequest.Method = "post"; tRequest.ContentType = " application/x-www-form-urlencoded;charset=UTF-8"; tRequest.Headers.Add(string.Format("Authorization: key={0}", applicationID)); tRequest.Headers.Add(string.Format(
  • GCM服务对于大规模推送通知是否可靠?(Is GCM service reliable for large scale push notification?)
    问题 我想一次向50,000个用户发送通知,每天向50个通知发送通知,在这种情况下使用GCM是一个不错的选择吗? 如果不能,我不知道我可以使用哪些其他推送服务,即使它是付费服务,我也不介意。 回答1 一个通知只能发送到1000个设备(GCM限制)。因此,您必须拆分设备阵列。 50.000个用户可以使用GCM。 我们的应用程序可服务100.000个用户。 如果可以,您可以使用airpush通知服务:http://www.airpush.com/ 回答2 我认为GCM是一个不错的选择。 它可靠并且使用它可以节省电池和数据使用量,因为它可以搭载其他Google服务。 您需要的只是安装了Google服务的Android 2.2或更高版本,这意味着没有Kindle Fire。 我认为GCM在处理您提供的消息或设备数量方面不会有任何问题。 如果使用它,您仍然必须编写自己的服务器组件来处理注册和消息发送。 我写了一篇博客文章,描述了它是如何工作的。 AirBop,UrbanAirship和ClixAp是一些为您处理服务器组件(以及其他事情)的商业服务。 解析是(我认为)不使用GCM的商业解决方案。 正如我在上面的评论中指出的那样,我帮助创建了AirBop 回答3 像其他人一样,我们也与GCM斗争了一段时间。 但是,我们相信我们终于找到了最能影响GCM性能的因素: 为了以最少的抖动最快地传递通知
  • 在iOS上获取GCM推送通知的注册令牌的正确顺序? GCM不可靠吗?(Proper sequence to get registration token for GCM push notification on iOS? Is GCM unreliable?)
    问题 嗨,我已经按照教程在iOS上使用GCM了。 它已经间歇性地工作(这意味着所有证书,权限和其他东西都可以)。 但是,最近,我一直反复收到两条错误消息: GCM | GCM registration is not ready with auth credentials GCM | GCM registration is not ready with auth credentials 。 另外,重新连接到GCM失败并显示: Error Domain=com.google.gcm Code=501 "(null)" 这部分与设备未获得GCM注册ID有关。 最近还有其他人更频繁地遇到这些问题吗? 还是因为我以错误的顺序调用GCM API(尤其是connectWithHandler: , startWithConfig:和tokenWithAuthorizedEntity方法)? 我怀疑原因是后者,因为经过一段时间的延迟后我确实获得了GCM ID。 我也不总是收到GCM ID。 当我没有收到该应用程序时,我通常必须通过Xcode再运行该应用程序一两次。 (或通过强制关闭应用程序)。 显然,这不是我的用户必须要做的事情。 这是我的GCM API调用的顺序: 设备获取一个APNS令牌然后,使用我的APNS令牌调用tokenWithAuthorizedEntity:
  • Ionic 2 推送通知错误(Ionic 2 Push notification error)
    问题 我在这个代码下面使用 import {Push} from 'ionic-native'; initializeApp() { this.platform.ready().then(() => { StatusBar.styleDefault(); var push = Push.init({ android: { senderID: "484777065207" }, ios: { alert: "true", badge: true, sound: 'false' }, windows: {} }); push.on('registration', (data) => { console.log(data.registrationId); alert(data.registrationId.toString()); }); push.on('notification', (data) => { console.log(data); alert("Hi, Am a push notification"); }); push.on('error', (e) => { console.log(e.message); }); }); } 结果 Mobile 但是当我尝试此代码时,我在 mobile 中退出了,但我只显示了警报,但没有显示通知。 所以你能不能把 ionic 2
  • Android 推送通知可靠吗? [关闭](Are Android push notifications reliable? [closed])
    问题 关闭。 这个问题需要更加集中。 它目前不接受答案。 想改善这个问题吗? 更新问题,使其仅通过编辑这篇文章来关注一个问题。 3年前关闭。 改进这个问题 我想知道使用推送通知消息而不是服务是否可以,或者换句话说,推送通知传递是否完全可靠。 我知道 IOS 不可信,但我不确定 Google 是否保证交付。 所以,请赐教。 回答1 不,谢谢。 您可以在 Google 的官方文档 ( https://developers.google.com/cloud-messaging/concept-options ) 上阅读的标准 GCM 推送通知是一种尽力而为的服务。 我引用: 换句话说,GCM 将保证对必须“现在或永远”传递的消息做出最大努力。 如果您正在寻找可靠的推送消息传递 API,您可以尝试以下服务: 爱出风头弹射 这两个服务都建立自己的后台连接,类似于 GCM,以提高推送通知的可靠性。 回答2 由于 GCM 底层架构的各种问题,通过 GCM / FCM 发送的 Android 推送通知不可靠 [1] [2] [3]。 推送通知可能会延迟、速率受限、在传输过程中丢失或以与发送顺序不同的顺序到达。 您可以使用替代的推送通知网关,它们对于您的时间紧迫的操作需求来说更加可靠。 您可以尝试 Pushy (https://pushy.me/),该服务使用自己的后台 MQTT 连接为独立于
  • 为什么首选使用 GCM 进行推送通知?(Why it is preferred to use GCM for push notifications?)
    问题 我知道,是这样。 但我不明白,为什么? 为什么不简单地定期向服务器发送查询? 当然,它可能会耗尽电池电量并增加互联网流量。 我明白。 但是使用 Google Cloud Messaging 如何解决这个问题呢? 我找到了答案。 但对我来说不是很清楚。 谁能给我一个明确的解释? 回答1 假设您的手机上有 50 个不使用 GCM 的应用程序。 每个应用程序开发人员决定是否适合每分钟轮询一次各自的后端。 由于这些都是独立的应用程序,因此每次调用可能不会与另一个 api 调用同时发生。 对电池的最大伤害是当 Android 设备中的无线电在关闭后必须重新打开以进行 API 调用时,因此在时间块之间发生的多次调用会更快地耗尽电池(阅读无线电状态机上的这篇文章以更好地理解为什么这是 https://developer.android.com/training/efficient-downloads/efficient-network-access.html) 此外,每个应用程序都将访问一个单独的端点。 每次进行 API 调用时,您都必须完成给定服务器的连接过程。 使用批处理 api 请求或 HTTP 2.0,可以通过不必重新进行握手或连接过程来优化对同一服务器的多个调用。 现在想象一下,所有 50 个应用程序都使用 GCM。 GCM 将代表所有 50 个应用程序定期轮询端点。 假设
  • Android中用于发送推送通知的协议(Protocol used for sending push notification in Android)
    问题 我想知道使用哪种协议向 android 设备发送推送通知,以及使用哪种协议向 GCM 发送推送通知请求。 是 HTTP、HTTPS 还是其他什么? 回答1 其他答案中已经提到了第 3 方服务器和 GCM 服务器(HTTP 或 XMPP)之间的通信协议。 GCM 文档中没有讨论设备和 GCM 服务器之间的通信协议,因为您永远不必以 Android 应用程序开发人员的身份直接访问它,因此您不需要了解它。 但是,这里引用了来自创建 GCM 的团队的一位 Google 开发人员的话,其中说明了有关连接的一些内容。 从他的说法,你只能知道这是一个长寿命的TCP连接。 GCM 维护一个长期连接 - 如果它知道连接已断开,则重新连接。 路由器/AP/NAT 应该发送一个 FIN 或 RST 来终止 TCP 连接 - 这样 GCM 和服务器就会知道连接已死。 然而,一些路由器和移动运营商不这样做,然后 GCM 需要依靠心跳,在 Wifi 上大约 15 分钟,在移动上更多。 (引自该人的回答) 回答2 有两种协议 http 和 xmpp 可用于向 GCM 服务器发送消息。 现在由您决定要使用什么。 如果你想广播消息,那么你应该使用http。 您可以在单个 http 请求中广播 1000 条消息。 并且请求中只有一条消息通过 xmpp ...... Http 只能用于下行流(第 3 方应用服务器
  • 在 android 中使用 GCM 和 ASP.NET 服务器推送通知(如何动态获取和发送 id。)(Push notification using GCM with ASP.NET server in android(How to get and send ids dynamically.))
    问题 有一些疑问...... final String regId = GCMRegistrar.getRegistrationId(this); // MainActivity.java class 通过此语句,我正在为运行此应用程序的设备动态接收注册 ID,从而将其发送到 Web 服务器。 但是正如您所说,除了将任何其他识别因素(用户 ID 或电话 ID)发送到网络服务器之外。 如何动态获取和发送这些 id。 List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); for (int i = 0; i < Vars.length; i++) { nameValuePairs.add(new BasicNameValuePair(Vars[i][0], Vars[i][1])); 如何动态设置数组维度,因为根据注册的设备,我正在为所有注册的设备设置注册 id 数组并将其发送到 Web 服务器。 请粘贴您的 GCMIntentService 类的 OnRegistered 和 UnRegistered 方法。 还有如何在服务器端 .net 开发人员将数据数组发送到 GCM 服务器。 现在他正在为多个设备以 json 格式发送注册 ID,但它没有执行。 我们收到 404 错误或错误请求。
  • 适用于 Android 的 React Native 推送通知(React Native Push Notification for Android)
    问题 过去 2 周,我们一直在 react-native 中使用 android 推送通知,并且我们尝试使用以下 react native 模块 https://www.npmjs.com/package/react-native-push-notification 使用上述模块,我们能够获得本地通知(来自应用程序的静态通知),该通知有效但未显示来自服务器的通知。 我们也试过“https://github.com/oney/react-native-gcm-android”这也.. 能够注册 GCM 并从 GCM 获取令牌但使用该注册令牌,无法获得通知和 我们正在使用 php 从服务器发送通知,php 代码如下 这是我们用来从服务器发送通知的代码, <?php function sendPushNotificationToGCM($registatoin_ids, $message) { $url = 'https://android.googleapis.com/gcm/send'; $fields = array('registration_ids' => $registatoin_ids, 'data' => array("title" => 'hi', "message" => $message, ), ); define("GOOGLE_API_KEY", "YOUR
  • 推送通知未显示在状态栏上(push notification doesn't show up on status bar)
    问题 我正在将 phonegap 与 phonegap-plugin-push 一起使用,并且我尝试了该插件附带的示例,我在我的手机(Galaxy s4,Android 5.0.1)上对其进行了测试,当我在应用程序打开时发送通知时我得到了振动并且消息显示在 index.js 中提到的卡片 div 内,但我在状态栏上没有收到通知,如果应用程序在后台,我在状态栏上也没有收到通知,但我收到了振动。 我想知道为什么我在状态栏上没有通知弹出窗口。 我使用 phonegap-plugin-push 1.4.4 回答1 @的 我正在使用 ruby​​ 发送通知 require 'rubygems' require 'pushmeup' GCM.host = 'https://android.googleapis.com/gcm/send' GCM.format = :json GCM.key = "key" destination = ["id"] data = {:title => "PhoneGap Push",:message => "PhoneGap Build rocks!", :msgcnt => "1", :soundname => "beep.wav"} options = {:collapse_key => "placar_score_global", :time_to
  • 结合ios(推送通知)和android(GCM)API(webservice)进行通知(Combine ios (Push notification) and android (GCM) API (webservice) for notification)
    问题 我是一名 android 开发人员,所以我对 PHP 了解不多。 我们正在 Android 和 IOS 中开发试卷应用程序。 并创建通知功能,它完美地工作。 但问题是 IOS 使用推送通知,而 android 使用 GCM。 这两个使用不同的api。 我的问题是如何结合这两个api。 我想将这两个 api(webservice)合二为一。 当管理员上传文件时,所有用户都会使用通知天气收到通知,它是 android 或 IOS 设备。 我该怎么办? 帮助非常感谢提前感谢。 我正在使用这个链接 这是我的努力 安卓API <?php require_once('connect.php'); // API access key from Google API's Console define( 'API_ACCESS_KEY', 'AIzaSyBWcc6ONXvNEHECxzLwFDSDCTKDTjEhfT8' ); //$registrationIds = array( $_GET['id'] ); $conn = new mysqli('host name', 'server name', 'password', 'database name'); $select_qury = "SELECT gcm_registration_id FROM gtu_registration"
  • 推送通知需要很长时间才能到达(Push Notifications take too long to arrive)
    问题 我在 iOS 和 Android 的 adobe air 应用程序中遇到推送通知的奇怪问题。 我正在使用 Milkman Games 的 Easy Push ANE 和 One Signal 服务。 问题是通知确实会到达,但有时(随机),消息在发送后可能需要长达 15 分钟才能到达设备。 这对我的应用程序(出租车预订应用程序)至关重要,因为我依赖推送通知在出租车应用程序和用户应用程序之间进行通信。 因此,例如,如果用户叫车,出租车应用程序最多可能需要 15 分钟才能收到通知。 与 One Signal 支持人员交谈,根据他们的说法,一切都很好,如果我查看 One Signal 仪表板,通知几乎一直都是即时发送的。 这种延迟的原因可能是什么? 我该怎么做才能让事情变得更好? 谢谢你。 回答1 通常推送通知确实会很快到达。 但在一些罕见的情况下,我们看到它们被延迟: Android 设备上的通知延迟: 一些家用和商用 wifi 路由器会导致设备与谷歌 GCM 服务器的连接被关闭。 设备稍后重新打开连接并接收延迟通知。 (此处讨论:https://groups.google.com/forum/#!topic/android-gcm/Y33c9ib54jY) 某些自定义版本的 Android 操作系统具有省电设置,可能会导致通知延迟或忽略。 例如,索尼 Xperia 设备具有
  • GCM 推送通知服务 DELPHI XE6 的问题(Issue with GCM Push notification service DELPHI XE6)
    问题 我正在 delphi xe6 上开发 GCM 推送通知。 我将这篇文章中的代码 https://stackoverflow.com/questions/21466094/start-android-activity-before-passing-the-gcm-intent(使用 AndroidManifest.xml 中的标准组件)用于我自己的应用程序和即使应用程序未运行,我也设法使用该服务接收通知。 但是当我收到通知时遇到了一个问题,那就是我无法捕获 onclick 事件,所以我的应用程序打开(很棒)但它没有执行所需的操作。 这是我的 AndroidManifest.xml <receiver android:name="com.embarcadero.gcm.notifications.GCMNotification" android:exported="true"> <intent-filter> <action android:name="com.google.android.c2dm.intent.RECEIVE" /> <category android:name="%package%" /> </intent-filter> </receiver> <service android:name="com.embarcadero.gcm.notifications
  • 在 node.js 应用程序中接收 GCM 推送通知(Receive GCM push notification in node.js app)
    问题 我正在 node.js 中构建命令行应用程序并希望接收 GCM 推送通知(命令行应用程序将与 iOS/Android 应用程序使用的同一组服务交互,因此想要使用相同的通知服务)。 鉴于 GCM 可以在 iOS 上使用(因此不是 Android 特定的),我希望它也可以在 node.js 上使用。 我看过很多关于从 node.js发送推送通知的文章,但一直找不到关于在接收端使用 node.js 的任何内容。 回答1 我认为如果您必须向 ios 和 andriod 发送推送通知,那么 fcm 比 gcm 更好,然后使用它 router.post('/pushmessage', function (req, res) { var serverKey = '';//put server key here var fcm = new FCM(serverKey); var token = "";// put token here which user you have to send push notification var message = { to: token, collapse_key: 'your_collapse_key', notification: {title: 'hello', body: 'test'}, data: {my_key: 'my value'