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

Форум для тех, кто программирует под Android
Ответить
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 МБ.

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