Как вы упомянули, поскольку изображения загружаются из консоли Firebase, приложение не может узнать, когда загружается новое изображение, и вычислить соответствующий URL-адрес.
Так что это нужно делать в бэкэнде, то есть на самой платформе Firebase. Облачные функции для Firebase специально созданы для этого, см.: https://firebase.google.com/docs/functions/
Облачные функции для Firebase позволяют автоматически запускать серверный код в ответ на события, вызванные функциями Firebase.
В вашем случае вы должны написать облачную функцию, которая будет запускаться при загрузке файла в облачное хранилище. Эта функция будет вычислять URL-адрес (через getSignedUrl()
a> метод) и сохраните его в базе данных Firebase, например. Пожарный магазин. Таким образом, ваше Android-приложение может запросить базу данных, чтобы получить список URL-адресов (и поместить их в ArrayList).
Облачная функция будет выглядеть следующим образом:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
//See Note below and https://stackoverflow.com/a/50138883/3371862
import * as serviceAccount from 'yourServiceAccount.json';
const adminConfig = JSON.parse(process.env.FIREBASE_CONFIG)
adminConfig.credential = admin.credential.cert(<any>serviceAccount)
admin.initializeApp(adminConfig);
const defaultStorage = admin.storage();
exports.saveSignedURL = functions.storage.object().onFinalize(object => {
const file = defaultStorage.bucket(object.bucket).file(object.name);
const options = {
action: 'read',
expires: '03-17-2025'
};
return file.getSignedUrl(options).then(results => {
const url = results[0];
return admin
.firestore()
.collection('images')
.add({ url: url });
});
});
Обратите внимание, что для использования метода getSignedUrl()
вам необходимо инициализировать Admin SDK с учетными данными для выделенной учетной записи службы, см. этот SO Q&A: https://stackoverflow.com/a/50138883/3371862
Наконец, если вы новичок в облачных функциях, вы можете ознакомиться с страницей этого документа и, в частности, в разделе «Дальнейшие шаги» внизу.
person
Renaud Tarnec
schedule
28.11.2018