В этой codelab мы узнаем, как добавить Firebase в ваше веб-приложение и обслуживать контент из Firebase Cloud Firestore, а также заставить ваше веб-приложение работать в автономном режиме.

Необходимые инструменты

В этой кодовой лаборатории мы будем использовать Firebase. Перед тем, как мы начнем, убедитесь, что вы установили инструменты firebase, как в этом руководстве. Просто установите и оставьте там.

1. Создать проект Cloud Firestore

Откройте Firebase Console и создайте новый проект. В разделе База данных нажмите кнопку Начать для Cloud Firestore.

2. Выберите начальный режим для правил безопасности Cloud Firestore

Чтобы начать работу с Интернетом, выберите тестовый режим и нажмите Включить. Тестовый режим хорош для начала работы с мобильными и веб-клиентскими библиотеками, но позволяет любому читать и перезаписывать ваши данные. Обязательно узнайте, как обезопасить в облачном хранилище.

Начало работы с кодом

Страница index.html по умолчанию в нашей рабочей папке уже готова для настройки нашего проекта для использования Firebase. Внизу страницы мы добавили библиотеки Firebase и Cloud Firestore, которые необходимо настроить.

В нашем проекте также есть service-worker.js, который позволяет нам добавлять прогрессивные офлайн-функции веб-приложений. Узнай больше о сервис-воркере и его возможностях.

1. Добавление Firebase в наше веб-приложение

Зайдите в свою консоль firebase и выберите свой проект. Щелкните значок Параметры в верхнем левом углу рядом с Обзор проекта и выберите Параметры проекта. Прокрутите представление вниз и нажмите Добавить Firebase на значок веб-приложения. Не закрывайте вкладку.

  • Убедитесь, что вы находитесь в рабочей папке. Откройте папку с приложением. Здесь у нас есть main.css и faqbeta.js, которые стилизуют наше веб-приложение и пустые файлы javascript; app.js, firestores.js и data.js. Мы собираемся добавить к ним код.
  • Откройте firestores.js и скопируйте в него фрагмент кода ниже. Замените значения данных firebase значениями на вкладке консоли firebase, которую вы оставили открытой выше.
// Initialize Firebase
let config = {
    databaseURL: "https://databaseName.firebaseio.com",
    projectId: "projectId",
};

firebase.initializeApp(config);
let firestore = firebase.firestore();
console.log("Cloud Firestores Loaded");

2. Включить офлайн-данные

Эта функция кэширует копию данных Cloud Firestore, которые ваше приложение активно использует, поэтому ваше приложение может получить доступ к данным, когда устройство находится в автономном режиме. Приведенный ниже фрагмент кода делает это за нас. Скопируйте и добавьте его под кодом выше в файле firestore.js.

// Enable offline capabilities
firebase.firestore().enablePersistence()
    .then(function() {
        // Initialize Cloud Firestore through firebase
        var db = firebase.firestore();
    })
    .catch(function(err) {
        if (err.code == 'failed-precondition') {
            // Multiple tabs open, persistence can only be enabled in one tab at a a time.

        } else if (err.code == 'unimplemented') {
            // The current browser does not support all of the
            // features required to enable persistence
            // ...
        }
    });

3. Прочитать данные пожарного склада из базы данных в коллекции встреч

Приведенный ниже код позволяет нам читать данные firestore из нашей базы данных в созданной коллекции собраний; Добавьте его под кодом выше

// Read firestore data from database in the meetups collection
db.collection("meetups").get().then((querySnapshot) => {
    querySnapshot.forEach((doc) => {
        console.log(`${doc.id} =>`, doc.data());
        const meetups = doc.data();
        next_title.innerText = meetups.next_title;
        next_desc.innerText = meetups.next_desc;
        next_rsvp_url.href = meetups.next_rsvp_url;
        recent_title.innerText = meetups.recent_title;
        recent_desc.innerText = meetups.recent_desc;
        recent_rsvp_url.href = meetups.recent_rsvp_url;
    });
});

Объяснение: Например, код next_title.innerText получает значение заголовка следующей встречи и передает его в наш data.js, который затем отображается в нашем веб-приложении в элементе абзаца; т.е.

<p class="faqbeta_accordion" id="next_title">
    <!-- load next title from cloud 
    firestore --> loading...
    </p>

Обновление поля отметки времени значением из кода сервера позволяет записывать в базу данных, когда мы последний раз обновляли всю нашу коллекцию;

4. Создайте документ «встречи в нашей базе данных »

Cloud Firestore хранит данные в документах, которые хранятся в коллекциях. Cloud Firestore неявно создает коллекции и документы при первом добавлении данных в документ. В папке приложения откройте файл data.js и скопируйте в него фрагмент кода ниже.

// Create meetups document
var docRef = db.collection("meetups").doc("categ");
docRef.set({
        next_title: "pwa dev summit 2019",
        next_desc: "Meet awesome web developers and designers for a two-day developer summit.",
        next_rsvp_url: "https://pwafire.org/developer/codelabs/cloud-firestore-for-web/",
        recent_title: "pwa dev summit 2019",
        recent_desc: "Meet awesome web developers and designers for a two-day developer summit.",
        recent_rsvp_url: "https://pwafire.org/developer/codelabs/cloud-firestore-for-web/",
    })

    .then(function () {
        console.log("Document successfully created!");
    });

5. Отображать данные в нашем веб-приложении

В папке приложения снова откройте app.js и добавьте к нему фрагмент кода ниже.

// Display data into our web app
const next_title=document.querySelector("#next_title");
const next_desc=document.querySelector("#next_desc");
const recent_title=document.querySelector("#recent_title");
const recent_desc=document.querySelector("#recent_desc");

Объяснение: Код next_title.innerText на этапе 3 для получает значение заголовка следующей встречи и передает его в наш data.js, который затем отображается в нашем веб-приложении в элементе абзаца; т.е. наш элемент абзаца имеет свой идентификатор как next_title, и мы используем этот идентификатор для отображения данных в нашем элементе абзаца.

<p class="faqbeta_accordion" id="next_title">
    <!-- load next title from cloud 
    firestore --> loading...
    </p>

Хостинг Firebase

Мы сделали! Давайте теперь развернем наше веб-приложение облачного хранилища данных на firebase! Следуйте этому руководству здесь, чтобы развернуть наше веб-приложение. Перейдите в автономный режим и обновите свое веб-приложение. Данные веб-приложения по-прежнему доступны в автономном режиме.

Если вы используете браузер Chrome, откройте Инструменты разработчика и, находясь на панели приложений, выберите Service Worker и включите автономный режим. Обновите свое веб-приложение. Празднуйте! Вы уже не ботаник?

"Что дальше?"

У вас есть ошибка? Сообщите об этом здесь для поддержки. Вы хотите внести свой вклад? Создайте свою функцию здесь.