TeleMess
Войдите, чтобы продолжить
Войти
Нет аккаунта?
Зарегистрироваться
Зарегистрироваться
Уже есть аккаунт?
Войти
⚠️
Вы уверены?
Да
Отмена
TeleMess
Пост
Меню
Выйти
Войти
Тема
🌙 Тёмная
Тёмная неон
Светлая
Красный неон
Синий неон
Чёрный неон
Белый неон
Добавить
Что у вас нового?
Загрузить ещё
Лента
Чаты
Профиль
Настройки
Новый пост
Фото/Видео
Черновик
Опубликовать
Черновик сохраняется автоматически
Комментарии
0
Ответ
Установить
// ============================================================ // ===== PUSH-УВЕДОМЛЕНИЯ (ДОБАВЛЕНО) ===== // ============================================================ const VAPID_PUBLIC_KEY = 'BIQWw39UPTj6Q_yQ7mlc2Ce2iCcEBc9CJz2h02Qf-qE1HJBi3AO0ujt1bOA_Iup8eEHR-2Bpo8SKj9dqWxASo3Y'; async function subscribeToPush() { if (!currentUser) { console.log('Пользователь не авторизован'); return; } if (!('Notification' in window)) { console.log('Браузер не поддерживает уведомления'); return; } if (!('serviceWorker' in navigator)) { console.log('Service Worker не поддерживается'); return; } if (Notification.permission === 'denied') { console.log('Уведомления запрещены'); return; } if (Notification.permission === 'default') { const result = await Notification.requestPermission(); if (result !== 'granted') { console.log('Пользователь отказал'); return; } } try { const registration = await navigator.serviceWorker.ready; const existingSubscription = await registration.pushManager.getSubscription(); if (existingSubscription) { console.log('Уже подписаны'); return; } const subscription = await registration.pushManager.subscribe({ userVisibleOnly: true, applicationServerKey: urlBase64ToUint8Array(VAPID_PUBLIC_KEY) }); const res = await fetch('api.php?action=save_push_subscription', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ user_id: currentUser.id, subscription: subscription }) }); const data = await res.json(); if (data.success) { console.log('✅ Подписка на пуши сохранена'); } else { console.log('❌ Ошибка сохранения подписки:', data.error); } } catch(e) { console.log('❌ Ошибка подписки на пуши:', e); } } function urlBase64ToUint8Array(base64String) { const padding = '='.repeat((4 - base64String.length % 4) % 4); const base64 = (base64String + padding) .replace(/\-/g, '+') .replace(/_/g, '/'); const rawData = window.atob(base64); const outputArray = new Uint8Array(rawData.length); for (let i = 0; i < rawData.length; ++i) { outputArray[i] = rawData.charCodeAt(i); } return outputArray; } // Запускаем подписку после загрузки страницы document.addEventListener('DOMContentLoaded', () => { setTimeout(() => { if (currentUser) { subscribeToPush(); } }, 3000); });