1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Ich bin am verzweifeln

  • flyingtable07
  • 14. Juli 2023 um 19:00
  • Unerledigt
  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 14. Juli 2023 um 19:00
    • #1

    Ich bin am Verzeifeln.

    Ich muss unbedingt Destop Benachrichtigungen für meine PWA haben. Es wird ein provat chat und immer wenn jemand was schreibt sollen die anderen die meldung bekommen "Neue Nachricht von ..". Bei Handys soll die dann auch auf dem Sperrbildschirm angezeigt werden. Die Benachrichtigungen müssen auch escheinen wenn die App geschlossen ist, wie bei Discord.
    Den Client Site code habe ich easy hinbekommen

    PHP
     notificationHelper.registerServiceWorker('/sw.js');
    function urlBase64ToUint8Array(base64String) {
            const padding = '='.repeat((4 - (base64String.length % 4)) % 4);
            const base64 = (base64String + padding)
                .replace(/\-/g, '+')
                .replace(/_/g, '/');
    
            const rawData = window.atob(base64);
            const outputArray = new Uint8Array(rawData.length);
            for (let i = 0; i < rawData.length; ++i) {
                outputArray[i] = rawData.charCodeAt(i);
            }
            return outputArray;
        }
        var notificationHelper = {
            isSupported() {
                if (!window.Notification) {
                    return false;
                }
                if (!('serviceWorker' in navigator)) return false;
                return 'PushManager' in window;
            },
            urlBase64ToUint8Array(base64String) {
                const padding = '='.repeat((4 - base64String.length % 4) % 4);
                const base64 = (base64String + padding).replace(/-/g, '+').replace(/_/g, '/');
                const rawData = window.atob(base64);
                const outputArray = new Uint8Array(rawData.length);
                for (let i = 0; i < rawData.length; ++i) {
                    outputArray[i] = rawData.charCodeAt(i);
                }
                return outputArray;
            },
            createNotificationSubscription(pushServerPublicKey) {
                return navigator.serviceWorker.ready.then(function(serviceWorker) {
                    return serviceWorker.pushManager
                        .subscribe({
                            userVisibleOnly: true,
                            applicationServerKey: urlBase64ToUint8Array(pushServerPublicKey)
                        })
                        .then(function(pushSubscription) {
                            var subJSObject = JSON.parse(JSON.stringify(pushSubscription));
                            var subscription = {
                                'endpoint': subJSObject.endpoint,
                                'authToken': subJSObject.keys.auth,
                                'publicKey': subJSObject.keys.p256dh,
                                'contentEncoding': 'aesgcm'
                            }
                            return subscription;
                        });
                });
            },
            registerServiceWorker(file) {
                if (!navigator.serviceWorker) return;
                navigator.serviceWorker.register(file);
            }
        }
        function request_permission() {
            Notification.requestPermission(function (status) {
                if (status === 'granted') {
                    notificationHelper.createNotificationSubscription("<?php echo htmlspecialchars($key_public); ?>").then(function (subscription) {
                        console.log(subscription);
                        fetch('/push', {
                            method: 'POST',
                            headers: {
                                'Content-Type': 'application/x-www-form-urlencoded',
                            },
                            body: 'data=' + encodeURIComponent(JSON.stringify(subscription)),
                        });
                    });
                } else {
                    console.log(status);
                    setTimeout(request_permission, 5000);
                }
            });
        }
        request_permission();
    Alles anzeigen

    Wenn Jemand die Website öffnet und Benachrichtigungen zulässt bekomme ich die Push Daten auf dem Server. Diese werden dann in einer Datenbank gespeichert, oder wenn bereits vorhandne ersetzt. So verhindere ich, dass ein und dasselbe gerät die benachrichtigung doppelt bekommt. wenn jemamnd aber meherere geräte hat bekommen trotzdem alle die benachrichtigung. Das funktioniert auch alles. In der Dtanebank hab ich dann JSON einträge die wie die folgenden Aussehen:

    Code
      [{"endpoint":"https:\/\/wns2-am3p.notify.windows.com\/w\/?token=BQYAAADxhCaa2w1NkpcJ3ITbt7Akq0FMaUvOr6eY9IcTJfH0Uyh5bMAqoc%2fiw4W3ePDlIMroJjukFqCWIGQ5HTTGysqK31mZUBLUnWAbEa1CUO0NatmYIXqmBcICR8QdBJBBHkGYOi4PR3rAKUob9J6fNvpdYBmPQI03OGk9mU9fyDNTOeghaa8LFTd2wM5jlgGfUFkfSf5iTuz9%2fBfk%2fQuT7ChHfBajQKmKz91j2MQpjvGfdEBFmoDEKq2qfB%2fwmFvkkAswGQiFwI%2bMnGqB%2bpXHVGRxGFjZw%2bXestloVF%2f9j15pk0AKwqqxl%2fFtiV%2f2CVLbnsc%3d","authToken":"MMXpFVr9sGYXvquvAlZuyA","publicKey":"BPlyW1ROqnYdys3ono36BhsvqdFVBdfeC6jtBNrPMRxnYTPPL8QsDYQTmYfwGFE7aSQoAm75E6Nc3UIcfHYib2Q"},{"endpoint":"https:\/\/wns2-am3p.notify.windows.com\/w\/?token=BQYAAADxhCaa2w1NkpcJ3ITbt7Akq0FMaUvOr6eY9IcTJfH0Uyh5bMAqoc%2fiw4W3ePDlIMroJjukFqCWIGQ5HTTGysqK31mZUBLUnWAbEa1CUO0NatmYIXqmBcICR8QdBJBBHkGYOi4PR3rAKUob9J6fNvpdYBmPQI03OGk9mU9fyDNTOeghaa8LFTd2wM5jlgGfUFkfSf5iTuz9%2fBfk%2fQuT7ChHfBajQKmKz91j2MQpjvGfdEBFmoDEKq2qfB%2fwmFvkkAswGQiFwI%2bMnGqB%2bpXHVGRxGFjZw%2bXestloVF%2f9j15pk0AKwqqxl%2fFtiV%2f2CVLbnsc%3d","authToken":"MMXpFVr9sGYXvquvAlZuyA","publicKey":"BPlyW1ROqnYdys3ono36BhsvqdFVBdfeC6jtBNrPMRxnYTPPL8QsDYQTmYfwGFE7aSQoAm75E6Nc3UIcfHYib2Q"}]

    Das sieht mir auch richtig aus, oder?

    Wenn ich jetzt Benachrichtigungen senden will mache ich das wie folgt. Ich bin ja immer etwas abgeneigt gegenüber fremden bibliotecken und modulen aber weil ich keine anderen tutorials gefunden hab, hab ich mich für die php bibliteck web-push entschieden. Mit ein bischen rumprobieren, weil meine web-push version offenbar neuer war als die im tutorial (eine methode hatte einen andernen namen) sah der code am ende funktionsfähig aus.

    Code
     $key_public = "BOwepYjLEZEMN0YPlh1NJOr4keeVYEta6mSq4GHX22Uiml9_768M-sHMJpljNRbui7r7C5APr2yjmiwTs3LlcLg";
    $key_private = "O7i8vFrZ7HUaNYAl2Wv7Ds8_Gu2pUg-bD8Ddftuy5lc";
    
     $auth = [
            'VAPID' => [
                'subject' => 'https://lanparty2023.de',
                'publicKey' => $key_public,
                'privateKey' => $key_private
            ]
        ];
        $payload = [
            "title" => "Neue Nachricht von ".$_POST["name"],
            "body" => $_POST["text"] ?? "",
            "badge" => "/image.jpg",
            "icon" => "/favicon.ico",
            "image" => "https://lanparty2023.de/image.jpg",
            "tag" => "Programmierer Lanparty",
            "actions" => [
                [
                    "action" => "open",
                    "title" => "Nachricht lesen"
                ],
                [
                    "action" => "open",
                    "title" => "Antworten"
                ]
            ],
            "data" => [
                "open" => "/invite/",
                "default" => "/invite/"
            ],
            "vibrate" => [300, 100, 400]
        ];
    $webPush = new \Minishlink\WebPush\WebPush($auth);
    $has = array();
        foreach($pushTokens as $data){
            if(isset($has[json_encode($data)])) continue;
            $has[json_encode($data)] = true;
          
    $subscription = \Minishlink\WebPush\Subscription::create($data);
    
    $result = $webPush->sendNotification(
        $subscription,
        $payload
        );
    echo $result;
        exit();
    Alles anzeigen

    Und das Funktionier einfach nicht!!!!! :pouting_face: Egal was ich tue. Seid stunden bin ich am rumprobieren. Es heißt immer Response 401 - Unatorizied
    ich habe auch schon chatgpt noch einer manullen version über curl gefragt aber die ist so dumm und unssing, dass kein Broweser die Anfrage überhaupt erst akzeptiert.
    Ist mein Valid Keys vielleicht falsch? oder woran kann es noch liegen? ich habe es mit 4 verschiedenen browsern, 2 computern, 1 handy und browserling probiert aber überall erhalte ich 401.

    Ich wäre meinem Retter unendlich dank bar :grinning_face_with_smiling_eyes:

  • flyingtable07
    18
    flyingtable07
    Mitglied
    Reaktionen
    59
    Punkte
    3.564
    Trophäen
    1
    Beiträge
    678
    • 14. Juli 2023 um 19:11
    • #2

    Niemand kann mir helfen :loudly_crying_face: :loudly_crying_face: :loudly_crying_face:

  • Syntafin
    27
    Syntafin
    LISTstack Dev
    Reaktionen
    498
    Punkte
    7.798
    Trophäen
    2
    Beiträge
    1.416
    • 14. Juli 2023 um 20:03
    • #3

    Binnen 10 Minuten erwartest du eine Antwort?

    A red dragon falls from the heavens... Ah, that memory has been lost. A shame. It was a favorite of mine...

  • ai3x
    1
    ai3x
    Gast
    • 14. Juli 2023 um 21:43
    • #4
    VAPID config not found in bundle config resulting in endpoint reporting 401 missing auth headers · Issue #19 · Minishlink/web-push-bundle
    web-push-bundle/DependencyInjection/MinishlinkWebPushExtension.php Line 31 in e6d2dd8 $container->setParameter('minishlink_web_push.auth', $config['VAPID']);…
    github.com

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Tags

  • php
  • push
  • notification
  • api
  • http
  • tilo
  • lanparty

Rechtliches

Impressum

Datenschutzerklärung