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

时间:2016-09-22 18:30:49

标签: android google-app-engine firebase google-cloud-endpoints

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

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

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

这就是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 个答案:

答案 0 :(得分:5)

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