Могу ли я создать API отдыха для Unity с облачными функциями Firebase и Firestore? - PullRequest
0 голосов
/ 11 апреля 2020

Я хочу сделать остальные API для моей базы данных Firestore для моей игры Unity. Я не хочу подключаться напрямую к базе данных, потому что игровой комплекс logi c, я хочу, чтобы приложение logi c контролировалось на сервере, чтобы избежать вмешательства со стороны клиента.

Итак, я хочу каждую запись и каждый запрос на чтение через облачные функции! Это нормально?

Функция записи в базу данных Firestore с облачными функциями очень проста:

Облачная функция без сервера nodejs index. js:

exports.helloWorld = functions.https.onCall((data, context) => {
   let data = {
       name: 'Los Angeless',
       state: 'CA',
       country: 'USA'
     };

     // Add a new document in collection "cities" with ID 'LA'
     let setDoc = db.collection('xy').doc(data.text).set(data);

     return { text : "ok" }  });

Unity c#:

   public void writeexample()
     {


         var data = new Dictionary<string, object>();
         data["text"] = “example”;
         data[“xy”] = “example”;

         FirebaseFunctions.DefaultInstance.GetHttpsCallable(“helloWorld”)
 .CallAsync(data).ContinueWith((task) =>
 {
 if (task.IsFaulted)
 {
           // Handle the error...
 }
 else if (task.IsCompleted)
 {

         // DataSnapshot snapshot = task.Result;

         IDictionary snapshot = (IDictionary)task.Result.Data;

         print(“Result:” + snapshot["text"]);

     }
 });

 }

Работает хорошо. Но как читать базу данных? (Не в режиме реального времени, только один простой запрос.)

Я прочитал это: Вызов функций из вашего приложения - документы по облачным функциям

И это: Получить данные один раз - Firestore docs

Но я не вижу, как получить данные с помощью облачных функций. Я не хочу триггер, я хотел бы использовать облачные функции в качестве остальных API. Таким образом, каждое чтение и запись в базу данных Firestore через облачные функции. Разве это не возможно? Если возможно, то как?

Спасибо!

1 Ответ

0 голосов
/ 11 апреля 2020

Да, есть возможность создать конечную точку REST с Cloud Functions, которая возвращает данные из Firestore. Но я бы подумал сделать из нее функцию, вызываемую по HTTP, точно так же, как ваша текущая функция helloWorld уже есть. Функции, вызываемые по протоколу HTTP, представляют собой тонкую оболочку вокруг обычных функций REST / HTTP (S), что значительно упрощает их вызов из кода вашего приложения.

Например, для чтения поля name из документов в коллекция, в которую пишет ваш helloWorld, вы будете делать что-то подобное в облачных функциях:

exports.getNames = functions.https.onCall(async (data, context) => {
    let querySnapshot = await db.collection('xy').orderBy("name").limit(3).get();
    if (!querySnapshot.empty) {
      let names = querySnapshot.documents.map((doc) => doc.data().name);
      return names;  
    } 
    else {
      return [];
    }
});

Затем вы будете вызывать его из тех же конструкций, которые вы теперь имеете из Unity:

FirebaseFunctions.DefaultInstance.GetHttpsCallable(“getNames”)...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...