Deep Radio – Native radio-app - Media, Entertainment & Audio Streaming case study door Score Agency
    Alle cases
    Media, Entertainment & Audio Streaming

    Deep Radio – Native radio-app

    Deep Radio

    Doorlooptijd

    1 maand

    Team

    4 specialisten

    Sector

    Media, Entertainment & Audio Streaming

    Context

    Deep Radio is al bijna 20 jaar een begrip binnen de Nederlandse dancescene. Een online radiostation dat 24 uur per dag leeft op energie, beats, shows, classics, nieuwe releases en een community die muziek niet alleen luistert, maar voelt. Voor Deep Radio ontwikkelde Score Agency een native radio-app die veel verder gaat dan een standaard streamknop. De app brengt het complete Deep Radio-gevoel naar iOS, macOS en Android: live luisteren in hoge kwaliteit, direct zien welke track draait, terugkijken naar eerder gedraaide nummers, het volledige weekschema bekijken en naadloos streamen via AirPlay of Chromecast. Wat deze app bijzonder maakt, zit onder de motorkap én in de details die gebruikers meteen voelen. Dynamic Island en Live Activities tonen live wat er draait. Lockscreen en Control Center werken alsof Deep Radio onderdeel is van het besturingssysteem zelf. Deep Radio. We Are Dance.

    De uitdaging

    Deep Radio had een app nodig die de energie van het radiostation vertaalt naar een premium, stabiele en native luisterervaring op iOS, macOS en Android.

    Specifieke uitdagingen

    • 1
      De app mocht niet aanvoelen als een standaard radioplayer, maar als een volwaardige merkervaring
    • 2
      Live audio moest stabiel blijven spelen op de achtergrond, ook tijdens dagelijks gebruik
    • 3
      iOS, macOS en Android moesten dezelfde kwaliteit en uitstraling krijgen, zonder de voordelen van native development te verliezen
    • 4
      Now-playing informatie, coverart, showdata en eerder gedraaide tracks moesten realtime beschikbaar zijn
    • 5
      Dynamic Island, Live Activities, lockscreen controls en Control Center moesten native worden ondersteund
    • 6
      Chromecast, AirPlay en lokale playback moesten slim samenwerken zonder dubbele audio of verwarrende states
    • 7
      De app moest netjes omgaan met telefoongesprekken, systeemonderbrekingen, andere audio-apps en netwerkhikkels
    • 8
      De Android-versie moest pixel-parity bieden met iOS, inclusief moderne Material3 UI en native mediabediening
    • 9
      Het platform moest meetbaar zijn met analytics voor playback, trackwissels, casting en interacties
    • 10
      De technische architectuur moest schaalbaar genoeg zijn voor nieuwe features, shows en integraties
    Onze aanpak

    Score Agency ontwikkelde een native productlijn waarin performance, platformintegratie en merkbeleving centraal stonden. Voor Apple-platformen bouwden we met SwiftUI, ActivityKit, AVAudioSession, MPNowPlayingInfoCenter, Google Cast en moderne observation APIs. Voor Android realiseerden we dezelfde ervaring native in Kotlin met Jetpack Compose, Material3, Media3 en ExoPlayer.

    Native productlijn

    Geen generieke wrapper, maar een doordachte productlijn voor iOS, macOS en Android. Apple-platformen zijn opgezet met xcodegen en project.yml, Android is native ontwikkeld in Kotlin met Jetpack Compose en Material3.

    Premium live audio

    De app ondersteunt background audio mode, een eigen AVAudioSession-configuratie en stabiele live playback. Hierdoor blijft Deep Radio betrouwbaar doorspelen terwijl gebruikers navigeren, multitasken of hun telefoon vergrendelen.

    Dynamic Island & Live Activities

    Voor iOS 16.1+ ontwikkelden we een eigen ActivityKit widget extension. Compact, expanded en minimal states tonen het Deep Radio-logo, waveform-icoon, LIVE-badge, artiest en titel.

    Gedeelde now-playing state

    App en widget delen dezelfde live status via DeepFMNowPlayingAttributes. Daardoor blijven Dynamic Island, Live Activities en de app-interface synchroon met wat er daadwerkelijk op de zender draait.

    Chromecast-integratie

    Met Google Cast SDK 4.8.4, Bonjour discovery via NSBonjourServices en custom GCKMediaMetadata kunnen luisteraars de livestream casten inclusief titel, artiest en 512x512 artwork.

    Slim cast session management

    Wanneer een cast-sessie start, pauzeert lokale playback automatisch. Bij disconnect hervat de app de lokale stream weer op een logische manier via GCKSessionManager.

    Native SwiftUI cast-button

    De cast-functionaliteit is verwerkt in een herkenbare SwiftUI knop met SF Symbol tv, gekoppeld aan presentCastDialog(). Daardoor voelt casten native, snel en vertrouwd.

    Lockscreen & Control Center

    MPNowPlayingInfoCenter en MPRemoteCommandCenter zorgen voor native mediabediening, live stream status, shownaam in het albumveld, elapsed playback time en artwork dat on-demand wordt geschaald via UIGraphicsImageRenderer.

    Reconnect zonder frustratie

    Een 8 seconden grace period en 15 seconden cooldown voorkomen flapping bij korte netwerkstoringen. De app reageert daardoor rustig, voorspelbaar en professioneel.

    Realtime audio visualisatie

    De VU-meter is opgebouwd als synthesized animatie op 24 fps met sinusoïdale drift en jitter. Hierdoor werkt de visualisatie ook bij live HLS en MP3-streams zonder afhankelijk te zijn van MTAudioProcessingTap.

    DJ scratch-effect

    Voor extra merkbeleving bouwden we een scratch-effect met een dubbele AVAudioEngine-opzet: AVPlayer voor de main stream en een aparte engine met AVAudioUnitTimePitch.

    Moderne iOS-architectuur

    De app gebruikt @Observable en @State op iOS 17+ voor moderne state management zonder Combine-boilerplate. Now-playing en history worden opgehaald met async/await polling.

    Platform conditional compilation

    Met #if os(iOS) blijven Cast, ActivityKit en Firebase netjes buiten de macOS-build. Zo blijft elke target schoon, onderhoudbaar en platformgericht.

    Realtime data-integraties

    De app gebruikt de Backstage API voor live trackmetadata en verwerkt het programmaschema van deep.radio via HTML-schedule parsing met Regex voor shownaam, tijd en artwork.

    Type-safe analytics

    Firebase Analytics is ingericht met type-safe events voor track changes, playback, castgebruik en scratch-interacties. Zo ontstaat inzicht zonder rommelige eventstructuren.

    Android parity

    De Android-app gebruikt Media3 1.5.0, ExoPlayer, adaptive bitrate streaming, ICY-metadata extractie, MediaSession, MediaSessionService en Coil voor artwork caching.

    Resultaat
    3
    Platformen
    iOS, macOS en native Android
    3 states
    Dynamic Island
    Compact, expanded en minimal
    AirPlay + Cast
    Casting
    Native streaming naar speaker, tv en auto
    24/7
    Live audio
    Stabiele achtergrondweergave
    24 fps
    Realtime UI
    Synthesized VU-meter animatie
    Type-safe
    Analytics
    Playback, cast en interacties meetbaar

    Techniek & Aanpak

    SwiftUIxcodegenproject.ymlActivityKitLive ActivitiesDynamic IslandWidget ExtensionAVAudioSessionAVAudioEngineAVPlayerGoogle Cast SDK

    Vergelijkbare uitdaging?

    We bespreken graag hoe we jouw project tot een succes kunnen maken.

    Neem contact op

    Gecertificeerd & Compliant

    Score Agency is ISO 27001 gecertificeerd en volledig AVG/GDPR compliant.