Почему Firebase Realtime db работает в режиме инкогнито и т. Д., А не в Firebase Cloud Messaging - PullRequest
0 голосов
/ 02 декабря 2018

Я только начинаю работу с экосистемой Firebase и провожу некоторые исследования, прежде чем приступить к реализации базы данных GCloud (Datastore vs. Firestore).Мой целевой клиент - Web / браузер, а мои бэкэнд-сервисы будут в AppEngine.

Работа с примером облачного обмена сообщениями , похоже, что FCM не работает в нескольких сценариях (режим инкогнитоSafari, если разрешение заблокировано).Тем не менее, дружественная демонстрация чата , которая использует обновления базы данных в реальном времени, действительно работает в этих сценариях.

Кто-нибудь может объяснить, почему?

Моя цель - подписаться на события, чтобы клиент мог обновить состояние и т. Д. Без использования опроса.Кажется излишним помещать их в пожарную, просто чтобы обойти требования к разрешениям на уведомления.Любое понимание приветствуется.Эти события могут отправляться из нескольких различных внутренних служб и не связаны исключительно с записями БД.

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

1 Ответ

0 голосов
/ 02 декабря 2018

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

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

Обратите внимание, что это будет другим, если вы используете Аутентификацию Firebase в сочетании с Базой данных реального времени.Auth сохранит маркер пользователя в локальном хранилище, чтобы его нельзя было открыть в окне инкогнито.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...