【问题标题】:Firebase Admin 6.2.0 upgrade issue: server can't access Realtime DatabaseFirebase Admin 6.2.0 升级问题:服务器无法访问实时数据库
【发布时间】:2018-07-06 20:46:06
【问题描述】:

我最近将我的 Google Cloud Endpoints 服务器从 Firebase Admin 4.1.2 升级到了 6.2.0。但是,升级后,服务器似乎无法像升级前那样访问我的 Firebase 实时数据库。

除了我指定 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文件中的service account key不能有什么问题,不然老版本的服务器也会出现同样的问题。有没有人遇到过这种问题?关于问题根源的任何理论?

更新:我尝试过使用初始化块,看看如果我注释掉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);

然而,什么都没有写出来。

【问题讨论】:

  • 据我所知,initializeApp 方法不再接受参数。升级时,您是否按照他们的指南进行了重大更改?
  • 感谢您的评论,但FirebaseApp.initializeApp(options) 似乎是正确的,如此处的代码 sn-p 所示:(firebase.google.com/docs/admin/setup)
  • 哦,我以为您使用的是 1.0 版本的 SDK。从这里得到我的信息:(firebase.google.com/docs/functions/beta-v1-diff)
  • 澄清一下:我的问题涉及用 Java 代码编写的 Google Cloud Endpoints 服务器;这不是 Firebase Cloud Functions JS 代码。

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


【解决方案1】:

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

之前:&lt;url-stream-handler&gt;urlfetch&lt;/url-stream-handler&gt;

之后:&lt;url-stream-handler&gt;native&lt;/url-stream-handler&gt;

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

【讨论】:

    猜你喜欢
    • 2016-05-04
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 2020-01-11
    • 2017-06-26
    • 2021-03-20
    • 2013-05-12
    相关资源
    最近更新 更多