首页 > 解决方案 > 从 Google AppEngine 调用 FCM 后端服务时出错

问题描述

我正在使用 FCM(我们使用 GCM)设置我的第一个应用程序并按照教程进行操作。我有一个基于 GAE 标准的 Android 应用程序和一个基于 servlet 的应用程序。为了测试它,有一个向应用程序发送消息的 servlet。

这是几个小时前的工作,我可以调用 servlet 并在应用程序上收到测试消息,但现在我只在 FirebaseMessaging.getInstance().sendAsync(message).get() 方法中收到异常

com.google.firebase.messaging.FirebaseMessagingException: Error while calling FCM backend service

java.net.UnknownHostException: accounts.google.com

有时一个,有时另一个。

这是 GAE servlet 调用的方法。我检查了我使用的令牌是否正确,并且它是当前在 Android 设备中处于活动状态的令牌。

    final static String urlFCM = "https://fcm.googleapis.com/fcm/send";

private static void initFCM() {
    FileInputStream serviceAccount;
    try {
        serviceAccount = new FileInputStream("WEB-INF/Orchestram-e2e1ceeb2481.json");
        FirebaseOptions options = new FirebaseOptions.Builder()
                .setCredentials(GoogleCredentials.fromStream(serviceAccount))
                .setDatabaseUrl("https://orchestram-cerqana.firebaseio.com/")
                .build();
        FirebaseApp.initializeApp(options);
    } catch (Exception e) {
        e.printStackTrace();
    }
    /// TODO: 
}

public static String sendFCM(final JSONObject value, final String token, final boolean back) {

    initFCM(); 

    Message message = Message.builder()
            .putData("score", "850")
            .putData("time", "2:45")
            .setToken(token)
            .build();

    try {
        String response = FirebaseMessaging.getInstance().sendAsync(message).get();
    } catch (Exception e) {
        e.printStackTrace();
        return "ERROR";
    }
    return "HECHO";
}

标签: google-app-enginefirebase-cloud-messaging

解决方案


原来问题是GAE上这个特定项目的计费被禁用。一旦启用,它就会再次工作(而且我仍然低于免费套餐,所以没有增加实际成本)


推荐阅读