Я должен быть честным, я совсем не понимаю, как указать, с какой базой данных я разговариваю.Должен ли FireStore считаться единственной базой данных, где документы и коллекции всех моих приложений живут бок о бок?
Нужно ли давать приложениям определенные имена для коллекций ... скажем, AwesomeAppUsers, ThatOtherAppUsers иAnotherAppUsers?Или что?Просто взаимно объединяйте пользователей в разделе "/ users"?
Я читаю документацию Firebase, и все, что я вижу, это строки кода, относящиеся к определенной коллекции или документу, но ни один из них не относится клюбые пространства имен или базы данных.
Там нет настройки, нет конфигурации для того, где она должна быть указана, вы просто входите с помощью firebase, а затем вы запускаете
firebase deploy --only functions
А потом магия.
Может кто-нибудь, пожалуйста, демаггифицировать это и объяснить, как приложение может взаимодействовать с конкретными функциями, когда нет настройки?
Хуже всего, когда я вижу это при написании приложениягиды.Как здесь http://resocoder.com/2018/05/25/firebase-firestore-chat-app-cloud-functions-fcm-ep-8-kotlin-android-tutorial/, два разных репозитория, серверная часть и приложение ... как приложение узнает, на какую из серверных функций квинтиллиона вы будете писать, чтобы подписаться?
return admin.messaging().sendToDevice(registrationTokens, payload).then( response => {
const stillRegisteredTokens = registrationTokens
response.results.forEach((result, index) => {
КакРазрешает ли .sendToDevice отправлять не на все устройства в юниверсе, а только на те, которые конкретно относятся к приложению ... которое снова настроено в другом хранилище ... никаких настроек, ничего на это не указывает.Где это происходит?
Как эта функция «знает» только об отправке сообщений в конкретные приложения Android, связанные с этим?
// The Cloud Functions for Firebase SDK to create Cloud Functions and setup triggers.
const functions = require('firebase-functions');
// The Firebase Admin SDK to access the Firebase Realtime Database.
const admin = require('firebase-admin');
admin.initializeApp();
// Take the text parameter passed to this HTTP endpoint and insert it into the
// Realtime Database under the path /messages/:pushId/original
exports.addMessage = functions.https.onRequest((req, res) => {
// Grab the text parameter.
const original = req.query.text;
// Push the new message into the Realtime Database using the Firebase Admin SDK.
return admin.database().ref('/messages').push({original: original}).then((snapshot) => {
// Redirect with 303 SEE OTHER to the URL of the pushed object in the Firebase console.
return res.redirect(303, snapshot.ref.toString());
});
});
// Listens for new messages added to /messages/:pushId/original and creates an
// uppercase version of the message to /messages/:pushId/uppercase
exports.makeUppercase = functions.database.ref('/messages/{pushId}/original')
.onCreate((snapshot, context) => {
// Grab the current value of what was written to the Realtime Database.
const original = snapshot.val();
console.log('Uppercasing', context.params.pushId, original);
const uppercase = original.toUpperCase();
// You must return a Promise when performing asynchronous tasks inside a Functions such as
// writing to the Firebase Realtime Database.
// Setting an "uppercase" sibling in the Realtime Database returns a Promise.
return snapshot.ref.parent.child('uppercase').set(uppercase);
});