Pushmanager.SubScribe Верните NULL на Android Firefox (вообще не работает на Chrome)Javascript

Форум по Javascript
Ответить
Anonymous
 Pushmanager.SubScribe Верните NULL на Android Firefox (вообще не работает на Chrome)

Сообщение 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 = 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Javascript»