Kann mir Jemand sagen ob diese Seite professionell aussieht? Zumindest die Startseite. Der Rest ist noch nicht fertig.
Lockcard - Das Offizielle Forum (tilo-behnke.de)
Beiträge von flyingtable07
-
-
Die DE Domains liegen bei Hetzner, und natürlich braucht man da eines.
Also, ich bin nicht bereit für eine Domain 11 Euro u Jahr zu zahlen, wenn ich sie für 4 krieg. und da brauch man kein Bankkonto. Und die 20 prozent gebüren die eigendlich bei PaySafe anfallen zieht DeinServerHost sogar vom Preis ab. im prinzip ist es dann so als hätte man bar bezahlt.
ZitatIn deinem Alter hatte ich schon eines
.du glückliche.
Zitatsyntafin.sexy
respekt. aber wenn man das geld hat..
-
Ich scheine 3,28€ dafür zu zahlen
.Wobei die DE-Domains auch meine günstigsten sind (evtl. geht bei einer der Preis auf 3500€/Jahr hoch)
welcher hoster? und brauch man dafür ein bankkonto?
und für welche domain bezahls du bitteschön 3500€ -
Telekom MagentaEins, Amazon Web Services, Hetzner, DigitalOcean.
Alles Anbieter die echte Dienstleistungen anbieten. Und gerade "Prepaid Hoster" sind der größte Scam, Abertausende "Kunden" auf einem VPS mit 128mb RAM und 1 vCPU.
Bei dem "Prepaid Hoster" DeinServerHost bekomme ich .de Domais für 3.99 im Jahr dauerhaft. Ich kenne keinen besseren Anbieter auch nicht von den echten Dienstleistern.
-
uff ist das alles kompliziert. Einfach nur Anbieter nutzen für die man kein Schufa braucht. Aldi Talk, Prepaid Hoster...
-
Niemand kann mir helfen

-
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 hinbekommenPHP
Alles anzeigennotificationHelper.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();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
Alles anzeigen$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();Und das Funktionier einfach nicht!!!!!
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
-
Die Quelle, nicht den Virenverteiler.
Aber hey, Pacman regelt, für Windows heißt das glaube Winget.
aha
-
Da bist du aber selbst schuld, da du Chip vereendest. Zudem, dürfte die Option abschaltbar sein, da es sonst ja untergejubelt wäre.
Ich bin es geohnt bei Installern jeglicher Art immer auf Weiter, Weiter, Weiter zu klicken, beziehungsweise Enter zu spammen. Und bei Chip muss man bei der Abfrage Wollen Sie Opera GX installieren immer auf Abbrevchen drücken nicht auf weiter. Und welche Quelle empfilst du für Sachen wenn nicht Chip?
-
Opera ist so ein Spam. Es installiert sich dauernt versehntlich über solche sus programme wie Chip Installer. ich hatte schon so viele komische versionen von opera auf meiner festplatte und möchte mit so einem aufdringlichen unternehmen nicht zu tun haben.
-
Du verbindest dich zu WhatsApp und Co.
Deine Nachrichten und Kontakte können dir dann ganz normal schreiben.
aha
-
-
Xmpp bzw. die abgewandelte Version z.B. bei WhatsApp läuft zentral. Matrix bietet die gleichen Funktionen nur dezentral an.
Da aber nicht alle Freunde direkt wechseln wollen oder können nutzt man zusätzlich die Bridge. So hat man alle Messenger in einem.
Matrix wird von verschiedenen Opern source Entwicklern als der Standard vorausgesetzt. Die Linux Group die ich nutze genauso wie der Maler Space in dem ich aktiv bin.
Ich bin jetzt auf Toms Server…läuft super bis her.
dann müssen aber alle messager die bridge unterstützen oder? und bei whatsapp brauch man telefonnummern wie ist das kompatiebel?
-
überteuert
-
Dazu möchte ich mal sagen, das es natürlich gut ist wenn man selbst weiß wie etwas funktioniert, es kommt aber die Zeit, da will man sich mit den ständigen Boilerplate arbeiten nicht mehr ärgern und vor allem auf das wesentliche konzentrieren.
Genau da greifen Frameworks wie Laravel, Symfony, CodeIgniter oder sogar WCF.
Aber gerade bei Mammut Aufgaben wie zB ein PSR-7 fähiger HTTP Client, muss man sich wahrlich nicht selbst antun, denn Guzzle liefert es fertig, ist verbreitet, aktiv gepflegt und der Quellcode ist öffentlich.
Mal als Beispiel, hier ein Vergleich wie die selbe Aufgabe aussieht, wenn du den cURL Client händisch konfigurierst oder Guzzle verwendest:
PHP: curl.php
Alles anzeigen<?php $url = 'https://discord.com/api/v10/guilds/{SERVER_ID}/channels'; $token = 'YOUR_DISCORD_TOKEN'; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HTTPHEADER, [ 'Authorization: Bot ' . $token, 'Content-Type: application/json' ]); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); if ($response) { $data = json_decode($response, true); // Verarbeite die erhaltenen Daten var_dump($data); } else { echo 'Fehler beim Abrufen der Daten.'; }PHP: guzzle.php
Alles anzeigen<?php require 'vendor/autoload.php'; use GuzzleHttp\Client; $url = 'https://discord.com/api/v10/guilds/{SERVER_ID}/channels'; $token = 'YOUR_DISCORD_TOKEN'; $client = new Client(); try { $response = $client->request('GET', $url, [ 'headers' => [ 'Authorization' => 'Bot ' . $token, 'Content-Type' => 'application/json' ] ]); $data = json_decode($response->getBody(), true); // Verarbeite die erhaltenen Daten var_dump($data); } catch (GuzzleHttp\Exception\RequestException $e) { echo 'Fehler beim Abrufen der Daten: ' . $e->getMessage(); }hmm, ich muss leider zugeben, dass sowas manchmal sehr praktrisch ist. und immerhin verändert es nicht die syntax wie dein laverel
-
Ich hab mich die ganze zeit gefunder warum height: auto; bei meinem div nicht funktioniert hat und nach 2 stunden suchen herausgefunden, dass das ein bug in css ist. How To Clear Floats (Clearfix) (w3schools.com)
-
Natürlich kostet das Geld? Wer geht schon arbeiten ohne Geld zu wollen dafür?
Spotify kostet kein geld un youtube auch nicht. es gibt nur bei beiden die premium versionen aber die brauch man nicht unbeding.
-
Nein, eventuell kommt aber die Möglichkeit einen eigenen API Key anzugeben. Kommt jetzt erstmal drauf an wie das mit Kleingewerbe abläuft.
schade. Wie meinst du das mit dem API key?
-
Wenn fertig (ist es fast) und Kleingewerbe angemeldet ist.
und ich krieg eine kostenlosen account?

-
He, das kostet Geld