我一直在尝试阅读有关如何从一个设备发送消息到另一个的官方文档和指南。我在实时数据库中保存了两个设备的注册令牌,因此我有另一个设备的注册令牌。我试过以下方法来传递信息
RemoteMessage message = new RemoteMessage.Builder(getRegistrationToken())
.setMessageId(incrementIdAndGet())
.addData("message", "Hello")
.build();
FirebaseMessaging.getInstance().send(message);
然而,这是行不通的。另一个设备没有收到任何消息。我甚至不确定是否可以使用上行消息发送来进行设备到设备的通信。
ps:我只想知道使用fcm是否可以进行设备到设备的消息传递?如果是,那么我使用的代码是否有问题?如果是,那么正确的方法是什么。
更新:
我的问题是,不使用firebase can以外的任何单独服务器的设备到设备的消息传递是否可行,如果可行,那么如何实现,因为没有相关文档。我不明白这里还有什么要解释的?无论如何,我得到了答案,并将更新它作为一个答案,一旦问题重新开放。
5条答案
按热度按时间guykilcj1#
firebase有两个功能可以向设备发送消息:
firebase控制台中的通知面板允许您向用户订阅的特定设备、用户组或主题发送通知。
通过调用firebase云消息传递api,您可以使用您喜欢的任何目标策略发送消息。调用fcm api需要访问您的服务器密钥,您不应该在客户端设备上公开该密钥。这就是为什么你应该总是在应用服务器上运行这样的代码。
firebase文档直观地显示了这一点:
不支持通过firebase云消息传递将消息从一个设备直接发送到另一个设备。
更新:我写了一篇博客文章,详细介绍了如何使用firebase数据库、云消息和node.js在android设备之间发送通知。
更新2:您现在还可以使用firebase的云功能安全地发送消息,而无需启动服务器。请参阅此示例用例以开始。
esbemjvw2#
我迟到了,但是上面的解决方案帮助我写下了这个简单的答案,你可以直接把你的信息从android应用程序发送到android设备,这是我做的简单的实现,它对我来说非常有用。
编译android截击库
只需复制粘贴这个简单函数;)你的生活就会变得一帆风顺,就像黄油刀一样d
注意,如果您想向topics发送消息,那么可以将参数instanceidtoken更改为/topics/topicname之类的值。对于组,实现是相同的,但您只需要注意参数。检查firebase文档,您可以传递这些参数。如果您遇到任何问题,请告诉我。
pdsfdshx3#
我还在我的原型中使用了直接的设备到设备gcm消息传递。它一直运行得很好。我们没有服务器。我们使用短信/文本交换gcm注册id,然后使用gcm进行通信。我把gcm处理的相关代码放在这里
*发送gcm消息
*接收gcm消息
wecizke34#
警告:有一个非常重要的原因,为什么我们在任何地方都不提及这种方法。这将在每个客户端设备上放置的apk中公开服务器密钥。它可以(因此将)采取从那里,并可能导致滥用您的项目。我强烈建议不要采用这种方法,除非应用程序只能放在自己的设备上弗兰克范帕夫伦
弗兰克的回答是正确的
Firebase
本机不支持设备到设备的消息传递。不过,这里面有一个漏洞。firebase服务器不确定您是从实际服务器发送请求,还是从设备发送请求。所以你要做的就是发送一个
Post Request
至Firebase
的消息服务器以及服务器密钥。请记住,服务器密钥不应该在设备上,但是如果您希望使用firebase消息传递进行设备到设备的消息传递,则没有其他选项。我使用的是okhttp,而不是调用restapi的默认方式。代码是这样的-
我希望firebase将来会有更好的解决方案。但在那之前,我认为这是唯一的办法。另一种方式是发送主题消息或组消息。但这不在问题的范围之内。
更新:
jsonarray的定义如下-
regids是注册id的字符串数组,您要将此消息发送到。请记住,注册ID必须始终位于一个数组中,即使您希望它发送给单个收件人。
ltqd579y5#
根据上更新的新文件
October 2, 2018
您必须按以下方式发送邮寄请求获取设备的注册令牌
FirebaseMessagingService
和覆盖onNewToken(String token)
有关更多信息,请参阅文档https://firebase.google.com/docs/cloud-messaging/android/device-group