我必须说实话,我根本不明白如何指定我正在与之交谈的数据库。 FireStore是否被视为一个ginourmous数据库,我的所有应用程序的文档和集合并存?
我是否必须为集合提供应用程序特定名称...说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/,两个不同的存储库,一个后端和一个应用程序......应用程序如何知道你将要编写哪些quintillion后端函数来订阅?
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);
});
答案 0 :(得分:3)
每当您在firebase中创建项目时,您需要下载名为 google-services.json 的文件。此文件类似于this。
{
"project_info": {
"project_id": "mockproject-1234",
"project_number": "123456789000",
"name": "FirebaseQuickstarts",
"firebase_url": "https://mockproject-1234.firebaseio.com"
},
还有更多。它指定了您正在处理的项目。如果您使用firebase处理后端,同样适用,您需要使用一个特殊的配置文件,这将告诉您的本地项目它将使用哪个firebase项目。
每个firebase项目都有自己的数据库,cloud firestore或realtime,因此您当时只能更改一个数据库,即与该小文件/项目相关联的数据库。
通知和firebase中包含的所有其他内容相同。所有这些都仅限于您的项目,该项目由 google-services.json 文件指定。
当您上传云功能时,您将其上传到特定项目,这将使它们与该项目的设备一起工作,通常该项目的设备具有与此类项目相关联的google-services.json文件。
答案 1 :(得分:1)
.sendToDevice如何不向宇宙中的所有设备发送,而只是那些专门用于应用程序的设备...再次设置在不同的存储库中...没有配置,没有指向那个。这发生在哪里?
每个Firebase客户端SDK都可让您在设备上创建注册令牌,例如智能手机上的应用。在设备上创建该令牌后,您需要将其保存在Firestore或实时数据库中的文档中。
Android上的设备注册令牌: https://firebase.google.com/docs/cloud-messaging/android/client#sample-register
现在,您可以使用此令牌在Firebase功能中通过Firebase Cloud Messaging发送消息。
发送到Firebase的各个设备文档: https://firebase.google.com/docs/cloud-messaging/admin/send-messages#send_to_individual_devices