0

任何人都可以帮助我了解Firebase的通知以学习好东西。对我来说,我认为更新令牌时不需要该方法。sendRegistrationToServer()

在所有情况下,通知都会发送到应用程序所在的所有设备。

方法的用处是sendRegistrationToServer()什么?

@Override
public void onTokenRefresh() {
  String refreshedToken = FirebaseInstanceId.getInstance().getToken();
  //I talked about this method. :)
  sendRegistrationToServer(refreshedToken);
}

private void sendRegistrationToServer(String token) {
  // Add custom implementation, as needed.
}
4

2 回答 2

4

令牌用作识别您的设备的一种方式。在使用 FCM 的简单 android 应用程序中(如教程和 firebase-chat 中),从您的代码中猜测(如果我错了,请纠正我),我们不需要将令牌发送到服务器,因为我们没有实现我们的服务器发送消息。我们直接与 google FCM 服务器对话。

当我们实现自己的服务器来发送通知消息时,我们需要非常自信地知道我们的服务器与有效设备“对话”。因此它使用从设备生成的令牌作为标识符。

服务器将带有您的令牌的通知发送到 FCM 服务器(即 Google 服务器),然后 FCM 服务器将处理发送过程。

所以你只需要sendRegistrationToServer(refreshedToken);在你想授权你的应用程序从你的服务器接收通知时进行构造。


让我们用CodePath Google Cloud Messaging 教程来解释一下:

在 Android 上支持推送通知的大部分繁重工作都是由 Google 支持的连接服务器完成的。这些 Google 服务器为从您的服务器发送的消息提供 API,并将这些消息中继到任何授权接收它们的 Android/iOS 设备。

具有 Google Play 服务的 Android 设备将已经提供 FCM 客户端支持。要接收推送通知,应用程序必须首先通过向 Google 服务器注册来获取令牌:

令牌

然后必须将此令牌传递给您的服务器,以便它可以用于发送后续推送通知:

登记

假设您的应用已注册侦听基于 FCM 的消息,则可以接收推送通知:

在此处输入图像描述

换句话说,为了实现 FCM,您的应用将需要 Google 服务器和您自己的服务器。当您的应用从 Google 获取令牌时,它需要将此令牌转发到您的服务器。此令牌应由服务器持久保存,以便可用于对 Google 服务器进行 API 调用。使用这种方法,您的服务器和 Android 设备不需要创建持久连接,排队和中继消息的责任全部由 Google 的服务器处理。

于 2016-07-23T00:09:59.317 回答
1

通知将发送到由令牌标识的设备,因此如果您的令牌已更新并且您没有使用新令牌更新您的服务器,那么当您的服务器使用旧令牌时,您的通知将无处可去。因此,每次刷新令牌时都应该更新服务器。

于 2016-07-22T23:14:24.937 回答