Eine eigene App mit der Feedivo-API verbinden
Auf dieser Seite
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#
- Öffne Verknüpfungen → Individuell.
- Vergib einen Namen wie „Mobile App Produktion“.
- Wähle nur den Feed aus, den die App benötigt.
- 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.