Firebase云消息(FCM)通知不';无法在代理后的设备上工作。有没有别的办法解决这个问题?

Firebase云消息(FCM)通知不';无法在代理后的设备上工作。有没有别的办法解决这个问题?,firebase,firebase-cloud-messaging,Firebase,Firebase Cloud Messaging,我们的Android应用程序正在现场运行2000多台设备。这是一个公司应用程序,未发布在Google Play上,我们正在通过这些设备管理我们的运营。对我们来说最重要的一点是:我们所有的客户端Android设备都支持proxy。(我们已经对Firebase文档采取了所有措施,警告“如果您的组织有防火墙…”) 我们正在测试使FCM适应我们的应用程序以接收通知。我们使用HTTP协议,将Post请求发送到URL地址,因此我们的选择是下游HTTP消息(JSON),我们通过Postman和.Net桌面应用

我们的Android应用程序正在现场运行2000多台设备。这是一个公司应用程序,未发布在Google Play上,我们正在通过这些设备管理我们的运营。对我们来说最重要的一点是:我们所有的客户端Android设备都支持proxy。(我们已经对Firebase文档采取了所有措施,警告“如果您的组织有防火墙…”)

我们正在测试使FCM适应我们的应用程序以接收通知。我们使用HTTP协议,将Post请求发送到URL地址,因此我们的选择是下游HTTP消息(JSON),我们通过Postman和.Net桌面应用程序发送数据消息。当设备通过独立WiFi连接到互联网时,Firebase云消息通知将成功运行。当设备通过移动网络运营商SIM卡(无代理)连接到互联网时,它也能成功工作。但这些方法并不是我们的解决方案,因为我们所有的设备都在代理服务器后面工作


Firebase云消息通知是否在代理后的设备上不起作用?我发现了一些关于FCM和代理设备背后的坏消息,但我不确定。我们希望使用FCM通知,但是第三方附加应用对我们来说不是一个好的解决方案。因为我们在现场管理了太多的设备,而且还存在安全问题。是否有其他解决方案来解决有关代理的此问题?

如果您采取了
中所述的操作,如果您的组织有防火墙
然后设备应该能够接收消息。


请注意,这些操作必须在设备连接的网络中进行,而不是在发送通知的网络中进行。

我已收到Firebase支持团队关于此问题的答复。答案如下:

请注意,FCM目前不支持代理,但是我们 会注意到这一点,我们可以认为它向前发展。我 不能给你一个明确的时间表,请放心 反馈已得到确认。我们一直致力于提供 开发人员将获得更友好的体验,因此您的输入将大大减少 谢谢


我们已经花了一些时间和精力与我们的应用程序开发和网络团队讨论这个代理问题。请注意,FCM此时不支持代理。我希望他们将来能够支持代理,因为FCM有很多好处。

请注意,自2019年起,Firebase已经提供了一些代理支持,至少使用Java或Node.js,请参阅本文:

如果链接断开,这是Java配置的一个示例,所有的功劳都归Hiranya Jayathilaka所有,他编写了这个伟大的教程(非常感谢!)

补充:

我尝试过这个解决方案,并将HttpTransport only代理请求设置为“fcm.googleapis.com”,这在我的情况下是不够的,因为Firebase Sdk首先从“accounts.google.com”检索授权令牌

为了将请求代理到“accounts.google.com”,我还必须使用如下系统属性:

System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", String.valueOf(proxyPort));            
System.setProperty("com.google.api.client.should_use_proxy", "true");

你好,迭戈。谢谢你的回答。我们在设备连接的网络中采取了行动。Firebase文档讲述的是防火墙,但它并没有讲述任何关于代理的内容。我们的问题是代理。Ït在防火墙后面工作,而没有代理。代理背后的设备无法接收Firebase通知是真的吗?FCM需要能够通过直接连接(无代理)连接到端口443、5228、5229和5230上的Google服务器。如果这是不可能的,设备将无法接收通知。自您的回答以来已经过了一段时间,因此我询问了支持人员。他们确认了这个问题,甚至在回答中给了我这个帖子,所以遗憾的是“setHttpTransport”仍然不可能只存在于AdminSDK中,但我在这里看到它在android中不受支持
System.setProperty("https.proxyHost", proxyHost);
System.setProperty("https.proxyPort", String.valueOf(proxyPort));            
System.setProperty("com.google.api.client.should_use_proxy", "true");