如何从Google App Engine应用程序发送Firebase云消息

时间:2023-01-24 07:35:03

How can you send a Firebase Cloud Message from a Google App Engine/Cloud Endpoints App?

如何从Google App Engine / Cloud Endpoints App发送Firebase云消息?

Android Studio automatically generates the following code to send a Google Cloud Message. While you can use the same code to send a FCM, you can't set the "notification" or "priority" or anything like that which the new FCM uses.

Android Studio会自动生成以下代码以发送Google Cloud Message。虽然您可以使用相同的代码发送FCM,但您无法设置“通知”或“优先级”或类似新FCM使用的内容。

Is there a gradle import for this or an example of how to use Firebase Cloud Messaging inside of an App Engine app so you can easily do things like set the message, notification, priority, etc?

是否有Gradle导入此示例或如何在App Engine应用内部使用Firebase云消息传递示例,以便您可以轻松执行设置消息,通知,优先级等操作?

This is what Android Studio Cloud Endpoints auto generates for you currently:

这就是Android Studio Cloud Endpoints当前为您自动生成的内容:

// Gradle dependency:
compile 'com.google.gcm:gcm-server:1.0.0'

/**
     * Api Keys can be obtained from the google cloud console
     */
    private static final String API_KEY = System.getProperty("gcm.api.key");

    /**
     * Send to the first 10 devices (You can modify this to send to any number of devices or a specific device)
     *
     * @param message The message to send
     */
    public void sendMessage(@Named("message") String message) throws IOException {
        if (message == null || message.trim().length() == 0) {
            log.warning("Not sending message because it is empty");
            return;
        }
        // crop longer messages
        if (message.length() > 1000) {
            message = message.substring(0, 1000) + "[...]";
        }
        Sender sender = new Sender(API_KEY);

        Message msg = new Message.Builder().addData("message", message).build();
        List<RegistrationRecord> records = ofy().load().type(RegistrationRecord.class).limit(10).list();
        for (RegistrationRecord record : records) {
            Result result = sender.send(msg, record.getRegId(), 5);
            if (result.getMessageId() != null) {
                log.info("Message sent to " + record.getRegId());
                String canonicalRegId = result.getCanonicalRegistrationId();
                if (canonicalRegId != null) {
                    // if the regId changed, we have to update the datastore
                    log.info("Registration Id changed for " + record.getRegId() + " updating to " + canonicalRegId);
                    record.setRegId(canonicalRegId);
                    ofy().save().entity(record).now();
                }
            } else {
                String error = result.getErrorCodeName();
                if (error.equals(Constants.ERROR_NOT_REGISTERED)) {
                    log.warning("Registration Id " + record.getRegId() + " no longer registered with GCM, removing from datastore");
                    // if the device is no longer registered with Gcm, remove it from the datastore
                    ofy().delete().entity(record).now();
                } else {
                    log.warning("Error when sending message : " + error);
                }
            }
        }
    }

1 个解决方案

#1


5  

There's currently no Firebase client for sending messages from an app server. You should just send raw HTTP requests with JSON payloads from your endpoint using the protocol documented here. The server reference shows what parameters you can use, which includes priority.

目前没有用于从应用服务器发送消息的Firebase客户端。您应该使用此处记录的协议从端点发送带有JSON有效负载的原始HTTP请求。服务器参考显示可以使用的参数,包括优先级。

#1


5  

There's currently no Firebase client for sending messages from an app server. You should just send raw HTTP requests with JSON payloads from your endpoint using the protocol documented here. The server reference shows what parameters you can use, which includes priority.

目前没有用于从应用服务器发送消息的Firebase客户端。您应该使用此处记录的协议从端点发送带有JSON有效负载的原始HTTP请求。服务器参考显示可以使用的参数,包括优先级。