如果我没有任何数据要存储,在使用 GCM 时是否需要后端服务器作为中介?

Do I need a backend server as a mediator when using GCM, if I don't have any data to store?

看来这是目前需要的:

客户端 1 -> 后端 -> GCM -> 客户端 2。

但我不确定后端服务器在我不想存储任何数据的情况下会做什么。我只想通过 GCM 以这种方式进行客户端与客户端的交互:

客户端 1 -> GCM -> 客户端 2。

这可能吗?

GCM 旨在将通知从后端发送到设备,反之亦然。 https://developers.google.com/cloud-messaging/

因此以下选项可行:

客户端 1 -> 后端 -> GCM -> 客户端 2。(HTTP)

客户端 1 -> GCM -> 后端 -> GCM -> 客户端 2。(XMPP)

在 GCM 中,发件人(通常是后端)需要有一个 API 密钥,您可以从开发人员控制台获得该密钥。此 API 密钥用于发送到 GCM 服务器的每个 HTTP 请求,作为发送消息的授权形式。

客户需要使用发件人 ID 进行注册,发件人 ID 来自 Developers Console 上您获得 API 密钥的同一个项目。这导致客户端发送到 server/sender 的注册令牌。此令牌用于从其他客户端设备中识别客户端设备。

demo app 实际上有一个与您想要的有点相似的设置:它既充当发送者又充当接收者。这很容易工作,因为我们知道只有一个发送者和一个接收者。当有多个接收器时,困难就开始了。发件人需要跟踪他们所有的注册令牌。您需要将每个新注册者的注册令牌通知给一个发件人(您需要在 GCM 之外执行此发送 - 通常通过对服务器的 POST 调用,这实际上无法在设备上完成)。如果发件人必须跟踪一千个令牌,则需要自行保存。

请注意,上述情况仅适用于 "single sender-multiple receivers/clients" 设置。如果您需要不止一台设备才能发送,您还需要让另一台设备跟踪其接收者的注册令牌。这大大增加了复杂性。

至少,您确实有数据要存储:将从发件人接收消息的设备的注册令牌。但是,发送方也需要跟踪响应(用于调试和监控目的)。说了这么多,虽然从技术上讲您可以让您的客户端设备充当 server/backend,但它会给设备带来很多工作并且难以维护。我强烈建议至少设置一个非常简单的服务器。

希望对您有所帮助!