Web推送C#库函数

Web push C# library function

我目前正在处理网络推送通知,正处于使用网络推送库发送通知的最后阶段。

我正在使用 C# 网络推送库 here。但是,我在页面上或不在页面上时都没有看到通知。

我在下面附上我的代码:

我在我的商店订阅方法中编写了代码,所以它可能是问题之一。

 [HttpPost]
 public void StoreSubscription(string [] publicKey, string [] auth, string notificationEndPoint )
 {
            var pushEndpoint = notificationEndPoint;
            var pushAuth = auth[0].ToString();
            var pushP256DH = publicKey[0].ToString();

            var subject = "mailTo:hhhhhhh@gmail.com";
            var uPublicKey = "yyzzxx";
            var privateKey = "xxyyzz";

            System.IO.File.WriteAllText(@"\Desktop\Subscription.txt", pushEndpoint);
            var subscription = new PushSubscription(pushEndpoint, pushP256DH, pushAuth);
            var gcmAPIKey = "AAAA";
            var vapidDetails = new VapidDetails(subject, uPublicKey, privateKey);

            var webPushClient = new WebPushClient();

            try
            {
                webPushClient.SetGCMAPIKey(gcmAPIKey);
                webPushClient.SendNotification(subscription, "payload", gcmAPIKey);

            }
            catch (WebPushException exception)
            {
                Console.WriteLine("HTTP status Code:" + exception.StatusCode);
            }
}

而我的 service worker 代码如下用于处理推送:

 self.addEventListener('push', function (event) {
    debugger
    var body;
    if (event.data) {
        body = event.data.text();
    } else {
        body = 'Push message no payload';
    }
    var options = {
        body: body,/*'This message was generated from a push'*/
        icon: '/Images/noun_Pushing_1823359.png',
        vibrate: [100, 200, 100, 200, 400],
        data: {
            dateOfArrival: Date.now(),
            primaryKey: '2'
        },
        actions: [
            {
                action: 'explore', title: 'Explore this new world',
                icon: '/Images/noun_Check Mark_4870.png'
            },
            {
                action: 'close', title: 'Close',
                icon: '/Images/noun_Close_887590.png'
            },
        ]
    };
    event.waitUntil(
        self.registration.showNotification('Push Notification', options)
    );
});

我已经坚持了将近很长时间了,对 promise、service worker、push 和 notification api 还很陌生。

该函数被命中并且没有抛出任何异常。另外,当我在服务工作者中放置一个调试器时,它没有被击中,所以显然推送没有得到 handles.I 这可能是完全错误的。

我遇到了同样的问题。我使用 64 位编码我的身份验证和 p256dh 用于创建订阅。

如果没有异常,则可能意味着 JSON 有效负载有效 JSON 但服务工作者的格式错误。我将我的负载更改为我的服务人员 (Angular) 的有效 JSON 对象:

{ "notification": {"title": "message title", "body": "message body"} }

请查看文档...https://developer.mozilla.org/en-US/docs/Web/API/Notification/Notification

发送了通知并点击了 service worker。

我使用的是 Vapid Details 而不是 GCMApiKey。