2017-01-10 4 views
3

ОК, поэтому у нас есть автономное первое приложение, которое вызывает вызовы для внутреннего API.Могу ли я установить синхронизацию службы ServiceWorker с помощью кода?

Мы хотели бы использовать синхронизацию Service Worker для кэширования вызовов API, когда приложение находится в автономном режиме, а затем обрабатывать эти вызовы при повторном подключении браузера.

Усложнение состоит в том, что при вызове API мы должны иметь действительный токен OWIN.

Существует решение outlined here, в котором говорится, что мы можем просто получить токен, когда нам это нужно; но это не будет работать для нашего приложения, потому что мы разрешаем только один активный сеанс для каждого пользователя. Итак, если мы получим токен в коде, мы рискуем пинать реального пользователя, занятого в настоящее время в приложении.

Итак, вопрос заключается в следующем: - Можем ли мы получить синхронизацию Service-Worker с паузой в коде, как описано ниже?

  1. Мы сообщаем процессу синхронизации рабочего процесса «останавливаться на данный момент» в нашем коде, когда пользователь заканчивает свою сессию в приложении.

На данный момент важно, чтобы процесс синхронизации отслеживал все вызовы, которые необходимо обработать, но не обрабатывать ни одно из них. Кроме того, любые дополнительные вызовы синхронизации должны быть просто добавлены в очередь.

  1. Когда следующий пользователь получит действительный токен OWIN, мы можем сказать, что процесс синхронизации «продолжит, как обычно».

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

Кто-нибудь знает наверняка, возможно ли это или нет?

+1

Как долго эти токены живут? «мы разрешаем только один активный сеанс для каждого пользователя» - означает ли это, что он не работает с несколькими вкладками? Как избежать одной и той же проблемы с перекрытием выборки из одной страницы? –

+0

Мы храним маркер в качестве файла cookie-носителя в браузере. Это означает, что один и тот же токен действителен для всех страниц и всех вкладок (если пользователь не закрывает браузер или не выбирает пункт меню «выход из системы»). –

+0

Невозможно ли использовать такое же решение здесь? Поместите маркер в IndexedDB и получите доступ к нему от рабочего. –

ответ

1

ОК, Итак, из обсуждения выше и из других обсуждений в автономном режиме; Тривиальный ответ на вопрос «Нет» - по состоянию на 13 января 2017 года (да, это пятница); вы не можете приостановить синхронизацию сервис-работника.

Так как обход; было найдено два подхода, которые мы могли бы найти:

(оба предполагают некоторое переосмысление решения).

  1. Если возможно, получите новый токен аутентификации OWIN из вашего кода синхронизации.
  2. Если 1 невозможно, разделите вызовы API на 3 категории.

2.1 Получить вызовы; они могут обрабатываться через стандартные механизмы кэширования сервис-работника.

2.2 Невозвратные вызовы, в которых ответ можно игнорировать. Они могут быть добавлены в таблицу IndexedDB, и веб-рабочий может быть запущен для обработки их после того, как пользователь подключится к базе данных.

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

Это о нем; Вариант 2 работает для моего текущего проекта.Могут быть проекты, где вариант 2 все еще невозможен.

Смежные вопросы