Я недавно обновил свой сервер конечных точек Google Cloud с Firebase Admin 4.1.2 до 6.2.0. Однако после обновления сервер, похоже, не может получить доступ к моей базе данных Firebase Realtime так же, как до обновления.
Единственный код, который я изменил, кроме файла Gradle, где я указываю Firebase Admin 6.2.0 вместо 4.1.2, находится в этом блоке инициализации:
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);
Однако ничего не пишется.