java - 您什么时候需要用于 Firebase 云消息传递的应用服务器?

标签 java android rest firebase-cloud-messaging appserver

我不熟悉在 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 并像这样构建我的请求,(假设我有身份验证 header 和包含的 POST 正文)

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();
    }

}

理论上,我是否能够向该设备发送包含我想要的任何信息的通知?我可以通过以下类接收消息:

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 通知的地方,那就太好了。如果有人可以举例说明我们何时何地需要应用程序服务器,或者它应该如何实际实现,我们也将不胜感激。谢谢!

最佳答案

当文档说您需要一个应用程序服务器时,主要是因为您需要一个应用程序来存储您要向其发送通知的设备的 token ,并且如果您的任何客户端设备发生变化,此应用程序应更新 token 它的标志。但是,您可以使用 OkHttpClient 向 FCM 服务发送请求,因此如果您拥有这些设备的 token ID,则向其他设备发送通知。这取决于您想做什么,也取决于您希望如何管理通知。

如果你想要一个关于如何在 java 中实现服务器应用程序的例子,这里是一个很好的例子 example 1已发布或这里是另一个 post在 PHP 上实现。如果你想要一个关于如何实现客户端应用程序以及如何从 firebase 控制台测试它的例子,这里是另一个很好的 example .

关于java - 您什么时候需要用于 Firebase 云消息传递的应用服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39162034/

相关文章:

android - 布局内部的 LinearLayout 与父级不匹配

java - 点击 Galaxy Samsung S3 上的菜单按钮时应用停止

java - 名称 'File' 在库 'dart:html' 和 'dart:io' 中定义

java - 使用参数调用 RESTful webservice

Django - 使用 PostgreSQL 和 Elasticsearch 进行全文搜索

java - 为什么我们在java中将对象类型转换为类类型?

java - 没有使用重载方法?

java - 如何使 Weblogic 11gR2 (10.3.3) FIPS-140 兼容

java - 有与 system.out.println 相反的吗? (java)

python - 从 coinnest.co.kr 获取状态代码 102