Я забросил свой старый ноутбук, на котором много лет выполнялись мои cronjobs

Я занимаюсь разработкой инди-приложений для Android и iOS более 6 лет. Несмотря на то, что я штатный разработчик, не цифровой кочевник, я переезжал 6 раз и жил в 7 разных квартирах - в 3 разных городах и 2 разных странах — в течение этого периода времени. Было действительно трудно носить с собой мой старый сварливый ноутбук, следить за тем, чтобы он всегда был подключен к сети и имел доступ к стабильному интернет-соединению.

За последние 6 лет я разработал множество приложений:
 – без бэкендов, которые работают полностью в автономном режиме
 – с использованием сторонних API-интерфейсов, но без бэкэнда, поддерживаемого мной
 – иногда я был тем, кто разрабатывал бэкэнд и поддерживал его
- И большую часть времени я использовал Firebase в качестве серверной части

Как инди-разработчик, который создает бизнес-модель, разрабатывает приложение, отвечает на все электронные письма и запросы клиентов, занимается маркетингом; может быть трудно следить за происходящим.

Но одно можно сказать наверняка: вы хотите, чтобы ваше приложение продолжало работать без сбоев и других проблем, связанных с программным обеспечением. Таким образом, Firebase неплохо справляется со своей задачей.

Firebase работает как своего рода недоработанное серверное решение. После того, как вы воспользуетесь его возможностями, такими как база данных в реальном времени, облачные функции, удаленная конфигурация или облачное хранилище, вы сможете выполнить большинство требований к серверной части без необходимости поддерживать хост-компьютер с точки зрения безопасности, масштабируемости и отказоустойчивости.

Ценовая кампания через удаленную настройку

Я провожу ценовые кампании, чтобы привлечь внимание моих пользователей. В основном я устанавливаю 2 разных цены для каждого предмета покупки в приложении. Я решаю, покажу ли я дорогой или более дешевый в зависимости от конфигурации. Я использую Firebase Remote Config для запуска этой кампании без необходимости обновления приложения.

Я сохраняю свою конфигурацию в Firebase Remote Config, как показано ниже:

{
«discount_start_date»: «2021.10.23 00:00:00»,
«discount_end_date»: «2021.10.26 00:00:00»,
«discount_type»:»_discount_common»,
«discount_rate»: «0,74'
}

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

И я использую discount_type, чтобы определить тип и выбрать товары для покупок в приложении соответственно.

Ваша первая функция Firebase

После создания проекта в Firebase, настройки проекта на локальном компьютере и инициализации проекта с помощью инструментов командной строки вы получите структуру каталогов, как показано ниже:

your_project
 +- firebase.json  # Describes properties for your project
 |
 +- functions/     # Directory containing all your functions code
      +- package.json  # File describing your Cloud Functions code
      |
      +- index.js  # Main source file for your Cloud Functions code
      |
      +- node_modules/

Здесь index.js является отправной точкой. Там вы начнете писать свои функции.

const admin = require('firebase-admin');
admin.initializeApp();

Развертывание запланированной функции

В документации говорится:

Если вы хотите запланировать запуск функций в определенное время, используйте functions.pubsub.schedule().onRun()Этот удобный метод создает тему Pub/Sub и использует Cloud Scheduler для запуска событий в этой теме. , гарантируя, что ваша функция будет работать по желаемому расписанию.

В моем случае я вызываю свою функцию, чтобы установить значение Discount_end_date через 2 дня после даты выполнения функции. И я хочу запускать функцию каждые 47 часов.

exports.scheduledFunction = functions.pubsub.schedule(“every 47 hours”).onRun(() => { setupCampaignConfig(); return null;});

Моя запланированная функция вызывает setupCampaignConfig() каждые 47 часов.

1- Создайте новую конфигурацию: getUpdatedConfigTemplate()
2- Проверьте шаблон (необязательно, но я настоятельно рекомендую проверить): validateTemplate()
3 - Опубликовать новую конфигурацию: publishTemplate()

(Вы можете посетить суть, чтобы получить лучший опыт просмотра кода)

function setupCampaignConfig() {
    getUpdatedConfigTemplate().then((template) => {
        validateTemplate(template);
    });
}
async function getUpdatedConfigTemplate() {
    var config = admin.remoteConfig();
    const template = await config.getTemplate();
    var templateStr = JSON.stringify(template);
    let values = template["parameters"]["discount_info"]["defaultValue"];
values.value = "{"
        + "\"" + "discount_start_date" + "\":\"" + timeUtils.getDifferentDate(-1).toString() + "\","
        + "\"" + "discount_end_date" + "\":\"" + timeUtils.getDifferentDate(2).toString() + "\","
        + "\"" + "discount_type" + "\":\"" + "_discount_common" + "\","
        + "\"" + "discount_rate" + "\":\"" + "0.74" + "\""
        + "}"
    return template;
}
function validateTemplate(template: any) {
    admin.remoteConfig().validateTemplate(template)
        .then(function (validatedTemplate: any) {
            console.log("Template was valid and safe to use");
            publishTemplate(validatedTemplate);
        })
        .catch(function (err: any) {
            console.error("Template is invalid and cannot be published");
            console.error(err);
        });
}
function publishTemplate(template: any) {
    var config = admin.remoteConfig();
    config.publishTemplate(template)
        .then(function (updatedTemplate: any) {
            console.log("Template has been published");
            console.log("ETag from server: " + updatedTemplate.etag);
        })
        .catch(function (err: any) {
            console.error("Unable to publish template.");
            console.error(err);
        });
}

Когда вы будете готовы развернуть новую функцию, запустите команду на своем терминале:

firebase deploy --only functions

Теперь вы можете посетить панель управления Firebase и просмотреть свои функции:

Краткое содержание

Независимому разработчику может быть сложно следить за созданием бизнес-модели, разработкой приложения, ответами на все электронные письма и запросы от клиентов, созданием маркетинговых кампаний, помимо всего, что связано с разработкой. Важно использовать инструменты вокруг нас, чтобы продолжать делать большую работу.

Если вы не знаете, как написать код серверной части с точки зрения создания хороших веб-API, защиты ваших служб, защиты и обслуживания вашего хост-компьютера, вы можете использовать Firebase в качестве решения для серверной части.

Вы можете напрямую использовать Базу данных в реальном времени, Удаленную настройкуg и Облачное хранилище через мобильные SDK Firebase.

Вы можете избавиться от всех зависимостей Firebase в своем приложении, создав уровень абстракции с помощью Firebase Cloud Functions и вызывая свои функции через интерфейс REST. Кроме того, вы можете создавать cronjobs с помощью Firebase Cloud Functions.

Хлопайте, подписывайтесь и оставляйте свои комментарии ниже!

Вы также можете подписаться на меня в Twitter и Linkedin, чтобы узнать больше о росте, геймификации и советах и ​​рекомендациях для независимых разработчиков.