Firebase Admin 6.2.0升级问题:服务器无法访问实时数据库

时间:2018-07-05 08:12:58

标签: firebase firebase-realtime-database firebase-admin google-cloud-endpoints-v2

我最近将Google Cloud Endpoints服务器从Firebase Admin 4.1.2升级到了6.2.0。但是,升级后,服务器似乎无法以升级前的方式访问我的Firebase Realtime数据库。

除了我在其中指定Firebase Admin 6.2.0而不是4.1.2的Gradle文件之外,我唯一更改的代码位于以下初始化块中:

static {

    FirebaseOptions options = null;
    FileInputStream serviceAccount =
            null;
    try {
        serviceAccount = new FileInputStream(new File("WEB-INF/path_to_file.json"));
        options = new FirebaseOptions.Builder()
                //.setCredential(FirebaseCredentials.fromCertificate(serviceAccount)) OLD VERSION
                .setCredentials(GoogleCredentials.fromStream(serviceAccount)) // NEW VERSION
                .setDatabaseUrl(FIREBASE_NAME)
                .build();
        FirebaseApp.initializeApp(options);
    } catch (Exception e) {
        Log.warning(e.getMessage());
        e.printStackTrace();
    }
}

此处唯一更改的行是setCredentials()行。

我当前的假设是该问题是某种身份验证问题。但是假定json文件中的服务帐户密钥不会有任何问题,否则旧版本的服务器也会遇到相同的问题。有人遇到过这种问题吗?关于问题根源的任何理论?

更新:我尝试使用初始化块,看看如果我注释掉setCredentials()行,或者给错误的FileInputStream路径,或者将错误的URL传递给我,会发生什么。 setDatabaseUrl()。在所有这些情况下,我都会记录某种错误,表明初始化失败。但是,使用上面的代码,我不会记录任何错误。因此,问题仍然是一个谜。

我用来尝试访问实时数据库的测试代码非常简单:

    final FirebaseDatabase database = FirebaseDatabase.getInstance();
    final DatabaseReference ref = database.getReferenceFromUrl(FIREBASE_NAME);

    Map<String, Object> testMap = new HashMap<String, Object>();
    testMap.put("test", "test");

    ref.child("server_test").updateChildrenAsync(testMap);

但是什么都没写。

1 个答案:

答案 0 :(得分:2)

通过消除过程,我最终设法将问题的源头一直跟踪到我的appengine-web.xml文件中。该文件包含一行,需要更改该行才能使升级后的服务器正常工作:

之前:<url-stream-handler>urlfetch</url-stream-handler>

之后:<url-stream-handler>native</url-stream-handler>

如果有人遇到类似的问题,我希望这可能会有用。