Работники Angular Service, push-уведомления и подписанные пользователи - PullRequest
1 голос
/ 18 октября 2019

У меня большой внутренний угловой проект. у нас были некоторые требования для отправки пользователям уведомлений о некоторых процессах в работе. Я обновил проект до углового 8 в передней части, и мы используем Nodejs и Express в качестве задней части. В основное время все идет хорошо. Но у меня небольшая проблема, которая не в состоянии узнать, подписан ли клиент или нет. Я знаю, что он не подписан Я покажу кнопку для отписки. все подписки сохраняются в БД, но некоторые клиенты имеют более одной подписки для разных браузеров. так есть ли способ узнать, подписан ли пользователь из используемого браузера или нет. любая помощь приветствуется.

1 Ответ

0 голосов
/ 18 октября 2019

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

Я предложу вам объединить несколько вещей и сделать их уникальными для разных браузеров. и устройство к устройству.

Используйте этот плагин для получения уникального идентификатора устройства

device-uuid

Использованиеэто и найти имя браузера

getBrowserName() {

// @ts-ignore
let isOpera = (!!window.opr && !!opr.addons) || !!window.opera || navigator.userAgent.indexOf(' OPR/') >= 0;
if (isOpera) return 'isOpera';
// Firefox 1.0+
// @ts-ignore
let isFirefox = typeof InstallTrigger !== 'undefined';
if (isFirefox) return 'isFirefox';

 // Safari 3.0+ "[object HTMLElementConstructor]"
// @ts-ignore
let isSafari = /constructor/i.test(window.HTMLElement) || (function (p) {
  return p.toString() === "[object SafariRemoteNotification]";
  // @ts-ignore
})(!window['safari'] || (typeof safari !== 'undefined' && safari.pushNotification));

if (isSafari) return 'isSafari';

// Internet Explorer 6-11
// @ts-ignore
let isIE = /*@cc_on!@*/false || !!document.documentMode;
if (isIE) return isIE;

 // Edge 20+
// @ts-ignore
let isEdge = !isIE && !!window.StyleMedia;
if (isEdge) return 'isEdge';

// Chrome 1 - 71
// @ts-ignore
let isChrome = !!window.chrome && (!!window.chrome.webstore || !!window.chrome.runtime);
if (isChrome) return 'isChrome';

// Blink engine detection
// @ts-ignore
let isBlink = (isChrome || isOpera) && !!window.CSS;
if (isBlink) return 'isBlink';

}

Теперь СОБЛЮДАЙТЕ имя браузера с UUID и идентификатором пользователя для входа. Отслеживайте подписку с уникальным идентификатором и отправляйте уведомления всем браузерам и устройствам, в которые вошел пользователь.

Вы должны учитывать браузер, поскольку uuid будет одинаковым для устройства во всех браузерах. .

const uniqueId = uuid + getBrowserName () + logedInUserId;

Полагаю, это должно вам помочь.

...