Я пытаюсь создать простое веб -невыполнение с использованием служебного работника, он хорошо работает в браузерах на рабочем столе, но на устройстве Android не работает! < /p>
на Firefox Android: pushmanager.subscribe () return null
на chrome android, он даже не достигает сцены.';
function urlBase64ToUint8Array(base64String) {
// Ensure correct padding
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding)
.replace(/\-/g, '+')
.replace(/_/g, '/');
const rawData = atob(base64);
const buffer = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
buffer = rawData.charCodeAt(i);
}
return buffer;
}
async function subscribe() {
try{
const permission = await Notification.requestPermission();
if (permission !== 'granted') {
alert('Please enable notifications!');
return;
}
const reg = await navigator.serviceWorker.register('sw.js');
// Wait for activation if needed
if (!reg.active) {
await new Promise(resolve => {
if (reg.installing) {
reg.installing.onstatechange = () => {
if (reg.active) resolve();
};
} else if (reg.waiting) {
resolve(); // Skip waiting for user
}
});
}
console.log("SW now active. PushManager:", reg.pushManager);
console.log("reg object:", reg);
console.log("reg.scope: " + reg.scope);
const existingSub = await reg.pushManager.getSubscription();
if (existingSub) {
await existingSub.unsubscribe();
console.log("Already subscribed:", existingSub);
alert("Already subscribed");
} else {
console.log("Not subscribed yet.");
alert("Not subscribed yet.");
}
console.log("Key length: " + urlBase64ToUint8Array(publicKey).length);
const sub = await reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicKey)
});
console.log(sub);
alert(sub);
await fetch('', {
method: 'POST',
body: JSON.stringify(sub),
headers: { 'Content-Type': 'application/json' }
});
const checkSub = await reg.pushManager.getSubscription();
if (existingSub) {
console.log("subscribed");
alert("subscribed");
} else {
console.log("Not subscribed yet.");
alert("Not subscribed yet.");
}
}catch (err) {
console.error("Subscription failed:");
console.error("Error name:", err.name);
console.error("Error message:", err.message);
console.error("Error stack:", err.stack);
alert(`Subscribe failed: ${err.name} - ${err.message}`);
return null;
}
}
document.getElementById('subscribeBtn').onclick = () => {
if ('serviceWorker' in navigator && 'PushManager' in window) {
subscribe().catch(err => console.log('Error: ' + err));
} else {
alert('Push not supported');
}
};
< /code>
И это файл SW.JS в том же каталоге: < /p>
// sw.js
self.addEventListener('install', e => self.skipWaiting());
self.addEventListener('activate', e => console.log('SW activated'));
self.addEventListener('push', e => {
const body = e.data?.text() || 'No payload';
e.waitUntil(self.registration.showNotification('Push', { body }));
});
< /code>
Некоторые соображения: < /p>
a. Я запустил этот скрипт на действительном веб -сайте https < /p>
b. Я использовал допустимый VAPID, и он работает на настольных браузерах, включая Firefox и Chrome < /p>
c. Я предоставил разрешения на устройство Android, так что разрешения не проблема!
Если вы можете помочь мне в этом, я благодарен ...
Подробнее здесь: https://stackoverflow.com/questions/797 ... ll-on-chro
Pushmanager.SubScribe Верните NULL на Android Firefox (вообще не работает на Chrome) ⇐ Javascript
Форум по Javascript
1752838577
Anonymous
Я пытаюсь создать простое веб -невыполнение с использованием служебного работника, он хорошо работает в браузерах на рабочем столе, но на устройстве Android не работает! < /p>
на Firefox Android: pushmanager.subscribe () return null
на chrome android, он даже не достигает сцены.';
function urlBase64ToUint8Array(base64String) {
// Ensure correct padding
const padding = '='.repeat((4 - base64String.length % 4) % 4);
const base64 = (base64String + padding)
.replace(/\-/g, '+')
.replace(/_/g, '/');
const rawData = atob(base64);
const buffer = new Uint8Array(rawData.length);
for (let i = 0; i < rawData.length; ++i) {
buffer[i] = rawData.charCodeAt(i);
}
return buffer;
}
async function subscribe() {
try{
const permission = await Notification.requestPermission();
if (permission !== 'granted') {
alert('Please enable notifications!');
return;
}
const reg = await navigator.serviceWorker.register('sw.js');
// Wait for activation if needed
if (!reg.active) {
await new Promise(resolve => {
if (reg.installing) {
reg.installing.onstatechange = () => {
if (reg.active) resolve();
};
} else if (reg.waiting) {
resolve(); // Skip waiting for user
}
});
}
console.log("SW now active. PushManager:", reg.pushManager);
console.log("reg object:", reg);
console.log("reg.scope: " + reg.scope);
const existingSub = await reg.pushManager.getSubscription();
if (existingSub) {
await existingSub.unsubscribe();
console.log("Already subscribed:", existingSub);
alert("Already subscribed");
} else {
console.log("Not subscribed yet.");
alert("Not subscribed yet.");
}
console.log("Key length: " + urlBase64ToUint8Array(publicKey).length);
const sub = await reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(publicKey)
});
console.log(sub);
alert(sub);
await fetch('', {
method: 'POST',
body: JSON.stringify(sub),
headers: { 'Content-Type': 'application/json' }
});
const checkSub = await reg.pushManager.getSubscription();
if (existingSub) {
console.log("subscribed");
alert("subscribed");
} else {
console.log("Not subscribed yet.");
alert("Not subscribed yet.");
}
}catch (err) {
console.error("Subscription failed:");
console.error("Error name:", err.name);
console.error("Error message:", err.message);
console.error("Error stack:", err.stack);
alert(`Subscribe failed: ${err.name} - ${err.message}`);
return null;
}
}
document.getElementById('subscribeBtn').onclick = () => {
if ('serviceWorker' in navigator && 'PushManager' in window) {
subscribe().catch(err => console.log('Error: ' + err));
} else {
alert('Push not supported');
}
};
< /code>
И это файл SW.JS в том же каталоге: < /p>
// sw.js
self.addEventListener('install', e => self.skipWaiting());
self.addEventListener('activate', e => console.log('SW activated'));
self.addEventListener('push', e => {
const body = e.data?.text() || 'No payload';
e.waitUntil(self.registration.showNotification('Push', { body }));
});
< /code>
Некоторые соображения: < /p>
a. Я запустил этот скрипт на действительном веб -сайте https < /p>
b. Я использовал допустимый VAPID, и он работает на настольных браузерах, включая Firefox и Chrome < /p>
c. Я предоставил разрешения на устройство Android, так что разрешения не проблема!
Если вы можете помочь мне в этом, я благодарен ...
Подробнее здесь: [url]https://stackoverflow.com/questions/79705987/pushmanager-subscribe-return-null-on-android-firefox-not-working-at-all-on-chro[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия