如何使用 django-push-notifications 实现 Web 客户端? [英] How to implement web client with django-push-notifications?
问题描述
我已经使用 django-push-notifications
成功实现了 APNS.而且我发现这种依赖正在增长,并且还有 Web Push Notifications
.我曾尝试跟进给定的代码,但无法看到 registation_id
.我得到了
I have successfully implement APNS using django-push-notifications
. And I have found that this dependency is growing up and has a Web Push Notifications
as well. I had tried followed up the given code, but unable to see a registation_id
. I got
Uncaught (in promise) DOMException`
index.html?_ijt=f2lo8aqelnrfm7g1266vtapp67:1
我将 chrome
作为参数给 loadVersionBrowser()
以避免错误
I put chrome
an argument to loadVersionBrowser()
to avoid error
Uncaught TypeError: Cannot read property 'match' of undefined
这是我当前的文件
<html>
<script>
// Utils functions:
function urlBase64ToUint8Array (base64String) {
var padding = '='.repeat((4 - base64String.length % 4) % 4)
var base64 = (base64String + padding)
.replace(/\-/g, '+')
.replace(/_/g, '/')
var rawData = window.atob(base64)
var outputArray = new Uint8Array(rawData.length)
for (var i = 0; i < rawData.length; ++i) {
outputArray[i] = rawData.charCodeAt(i)
}
return outputArray;
}
function loadVersionBrowser (userAgent) {
var ua = userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if (/trident/i.test(M[1])) {
tem = /\brv[ :]+(\d+)/g.exec(ua) || [];
return {name: 'IE', version: (tem[1] || '')};
}
if (M[1] === 'Chrome') {
tem = ua.match(/\bOPR\/(\d+)/);
if (tem != null) {
return {name: 'Opera', version: tem[1]};
}
}
M = M[2] ? [M[1], M[2]] : [navigator.appName, navigator.appVersion, '-?'];
if ((tem = ua.match(/version\/(\d+)/i)) != null) {
M.splice(1, 1, tem[1]);
}
return {
name: M[0],
version: M[1]
};
};
var applicationServerKey = "BHZZKYSonkdaKjxjgw7DKYO45PmetHY7jprxWn4K4gfZSxUuvyQRe1LegYKoKJzv8qhi5HiIO4wjn6SP9Gg1ftk";
// In your ready listener
if ('serviceWorker' in navigator) {
// The service worker has to store in the root of the app
// http://stackoverflow.com/questions/29874068/navigator-serviceworker-is-never-ready
var browser = loadVersionBrowser('chrome');
navigator.serviceWorker.register('navigatorPush.service.js?version=1.0.0').then(function (reg) {
reg.pushManager.subscribe({
userVisibleOnly: true,
applicationServerKey: urlBase64ToUint8Array(applicationServerKey)
}).then(function (sub) {
var endpointParts = sub.endpoint.split('/');
var registration_id = endpointParts[endpointParts.length - 1];
var data = {
'browser': browser.name.toUpperCase(),
'p256dh': btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('p256dh')))),
'auth': btoa(String.fromCharCode.apply(null, new Uint8Array(sub.getKey('auth')))),
'name': 'XXXXX',
'registration_id': registration_id
};
console.log(data);
})
}).catch(function (err) {
console.log(':^(', err);
});
}
</script>
Hello
</html>
问题:
1.我哪里错了?
2.Web Push Notification Gateway
是否默认使用FCM
?
Questions:
1. Where am I wrong?
2. Is Web Push Notification Gateway
make use of FCM
by default?
推荐答案
这一行:
var ua = userAgent, tem, M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
很奇怪.考虑将其转换为类似:
is very strange. Consider transforming it into something like:
var ua = userAgent;
var tem;
var M = ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
不能在声明变量的同一个语句中使用变量.
You can't use a variable in the same statement that declares it.
至于第二个问题,网络推送通知(我认为)将使用 firebase for chrome,以及其他与其他浏览器相关的任何其他提供者.这是由 django-push-notifications 模块处理的,您不必担心.
As for the second question, web push notifications will (I think) use firebase for chrome, and whatever other provider is relavent for other browsers. This is handled by the django-push-notifications module, you don't have to worry about it.
这篇关于如何使用 django-push-notifications 实现 Web 客户端?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!