Zum Inhalt springen

Eine eigene App mit der Feedivo-API verbinden

Tutorials · Zuletzt aktualisiert am 16.08.2026

Auf dieser Seite
  1. Aufbau der Anbindung
  2. 1. API-Verknüpfung erstellen
  3. 2. Token und Feed prüfen
  4. 3. Einfachen Backend-Endpunkt bauen
  5. 4. Feed in der App laden
  6. 5. Detailansicht und Medien
  7. 6. Regelmäßigen Abgleich ergänzen

In diesem Tutorial stellt ein kleiner Backend-Endpunkt einen Feed für eine eigene App bereit. Das Feedivo-Token bleibt auf dem Server und wird weder im Browser noch im ausgelieferten App-Code veröffentlicht.

Aufbau der Anbindung#

App → dein Backend → Feedivo-API

Dein Backend authentifiziert den Nutzer deiner App, ruft Feedivo mit dem geheimen Token auf und gibt die benötigten Feed-Daten weiter. Für einen öffentlichen Website-Feed ohne eigenes Backend ist das Web-Widget einfacher.

1. API-Verknüpfung erstellen#

  1. Öffne Verknüpfungen → Individuell.
  2. Vergib einen Namen wie „Mobile App Produktion“.
  3. Wähle nur den Feed aus, den die App benötigt.
  4. Kopiere das einmal angezeigte Token direkt in den Secret-Speicher deines Backends.

Beispiel für die Umgebungskonfiguration:

FEEDIVO_TOKEN=<dein-api-token>
FEEDIVO_FEED_UUID=deine-feed-uuid

2. Token und Feed prüfen#

Prüfe zuerst serverseitig, welche Verknüpfung hinter dem Token steht:

curl -H "Authorization: Bearer $FEEDIVO_TOKEN" \
     -H "X-Feedivo-Client: meineapp-backend/1.0.0" \
     "https://feedivo.de/api/v1/me"

Rufe danach den Feed mit einer kleinen Seite ab:

curl -H "Authorization: Bearer $FEEDIVO_TOKEN" \
     "https://feedivo.de/api/v1/feeds/$FEEDIVO_FEED_UUID/posts?limit=20"

3. Einfachen Backend-Endpunkt bauen#

Das folgende PHP-Beispiel hält Token und Feed-ID auf dem Server. Es leitet außerdem den ETag der App an Feedivo weiter:

<?php
$token = getenv('FEEDIVO_TOKEN');
$feed  = getenv('FEEDIVO_FEED_UUID');

$headers = [
    'Authorization: Bearer ' . $token,
    'Accept: application/json',
    'X-Feedivo-Client: meineapp-backend/1.0.0',
];

if (!empty($_SERVER['HTTP_IF_NONE_MATCH'])) {
    $headers[] = 'If-None-Match: ' . $_SERVER['HTTP_IF_NONE_MATCH'];
}

$responseHeaders = [];
$ch = curl_init(
    'https://feedivo.de/api/v1/feeds/' . rawurlencode($feed) . '/posts?limit=20'
);
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => $headers,
    CURLOPT_HEADERFUNCTION => static function ($ch, $line) use (&$responseHeaders) {
        if (str_contains($line, ':')) {
            [$name, $value] = explode(':', $line, 2);
            $responseHeaders[strtolower(trim($name))] = trim($value);
        }
        return strlen($line);
    },
]);

$body   = curl_exec($ch);
$status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);

http_response_code($status ?: 502);
header('Content-Type: application/json; charset=utf-8');
if (isset($responseHeaders['etag'])) {
    header('ETag: ' . $responseHeaders['etag']);
}
if ($status !== 304) {
    echo $body !== false ? $body : json_encode(['error' => 'upstream_unavailable']);
}

Für einen produktiven öffentlichen Endpunkt ergänzt du eigene Authentifizierung, Rate-Limits, Zeitüberschreitungen und eine kontrollierte Fehlerantwort. Gib das Feedivo-Token niemals an den Client weiter.

4. Feed in der App laden#

Die App spricht nur mit deinem Backend:

const cachedEtag = localStorage.getItem('feedEtag');
const response = await fetch('/api/social-feed', {
  headers: cachedEtag ? { 'If-None-Match': cachedEtag } : {}
});

if (response.status === 304) {
  renderPosts(loadCachedPosts());
} else if (response.ok) {
  const envelope = await response.json();
  saveCachedPosts(envelope.data);
  localStorage.setItem('feedEtag', response.headers.get('etag') || '');
  renderPosts(envelope.data);
}

Behandle data als Liste und lies Fehler über errors[0].code. Bei einem Netzwerkfehler oder 5xx behält die App ihre letzte lokale Fassung.

5. Detailansicht und Medien#

Für eine Detailseite kannst du den bereits geladenen Post verwenden oder dein Backend den Einzelendpunkt aufrufen lassen:

GET /api/v1/feeds/{uuid}/posts/{post_id}

Karussells stehen vollständig in media. Bei YouTube verwendest du embed_url; bei Bildern und Videos helfen width und height, den Platz vor dem Laden zu reservieren.

6. Regelmäßigen Abgleich ergänzen#

Wenn dein Backend einen dauerhaften lokalen Bestand führt, verwende updated_since für neue Posts und zusätzlich regelmäßige Vollabgleiche für Löschungen und ältere Änderungen. Die vollständige Strategie steht unter Einen zuverlässigen Feed-Abgleich entwickeln.

Frage nicht beantwortet? Schreib uns — wir ergänzen die Seite.