Эй, ребята! 👋🏽 В этой статье я объясню одну из методов, которые вы можете использовать для предотвращения плохих UX, когда вы хотите включить или отключить сервисы приложений или его функции. У каждого бизнеса есть собственный набор переменных, которые могут привести к неопределенной ситуации, и это будет очень полезно в те времена.
Например, Там может быть условие климата, такое как дождь/туман, где должны быть приостановлены услуги приложения, или может быть серьезной ошибкой, которая была замечена, и им требуется некоторое время, чтобы исправить, или правительство, возможно, выпустило правила для предприятий только в определенные времена дня.
Ваше приложение не должно попасть в какую-либо неопределенную ситуацию ( Я молюсь 🙏 ) Но если это произойдет, приложение должно быть в состоянии сделать паузу и изящно возобновить.
Что требуется?
Во время незапланированных ситуаций в приложении переключатель, подобный возможному возможности, которое при отключении должно сделать приложение недоступно для использования и при включении, должно уведомить затронутых пользователей (через push-уведомление), что приложение доступно для использования снова. Все это должно произойти только с включением/выключением переключателя и не требуя поворота каких-либо других колес. Потому что его 2019 и простые вещи должны быть чрезвычайно простыми. Пример ситуации будет: когда есть проблема с обработкой платежей, вы можете выключить коммутатор и помешать пользователю выполнять платежи. Когда выпуск платежей будет разрешен, переключатель может быть включен, и все пользователи будут отправлены уведомления для всех пользователей.
Снимание 2019 не было опечатки, я просто хочу исключить 2020 от моего календаря 😒
Ограничения внедрения
Постановка на службах BackeND API может не помочь решить проблему, потому что они склонны к провалу, а иногда представляют собой причину неопределенной ситуации самой ситуации. Атака DDOS или плохое развертывание или потеря образа Docker может задержать бэкэнд API для спасения. Инструменты вне технологического стека должны быть выбраны, чтобы убедиться, что мы избегаем одной точки отказа.
Вот что нужно
- Переключатель, как конфигурация, которая может быть включена/выключено
- Одноразовая база данных пользователей, которые пострадали во время простоя приложения
- Перекрестная платформа Push-уведомления
Ага! Я поглотил это! Но нет из инструмента полки, который может помочь нам реализовать эти функциональные возможности. Кроме Firebase предлагает набор инструментов, которые, когда вместе в комбинации решит проблему Отказ
Требуемые инструменты Firebase для выполнения этой комбинации: функции облачных пожаров, удаленный конфигуратор Firebase, FireBase, FireStore и обмена сообщениями Firebase.
Прежде чем мы начнем, позвольте мне познакомиться с этими продуктами Firebase, которые мы собираемся использовать. Если вы уже знакомы пропустите раздел, где я опишу, как проводит все эти продукты вместе.
Firebase Remote Config Удаленный конфигурацию – это облачная служба, которая позволяет прочитать набор значений, которые вы определили в консоли удаленной конфигурации. Это JSON набор ценностей, которые можно прочитать внутри приложения. Если значения изменены в консоли удаленной конфигурации, она начнет отражать в приложении. Никаких развертываний или обновлений не требуется вообще. Узнайте больше об удаленном конфиге здесь Отказ
Функции облака Firebase Облачные функции предлагают возможности без сервеса точно в качестве функций Google Cloud. Эти облачные функции могут быть вызваны через набор событий. Эти события также включают в себя события HTTPS. Узнайте больше о Firebase от здесь
Firestore Облачная база данных NoSQL, где документы могут быть сохранены и извлечены с использованием клиентских SDKS. Вы можете узнать о FireStore от здесь
ОБЩАЙСКАЯ ОБСЛУЖИВАНИЯ ОБЩАЙСКИЙ ОБСЛУЖИВАНИЕ FCM предлагает абстрактный слой над push-уведомлениями для iOS и Android. Управляющие токенами и отправка Push-сообщений через их SDK.
Как провести все эти услуги?
Прежде чем мы начнем следующие SDK, должны были быть интегрированы внутри приложения Remote Config, FireStore и FCM. Значения удаленного конфигурации должны быть прочитаны внутри приложения, чтобы определить, включить или отключить сервисы приложений. Когда приложение узнает, что сервис приложений отключен, приложение должно отправить свой токен FCM в базу данных FireStore. Функция облака должна быть прикреплена к удаленному конфигурации для прослушивания событий редактирования конфигурации.
Как это будет работать?
Как только все продукты Firebase подключены, его время для управления потоком.
Для этого примера мы смотрим на приложение электронной коммерции, которое продает воздушные шары онлайн и доставляет его 😁 потому что почему нет? 💁🏼 Мы получаем все онлайн в эти дни.
По умолчанию
По умолчанию приложение будет включено, и функция облака не будет вызвана, потому что к конфигурации нет никаких изменений.
Отключить приложение
Когда службы приложения необходимо остановить, удаленный конфиг будет отредактирован. Функция облака должна игнорировать обновление и ничего не делать. Приложение узнает, что он отключен, поэтому он отправит и сохранит свой токен FCM в базу данных FireStore, которая будет позже, когда приложение возобновляется.
Повторно включите приложение, отредактировав конфигурацию
После того, как приложение необходимо снова возобновить, удаленный конфиг должен был быть отредактирован. Функция облака, которая слушает событие редактирования удаленного конфигурации, будет запускаться на этот раз. Функция облака увидит, было ли предыдущее состояние конфигурации отключено, и текущее состояние удаленного конфигурации включено. Если условия выполняются, то облачная функция отправит уведомление всех пользователей, пострадавших через токены FCM, хранящиеся в FireStore.
Функция облака, вызванная удаленным конфигурацией
const functions = require("firebase-functions"); const rp = require("request-promise"); const admin = require("firebase-admin"); const lodash = require("lodash"); admin.initializeApp(); exports.sendPushNotification = functions.remoteConfig.onUpdate( (versionMetadata) => { const config = admin.remoteConfig(); return config .getTemplate() .then((template) => { var data = lodash._.get( template, "parameters.app_enabled.defaultValue.value", {} ); var app = JSON.parse(data); // if the enabled flag is set to true if (app.enabled) { var resumeMessage = lodash._.get(app, "resume_message", null); if (resumeMessage !== null) { sendPushToDevice(resumeMessage.title, resumeMessage.body); } } return; }) .catch((err) => { console.error("Unable to get template"); console.error(err); }); } ); sendPushToDevice = async (title, body) => { var db = admin.firestore(); let usersRef = db.collection("affected-users"); let pushTokens = []; usersRef .get() .then(async (snapshot) => { snapshot.forEach((doc) => { const data = doc.data(); if (data.token) { pushTokens.push(data.token); } }); const payload = { notification: { title, body, image: "https://replaceme-with-a-cute-image.jpg" }, tokens: pushTokens, topic: "app-enabled", }; const response = await admin.messaging().sendMulticast(payload); console.log("response = ", response); return; }) .catch((err) => { console.log("Error getting documents", err); }); //Delete the documents usersRef .get() .then(async (snapshot) => { snapshot.forEach((doc) => { doc.ref.delete(); }); return; }) .catch((err) => { console.log("Error getting documents", err); }); };
Ta Ta .. Увидимся позже Я надеюсь, что вы найдете эту статью полезную для вашего приложения. Не стесняйтесь предложить улучшения. Быть дома и быть в безопасности. BYE ✌🏽.