Я пытаюсь настроить push-уведомления, используя django-push-notifications , большую часть кода я скопировал из примера. У меня есть кнопка, которая вызывает функцию enablePushNotifications()
:
export function enablePushNotifications() {
console.log("enabling push notifications...");
if (!'serviceWorker' in navigator){
console.log("Push notifications not supported");
return;
}
navigator.serviceWorker.ready.then(
(registration)=>{
registration.pushManager.subscribe({
userVisibleOnly: true
}).then(
(sub)=>{
console.log(sub);
let endpointParts = sub.endpoint.split("/");
let registration_id = endpointParts[endpointParts.length - 1];
let data = {
'browser': loadVersionBrowser(navigator.userAgent).name.toUpperCase(),
'p256dh': btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('p256dh')))),
'auth': btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('auth')))),
'registration_id': registration_id,
'endpoint': sub.endpoint,
};
request(
"/api/subscribe",
data
)
}
).catch(
(error)=>console.error(error)
)
}
)
}
Когда я открываю вкладку сети, я не вижу ничего странного в передаваемых свойствах или заголовках. В частности, значение browser
является правильным. Реализация для /api/subscribe
URL выглядит следующим образом:
import push_notifications.models as pushmodels
def registerPush(request):
data = requestFormatting.get_data(
request
)
device = pushmodels.WebPushDevice(
name=request.user.username,
active=True,
user=request.user,
registration_id=data["registration_id"],
p256dh=data["p256dh"],
auth=data["auth"],
browser=data["browser"]
)
device.save()
device.send_message("hello")
При вызове этой функции возникает ошибка PushError: Ошибка нажатия: 401 Несанкционировано. Я тестировал как на Chrome, так и на Firefox, оба выдают одну и ту же ошибку. Я указываю свой FCM_API_KEY
в настройках, больше ничего. В настоящее время я не использую VAPID, хотя планирую в будущем. Я пробовал различные варианты кода, но, похоже, ничего не работает. В документации неясно, как на самом деле инициализировать устройства, и я выбрал только WebPushDevice
объекты, поскольку он, похоже, содержит атрибуты, аналогичные данным, приведенным в примере.
Это мой первый раз, когда я пытаюсь использовать веб-пуш, поэтому небольшая помощь будет высоко ценится!