您什么时候需要用于 Firebase 云消息传递的应用服务器?
When do you need an app server for Firebase Cloud Messaging?
我不熟悉在 https://firebase.google.com/docs/cloud-messaging/server 为 Android 应用程序使用 FCM 通知。我正在阅读它,发现在关于 FCM 服务器页面要求中,它说了以下内容:
An app server that you must implement in your environment. This app
server sends data to a client app via the chosen FCM connection
server, using appropriate XMPP or HTTP protocol
但是,我对此感到非常困惑。当我阅读更多文章时,我看到有一个 API 看起来像这样:
POST http://fcm.googleapis.com/fcm/send
如果我使用类似 OkHttpClient
的方法调用此 API 并像这样构建我的请求,(前提是我有身份验证 headers 和 POST body包括)
private void sendRegistrationToServer(String token) {
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder().add(“Body", "").build();
//Assuming I have authentication and body put in
Request request = new Request.Builder().url("http://fcm.googleapis.com/fcm/send”).post(body).build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
理论上,我是否能够向该设备发送包含我想要的任何信息的通知?我可以通过以下class接收消息:
public class NotificationService extends FirebaseMessagingService {
...
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// TODO(developer): Handle FCM messages here.
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
}
我确信我的理解在某些地方是不正确的,因为文档确实说我们需要一个应用程序服务器,但如果有人可以指出我在哪里误解了如何实现 FCM 通知,那就太好了。如果有人可以举例说明我们何时何地需要应用程序服务器,或者它应该如何实际实施,我们也将不胜感激。谢谢!
当文档说您需要一个应用程序服务器时,主要是因为您需要一个应用程序来存储您要向其发送通知的设备的令牌,并且如果您的任何客户端,该应用程序应该更新令牌设备更改其令牌。但是,您可以使用 OkHttpClient
向 FCM 服务发送请求,因此如果您拥有这些设备的令牌 ID,则可以向其他设备发送通知。这取决于您想做什么,也取决于您希望如何管理通知。
如果您想了解如何在 java 中实现服务器应用程序的示例,这里有一个很好的示例 that was posted or here is another with an implementation on PHP. If you want an example on how to implement the client application and how to test it from the firebase console here is another good example。
不需要做任何额外的工作,只需按照以下link:
https://github.com/firebase/quickstart-android/tree/master/messaging
如果你使用XMPP协议。您应该实现一个连接服务器来管理与 FCM 的连接以处理上游和下游消息。
这是一个示例 java 项目,用于展示 Firebase 云消息传递 (FCM) XMPP 连接服务器。这个项目是一个非常简单的独立服务器,我作为一个更大项目的基础开发的。它是我们必须在我们的环境中实现的应用程序服务器。此服务器使用 XMPP 协议通过 FCM CCS 服务器向客户端应用程序发送数据。
https://github.com/carlosCharz/fcmxmppserver
我还在 youtube 上制作了一个视频,解释了它的作用。
https://www.youtube.com/watch?v=PA91bVq5sHw
希望你觉得有用。
我不熟悉在 https://firebase.google.com/docs/cloud-messaging/server 为 Android 应用程序使用 FCM 通知。我正在阅读它,发现在关于 FCM 服务器页面要求中,它说了以下内容:
An app server that you must implement in your environment. This app server sends data to a client app via the chosen FCM connection server, using appropriate XMPP or HTTP protocol
但是,我对此感到非常困惑。当我阅读更多文章时,我看到有一个 API 看起来像这样:
POST http://fcm.googleapis.com/fcm/send
如果我使用类似 OkHttpClient
的方法调用此 API 并像这样构建我的请求,(前提是我有身份验证 headers 和 POST body包括)
private void sendRegistrationToServer(String token) {
OkHttpClient client = new OkHttpClient();
RequestBody body = new FormBody.Builder().add(“Body", "").build();
//Assuming I have authentication and body put in
Request request = new Request.Builder().url("http://fcm.googleapis.com/fcm/send”).post(body).build();
try {
client.newCall(request).execute();
} catch (IOException e) {
e.printStackTrace();
}
}
理论上,我是否能够向该设备发送包含我想要的任何信息的通知?我可以通过以下class接收消息:
public class NotificationService extends FirebaseMessagingService {
...
// [START receive_message]
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
// TODO(developer): Handle FCM messages here.
Log.d(TAG, "From: " + remoteMessage.getFrom());
// Check if message contains a data payload.
if (remoteMessage.getData().size() > 0) {
Log.d(TAG, "Message data payload: " + remoteMessage.getData());
}
// Check if message contains a notification payload.
if (remoteMessage.getNotification() != null) {
Log.d(TAG, "Message Notification Body: " + remoteMessage.getNotification().getBody());
}
}
我确信我的理解在某些地方是不正确的,因为文档确实说我们需要一个应用程序服务器,但如果有人可以指出我在哪里误解了如何实现 FCM 通知,那就太好了。如果有人可以举例说明我们何时何地需要应用程序服务器,或者它应该如何实际实施,我们也将不胜感激。谢谢!
当文档说您需要一个应用程序服务器时,主要是因为您需要一个应用程序来存储您要向其发送通知的设备的令牌,并且如果您的任何客户端,该应用程序应该更新令牌设备更改其令牌。但是,您可以使用 OkHttpClient
向 FCM 服务发送请求,因此如果您拥有这些设备的令牌 ID,则可以向其他设备发送通知。这取决于您想做什么,也取决于您希望如何管理通知。
如果您想了解如何在 java 中实现服务器应用程序的示例,这里有一个很好的示例
不需要做任何额外的工作,只需按照以下link:
https://github.com/firebase/quickstart-android/tree/master/messaging
如果你使用XMPP协议。您应该实现一个连接服务器来管理与 FCM 的连接以处理上游和下游消息。
这是一个示例 java 项目,用于展示 Firebase 云消息传递 (FCM) XMPP 连接服务器。这个项目是一个非常简单的独立服务器,我作为一个更大项目的基础开发的。它是我们必须在我们的环境中实现的应用程序服务器。此服务器使用 XMPP 协议通过 FCM CCS 服务器向客户端应用程序发送数据。
https://github.com/carlosCharz/fcmxmppserver
我还在 youtube 上制作了一个视频,解释了它的作用。
https://www.youtube.com/watch?v=PA91bVq5sHw
希望你觉得有用。