Snapchat ist eine der beliebtesten Social-Media-Apps weltweit. Die App ermöglicht es Nutzern, Fotos und Videos mit Freunden zu teilen, die nach kurzer Zeit wieder verschwinden. Durch verschiedene Filter und Linsen kann man seine Snaps noch kreativer gestalten. Doch wie funktioniert Snapchat eigentlich im Hintergrund? Wie kann man eine ähnliche App mit Code nachbauen?
Grundlegendes zu Snapchat
Snapchat wurde 2011 von Evan Spiegel, Bobby Murphy und Reggie Brown erfunden. Die App wurde zunächst für iOS veröffentlicht und kam erst später auch für Android auf den Markt. Kernfunktion von Snapchat sind die sogenannten “Snaps”. Snaps sind Fotos oder Videos, die mit verschiedenen Filtern und Effekten versehen werden können. Der Clou: Die Snaps verschwinden nach maximal 10 Sekunden wieder und sind danach nicht mehr abrufbar.
Mittlerweile gibt es auf Snapchat aber nicht nur private Snaps zwischen Freunden. Man kann auch sogenannte “Stories” erstellen, die 24 Stunden lang für alle Freunde sichtbar sind. Zudem gibt es die Funktion “Snapchat Discover”, über die Medienunternehmen ihre Inhalte in Snapchat-Form anbieten. Auch Shopping und Spiele sind in der App mittlerweile integriert.
Technologien hinter Snapchat
Welche Technologien stecken also hinter Snapchat? Wie funktioniert das Verschwinden der Snaps und was passiert im Hintergrund der App?
Client-Server-Architektur
Snapchat basiert wie die meisten Apps auf dem Client-Server-Modell. Der Client, also die Snapchat-App auf dem Smartphone, kommuniziert über das Internet mit den Snapchat-Servern. Die Server speichern alle relevanten Daten wie Benutzerkonten, Stories, Snaps usw. Sobald der User ein Foto macht, wird dieses zuerst auf die Server hochgeladen, bevor es an die Empfänger verteilt wird.
Datenbanken
Auf den Servern kommen Datenbanken wie MySQL oder PostgreSQL zum Einsatz, um alle Benutzerdaten, Stories, Snaps und Chatverläufe zu speichern und effizient abrufen zu können. Relationale SQL-Datenbanken eignen sich hier gut, da es viele verknüpfte Daten gibt: Benutzer – Snaps – Stories – Chatverläufe usw. Die Datenbanken sind auf Hochverfügbarkeit und Performance ausgelegt, da Snapchat von hunderten Millionen Nutzern gleichzeitig genutzt wird.
CDN für Media Content
Da Snapchat sehr medienintensiv ist (Fotos, Videos), kommt noch ein CDN (Content Delivery Network) zum Einsatz. Ein CDN ist ein weltweites Netzwerk aus verteilten Servern, das medienintensive Inhalte schnell an User ausliefern kann. So muss nicht jeder Snap erst von den zentralen Servern kommen, sondern wird über das CDN vom “nächsten” Server geliefert. Das sorgt für schnellere Ladezeiten.
Push Notifications
Damit Benutzer über neue Snaps benachrichtigt werden können, wird ein Push Notification System wie Firebase Cloud Messaging von Google verwendet. So wird vom Server eine Nachricht an die Smartphones geschickt, sobald es neue Snaps gibt. Die App muss dazu nicht geöffnet sein, sondern bekommt die Nachricht im Hintergrund und kann dann den Nutzer benachrichtigen.
Verschwindende Inhalte
Wie lassen sich in der App die verschwindenden Snaps und Stories umsetzen? Dafür gibt es zwei mögliche Techniken:
- Clientseitiges Löschen: Der Snap wird nach Ansicht für eine bestimmte Zeit lokal auf dem Smartphone gespeichert und dann automatisch vom Client gelöscht.
- Server-seitiges Löschen: Die Snaps werden mit einem Verfallsdatum auf dem Server gespeichert. Nach Ablauf dieses Datums werden sie automatisch vom Server gelöscht.
In der Praxis kommt wahrscheinlich eine Kombination aus beidem zum Einsatz. Lokales Caching sorgt für schnellen Zugriff und geringe Serverlast. Das serverseitige Löschen stellt sicher, dass die Snaps wirklich verschwinden, auch wenn das lokale Löschen fehlschlägt.
Verschlüsselung
Natürlich müssen die übertragenen Inhalte auch entsprechend verschlüsselt werden. Snapchat verwendet ein Verschlüsselungssystem namens “Onion Encryption”. Dabei werden die Daten mehrfach verschlüsselt – wie die Schichten einer Zwiebel. So kann Snapchat sicherstellen, dass nur Sender und Empfänger die Snaps lesen können.
Snapchat mit Code nachbauen
Nach diesem Überblick über die Technologien hinter Snapchat stellt sich die Frage: Wie kann man als Entwickler eine ähnliche App mit Code bauen? Hier ein grober Ablauf:
Architektur planen
Zunächst muss die Architektur geplant werden: Client-Server-Modell, Datenbanken, CDN usw. Am Anfang reicht eine einfache Architektur mit einem Server, einer Datenbank und Apps für iOS und Android.
Server-API entwickeln
Als nächstes kann eine Server-API mit Node.js, PHP, Python oder einer anderen Server-Technologie entwickelt werden. Die API bietet Endpunkte für User-Registrierung, Anmeldung, Snaps hochladen und abrufen, Stories, Chat usw.
Datenbank einrichten
Eine relationale MySQL- oder PostgreSQL-Datenbank wird eingerichtet und mit der Server-API verbunden. Hier werden User, Snaps, Stories etc. gespeichert.
Clients für iOS und Android
Basierend auf der API können dann iOS- und Android-Apps erstellt werden. Hier kümmern wir uns um die Darstellung, mit der Kamera Snaps aufnehmen, Filter und Effekte anbieten, Push Notifications einbinden usw. React Native oder Flutter eignen sich gut für native Apps.
CDN integrieren
Für hohe Performance empfiehlt sich die Integration eines CDN wie Cloudflare oder AWS CloudFront. Alle Bilder und Videos werden dann über das CDN ausgeliefert.
Verschlüsselung
Die Übertragung der Snaps und Chatnachrichten sollte mit SSL/TLS verschlüsselt werden. Für die Ende-zu-Ende-Verschlüsselung muss dann noch ein Verschlüsselungssystem implementiert werden.
Automatisches Löschen
Zum Schluss muss die Kernfunktionalität – das automatische Löschen von Snaps und Stories – in Client und Server implementiert werden. Snaps können z.B. mit einem Verfallsdatum gespeichert werden.
Fazit
Eine Snapchat-Clone zu programmieren ist mit den heutigen Frameworks und Cloud-Diensten gut machbar. Die größten Herausforderungen sind die Performance bei vielen Nutzern und das automatische Löschen von Inhalten. Insgesamt bietet Snapchat spannende technische Features, die man als Developer nachbauen kann.
Die wichtigsten Technologien in Kürze:
- Client-Server-Architektur
- Relationale SQL-Datenbank
- CDN für Media Content
- Push-Benachrichtigungen
- Verschlüsselung für Datenübertragung
- Automatisches Löschen auf Client und Server
Mit diesem Grundgerüst aus Komponenten lässt sich stap für Schritt eine eigene Snapchat-ähnliche App entwickeln und erweitern.