Das Manifest schreiben
Jedes Feld, was es bedeutet und welche Grenzen gelten — das Manifest ist ein geschlossener Vertrag, unbekannte Felder werden abgelehnt.
Für EntwicklerVoraussetzungen
- Eigener Server mit HTTPS
- Erreichbare Datenschutz-, Bedingungs- und Support-Seite
Das Manifest beschreibt, was die App ist und was sie darf. Es ist ein GESCHLOSSENER Vertrag: ein Feld, das hier nicht vorgesehen ist, führt zur Ablehnung — nicht zum stillen Ignorieren. Das ist Absicht, weil ein stillschweigend verworfenes Feld sonst als Zusage gelesen würde, die nie gegolten hat.
`schemaVersion` ist 1, `apiVersion` ist „v1". `appUrl` ist die HTTPS-Adresse der extern gehosteten App, die im Dashboard eingebettet wird. `redirectUris` braucht mindestens einen Eintrag und höchstens zehn; die Adressen werden beim OAuth-Ablauf EXAKT verglichen, nicht per Präfix. `surface` darf derzeit nur „app.home" sein — andere Oberflächen gibt es noch nicht, und eine zu behaupten wäre eine Zusage ohne Einlösung.
`requiredScopes` sind die Rechte, ohne die die App nicht läuft — der Wirt kann sie nicht abwählen. `optionalScopes` darf er einzeln abwählen, die App muss dann ohne sie funktionieren. Zusammen sind höchstens 32 Rechte erlaubt. Verlangt werden darf nur, was eine tatsächlich vorhandene REST-Operation abdeckt.
`dataPurpose`, `retentionDays`, `hostingCountry` und `protectedData` sind die Datenschutzangaben, die der Wirt beim Zustimmen liest. Der Zweck darf bis 2000 Zeichen lang sein und soll im Klartext stehen, nicht in Juristensprache. `retentionDays: 0` heißt: nichts wird dauerhaft gespeichert — eine Zusage, die man einhalten muss. `hostingCountry` ist ein Länderkürzel aus zwei Großbuchstaben. Diese Angaben sind Ihre Zusage, nicht unsere Prüfung; sie stehen dem Wirt dauerhaft vor Augen.
`webhookUrl` ist optional. Ohne sie erfährt die App nichts von Ereignissen wie einer Deinstallation oder einer Löschaufforderung — dann muss sie selbst nachfragen. Zugangsdaten gehören NIEMALS ins Manifest: es wird gespeichert, geprüft und dem Wirt angezeigt.
Schritt für Schritt
Kleinstes Rechteset bestimmen
Für jede Funktion der App die eine REST-Operation nennen, die sie braucht. Was übrig bleibt, ist das Rechteset. Was sich nicht so begründen lässt, gehört nicht hinein.
Zweck im Klartext schreiben
Ein Wirt muss nach zwei Sätzen wissen, was mit seinen Daten passiert. „Verbesserung unserer Dienste" ist kein Zweck.
Aufbewahrung ehrlich angeben
Wer 30 Tage speichert, schreibt 30 — nicht 0. Die Angabe ist im Zustimmungsfenster sichtbar und damit Teil dessen, wozu der Wirt zustimmt.
Version anlegen
Die Prüfung des Manifests läuft sofort beim Anlegen der Version; Fehler werden benannt, bevor etwas eingereicht ist.
Codebeispiel
{ "schemaVersion": 1, "apiVersion": "v1", "appUrl": "https://menu-display.example.invalid/", "redirectUris": [ "https://menu-display.example.invalid/oauth/callback" ], "requiredScopes": ["menu:read"], "optionalScopes": [], "dataPurpose": "Anzeige der Speisekarten-Metadaten im Dashboard. Keine Gästedaten, keine dauerhafte Speicherung — Sitzungen liegen höchstens 15 Minuten im Arbeitsspeicher.", "retentionDays": 0, "hostingCountry": "AT", "webhookUrl": "https://menu-display.example.invalid/webhooks", "privacyUrl": "https://menu-display.example.invalid/privacy", "termsUrl": "https://menu-display.example.invalid/terms", "supportUrl": "https://menu-display.example.invalid/support", "protectedData": false, "surface": "app.home"}Meldungen, die hierher gehören
Siehe auch
- Eine App anlegen, einreichen und veröffentlichenVom Entwurf über die Prüfung bis in den Katalog — welche Zustände es gibt, was die Prüfung verlangt und woran Einreichungen scheitern.
- Beispiel-App: von null auf eine laufende ErweiterungEine vollständige, kleine App im Repository — Manifest, Server und Anbindung. Der kürzeste Weg zu einer Erweiterung, die wirklich läuft.
- Apps: Zugriff auf die installierte ErweiterungWie eine installierte App ihre Metadaten, Manifest und Abrechnung liest; nur die App-Installation darf diese Route aufrufen.