English Documentation: Here you can access the English documentation.
Ziel des Plugin SDKs ist es, die Entwicklung von Plugins zu vereinfachen, indem wir ein User Interface bereitstellen und damit die Kommunikation mit unserem Server auf ein Minimum beschränken. Du musst dich nicht in unsere APIs einarbeiten.
Das Plugin SDK muss in einem Iframe eingebunden werden. Der pixx.io-Nutzer kann sich innerhalb des Plugin SDKs anmelden und Bilder auswählen. Werden Bilder im Plugin SDK vom Nutzer ausgewählt, wird eine Liste der Bilder an das Plugin geschickt. Die Liste enthält einen Download-Link sowie ein paar Metadaten. Das Plugin muss sich dann um den Download der Dateien kümmern.
Da das Plugin sich um den Download der Dateien kümmert, muss es dem Plugin SDK Informationen über den aktuellen Progress des Downloads schicken.
Das Plugin SDK ist in 2 Sprachen verfügbar. Benutze bitte jeweils die vom Nutzer gewünschte Sprache:
Diese Schritte reichen in der Praxis aus, um das SDK lauffaehig zu integrieren:
applicationId einbinden.onSdkReady warten.setAllowedFileTypes, setAllowedDownloadFormats, setButtonText, useDirectLinks).downloadFiles oder directLinksCreated reagieren.setDownloadProgress, setDownloadComplete oder setDownloadFailed).<iframe
id="pixxio-plugin-sdk"
src="https://plugin.pixx.io/static/v1/de/media?applicationId=YOUR_APPLICATION_ID"
style="width: 100%; height: 100%; border: 0"
></iframe>
const iframe = document.getElementById('pixxio-plugin-sdk');
const sdkOrigin = 'https://plugin.pixx.io';
function sendToSdk(method, parameters = []) {
iframe.contentWindow.postMessage(
{
receiver: 'pixxio-plugin-sdk',
method,
parameters
},
sdkOrigin
);
}
window.addEventListener('message', async (event) => {
if (event.origin !== sdkOrigin) {
return;
}
const data = event.data;
if (!data || data.sender !== 'pixxio-plugin-sdk') {
return;
}
switch (data.method) {
case 'onSdkReady':
sendToSdk('setButtonText', ['Auswahl uebernehmen']);
sendToSdk('setAllowedDownloadFormats', [['original', 'jpg', 'png']]);
break;
case 'downloadFiles': {
const [files] = data.parameters ?? [[]];
await downloadFiles(files);
break;
}
case 'directLinksCreated': {
const [files] = data.parameters ?? [[]];
await processDirectLinks(files);
break;
}
case 'onError': {
const [error] = data.parameters ?? [];
console.error('Plugin SDK Error', error);
break;
}
default:
break;
}
});
async function downloadFiles(files) {
try {
for (let i = 0; i < files.length; i++) {
const file = files[i];
await fetch(file.downloadURL);
const progress = Math.round(((i + 1) / files.length) * 100);
sendToSdk('setDownloadProgress', [progress]);
}
sendToSdk('setDownloadComplete');
} catch {
sendToSdk('setDownloadFailed');
}
}
async function processDirectLinks(files) {
console.log('Received direct links', files);
}
onSdkReady empfangendownloadFiles oder directLinksCreated empfangenZur Kommunikation benutzen wir PostMessage.
Das Plugin SDK sendet und empfängt verschiedene Nachrichten als JavaScript Objekt. Der Aufbau ist dabei immer gleich:
interface PluginSdkEvent {
sender: 'pixxio-plugin-sdk';
method: string;
parameters?: unknown[];
}
interface PluginSdkEvent {
receiver: 'pixxio-plugin-sdk';
method: string;
parameters?: unknown[];
}
window.addEventListener('message', (event) => {
if (event.origin !== 'https://plugin.pixx.io') {
return;
}
const data = event.data;
if (data.sender === 'pixxio-plugin-sdk') {
switch (data.method) {
case 'downloadFiles':
// Do stuff
break;
...
}
}
});
iframe.contentWindow.postMessage(
{
receiver: 'pixxio-plugin-sdk',
method: 'login'
},
'https://plugin.pixx.io'
);
downloadFilesDer Nutzer hat Dateien ausgewählt und diese müssen nun vom Plugin heruntergeladen werden.
| Name | Type | Comment |
|---|---|---|
| files | array | The files to download |
The type of files looks like this:
interface File {
id: number;
downloadURL: string;
fileName: string;
fileSize: number;
originalWidth: number;
originalHeight: number;
previewFileWidth: number;
previewFileHeight: number;
downloadFormat: string; // original | preview | the file extension
subject: string | undefined;
description: string | undefined;
metadata?: { [key: string]: any };
licenseReleases: {
expires: string;
licenseRelease: {
license: {
provider: string;
};
name: string;
};
}[];
}
{
"sender": "pixxio-plugin-sdk",
"method": "downloadFiles",
"parameters": [
{
"id": 1,
"downloadURL": "https://demo.px.media/.../demo.jpg",
"fileName": "demo.jpg",
"fileSize": 223651
},
{
"id": 2,
"downloadURL": "https://demo.px.media/.../demo.jpg",
"fileName": "demo.jpg",
"fileSize": 515546
}
]
}
directLinksCreatedDer Nutzer hat Dateien ausgewählt und diese werden nun als Direct-Link übergeben.
| Name | Type | Comment |
|---|---|---|
| files | array | The files with direct links |
The type of files looks like this:
interface File {
id: number;
directLink: string;
fileName: string;
fileSize: number;
originalWidth: number;
originalHeight: number;
previewFileWidth: number;
previewFileHeight: number;
directLinkFormat: string; // original | preview | the file extension
subject: string | undefined;
description: string | undefined;
metadata?: { [key: string]: any };
licenseReleases: {
expires: string;
licenseRelease: {
license: {
provider: string;
};
name: string;
};
}[];
}
{
"sender": "pixxio-plugin-sdk",
"method": "directLinksCreated",
"parameters": [
{
"id": 1,
"directLink": "https://demo.px.media/.../demo.jpg",
"fileName": "demo.jpg",
"fileSize": 223651
},
{
"id": 2,
"directLink": "https://demo.px.media/.../demo.jpg",
"fileName": "demo.jpg",
"fileSize": 515546
}
]
}
onSdkReadyDas Plugin-SDK ist erst nach dieser Nachricht bereit, Nachrichten via PostMessage zu empfangen
Hinweis: Eingehende login-Nachrichten vor onSdkReady werden ignoriert.
None
{
"sender": "pixxio-plugin-sdk",
"method": "onSdkReady",
"parameters": []
}
loginSuccessDer Nutzer hat sich erfolgreich bei seinem Mediaspace angemeldet. Auf dieses Event muss nur gehört werden, wenn das Plugin die Nutzerdaten verwalten muss, um zum Beispiel einen Sync im Hintergrund zu ermöglichen.
| Name | Type | Comment |
|---|---|---|
| mediaspaceDomain | string | The domain of the pixx.io mediaspace |
| refreshToken | string | The refresh-token provided by pixx.io |
{
"sender": "pixxio-plugin-sdk",
"method": "loginSuccess",
"parameters": [
{
"mediaspaceDomain": "demo.px.media",
"refreshToken": "1213456789abc"
}
]
}
logoutSuccessDer Nutzer hat sich bei seinem Mediaspace abgemeldet. Auf dieses Event muss nur gehört werden, wenn das Plugin die Nutzerdaten verwalten muss. Gespeicherte Nutzerdaten müssen dann gelöscht werden.
None
{
"sender": "pixxio-plugin-sdk",
"method": "logoutSuccess"
}
onErrorEs ist ein Fehler im Plugin-SDK aufgetreten. Durch dieses Callback hat das native Plugin die Möglichkeit einen Fehler anzuzeigen.
| Name | Type | Comment |
|---|---|---|
| error | object | The error object |
{
"sender": "pixxio-plugin-sdk",
"method": "onError",
"parameters": [
{
"errorCode": 1234,
"errorMessage": "This is an error"
}
]
}
selectionChangeDer Nutzer hat eine oder mehrere Dateien aus- oder abgewählt. Diese Nachricht wird gesendet, sobald sich die Auswahl ändert.
| Name | Type | Comment |
|---|---|---|
| selectedItems | array | The currently selected items |
The type of selectedItems looks like this:
interface SelectedItem {
id: number;
fileName: string;
previewUrl: string;
}
{
"sender": "pixxio-plugin-sdk",
"method": "selectionChange",
"parameters": [
[
{
"id": 1,
"fileName": "demo.jpg",
"previewUrl": "https://demo.px.media/.../preview1.jpg"
},
{
"id": 2,
"fileName": "image.png",
"previewUrl": "https://demo.px.media/.../preview2.jpg"
}
]
]
}
Du kannst auch Nachrichten an das Plugin SDK senden. Die Nachrichten müssen dabei folgenden Aufbau haben:
{
receiver: 'pixxio-plugin-sdk';
method: string;
parameters?: unknown[];
}
Example:
iframe.contentWindow.postMessage(
{
receiver: 'pixxio-plugin-sdk',
method: 'login',
parameters: [
{
refreshToken: '123456789abc',
mediaspaceDomain: 'demo.px.media'
}
]
},
'https://plugin.pixx.io'
);
Folgende Events versteht das Plugin SDK aktuell:
setDownloadProgressBenachrichte das Plugin SDK über den aktuellen Fortschritt des Downloads. Da der Download bei großen Dateien ein wenig dauern kann, empfehlen wir, aller 5 Sekunden ein Update zu senden.
| Name | Type | Comment |
|---|---|---|
| progress | number | Progress in percent e.g. 50% => 50 |
{
receiver: 'pixxio-plugin-sdk',
method: 'setDownloadProgress',
parameters: [25]
}
setDownloadCompleteBenachrichtige das Plugin SDK, dass der Download der Dateien abgeschlossen ist.
None
{
receiver: 'pixxio-plugin-sdk',
method: 'setDownloadComplete'
}
setDownloadFailedBenachrichtige das Plugin SDK, dass der Download der Dateien fehlgeschlagen ist.
None
{
receiver: 'pixxio-plugin-sdk',
method: 'setDownloadFailed'
}
loginMelde dich im Plugin SDK an. Diese Funktion wird nur benötigt, wenn der Login von der Auswahl der Medien getrennt ist.
| Name | Type | Comment |
|---|---|---|
| refreshToken | string | The refresh-token provided by pixx.io |
| mediaspaceDomain | string | The domain of the pixx.io mediaspace |
{
receiver: 'pixxio-plugin-sdk',
method: 'login',
parameters: [
{
refreshToken: '123456789abc',
mediaspaceDomain: 'demo.px.media'
}
]}
logoutMeldet den Nutzer im Plugin-SDK ab.
None
{
receiver: 'pixxio-plugin-sdk',
method: 'logout',
parameters: []
}
setAllowedFileTypesSetzt einen Filter auf allen Medien-Ansichten nach diesen File-Extensions. Dieser kann vom Nutzer nicht entfernt werden.
| Name | Type | Comment |
|---|---|---|
| fileExtensions | string[] | A list of file extensions e.g. ['jpg', 'png'] |
{
receiver: 'pixxio-plugin-sdk',
method: 'setAllowedFileTypes',
parameters: [['jpg', 'png']]
}
setAllowedDownloadFormats
Schränkt die zur Verfügung stehenden Download-Optionen ein.
Mögliche Werte sind original, preview, jpg, png, pdf, tiff, webp.
| Name | Type | Comment |
|---|---|---|
| formats | string[] | A list of file extensions e.g. ['jpg', 'png'] |
{
receiver: 'pixxio-plugin-sdk',
method: 'setAllowedDownloadFormats',
parameters: [['jpg', 'png']]
}
showErrorZeigt einen Fehler als Notification an.
| Name | Type | Comment |
|---|---|---|
| error | string | The error message for the user |
{
receiver: 'pixxio-plugin-sdk',
method: 'showError',
parameters: ["This is an error"]
}
setButtonTextSetzt den Text des primären Buttons im Footer des Plugin SDK.
| Name | Type | Comment |
|---|---|---|
| text | string | The text shown on the button |
{
receiver: 'pixxio-plugin-sdk',
method: 'setButtonText',
parameters: ['Auswahl übernehmen']
}
useDirectLinksAktiviert oder deaktiviert den Modus für Direct Links zur Laufzeit.
| Name | Type | Comment |
|---|---|---|
| useDirectLinks | boolean | true: Direct Links, false: regulärer Download |
{
receiver: 'pixxio-plugin-sdk',
method: 'useDirectLinks',
parameters: [true]
}
resetNavigationSetzt die Navigation im Plugin SDK auf die Startansicht zurück.
None
{
receiver: 'pixxio-plugin-sdk',
method: 'resetNavigation'
}
Um das Plugin-SDK initial zu konfigurieren stehen eine Reihe von Query-Parametern zur verfügung:
standaloneLoginWenn der Login separat ausgeführt werden soll. Ist dieser Schalter aktiv, leitet die Login-Seite nicht automatisch zur nächsten Seite weiter. Statdessen übermittelt sie den Login-Erfolg via PostMessage.
https://plugin.pixx.io/static/v2/de/login?standaloneLogin=true
darkSchaltet das Plugin-SDK in den Dark-Mode.
https://plugin.pixx.io/static/v2/de/login?dark=true
allowedFileTypesFiltert die Medien-Ansichten nach diesen File-Extensions.
https://plugin.pixx.io/static/v2/de/media?allowedFileTypes=jpg&allowedFileTypes=png&allowedFileTypes=tiff
allowedDownloadFormats
Filtert die Auswahl der möglichen Formate zum Herunterladen von Dateien. Nur die mitgegebenen Formate stehen zur Auswahl. Wenn kein Wert angegeben wird, stehen alle Formate zur Auswahl.
Mögliche Werte sind original, preview, jpg, png, pdf, tiff und webp.
https://plugin.pixx.io/static/v2/de/media?allowedDownloadFormats=jpg&allowedDownloadFormats=png&allowedDownloadFormats=tiff
applicationId
Die applicationId ist Pflicht und muss immer mitgegeben werden.
Wenn du noch keine applicationId hast, kannst du diese bei unserem Support anfragen: support@pixx.io
https://plugin.pixx.io/static/v2/de/media?applicationId=sadfjhoahsdfosahf
multiSelectOb Multi-Select in der Medienansicht möglich ist oder nicht.
https://plugin.pixx.io/static/v2/de/media?multiSelect=true
hideLinksBlendet diverse Links innerhalb des SDK aus. Mögliche Werte sind mediaspace und help.
https://plugin.pixx.io/static/v2/de/media?hideLinks=mediaspace&hideLinks=help
selectButtonTextÄndert den Text des Auswahl-Buttons.
https://plugin.pixx.io/static/v2/de/media?selectButtonText=Submit
metadataSteuert, welche Metadaten beim Download mitgeschickt werden. Als Wert können alle Namen der im Mediaspace konfigurierten Metadaten genutzt werden.
Hinweis: Es werden nur Werte aus den wichtigen Metadaten (importantMetadata) der Datei übertragen.
https://plugin.pixx.io/static/v2/de/media?metadata=Alt-Text&metadata=Custom_Field
useDirectLinksEs wird das directLinksCreated statt dem downloadFiles Event gefeuert. Im Ergebnis stehen dann Direct-Links (siehe directLinksCreated).
https://plugin.pixx.io/static/v2/de/media?metadata=Alt-Text&useDirectLinks=true
hideSelectionFooterBlendet den Selection-Footer im Plugin-SDK aus, der normalerweise die Anzahl der ausgewählten Dateien anzeigt.
https://plugin.pixx.io/static/v2/de/media?hideSelectionFooter=true
hideAvatarBlendet den Avatar-Bereich im Header des Plugin-SDK aus.
https://plugin.pixx.io/static/v1/de/media?hideAvatar=true
backgroundColorÜberschreibt die Hintergrundfarbe des SDK. Geeignet für eine visuelle Anpassung an das Host-Plugin.
https://plugin.pixx.io/static/v1/de/media?backgroundColor=%23f4f6f8
onSdkReady kommt nie anMögliche Ursachen:
https://plugin.pixx.io/static/v1/....So behebst du es:
window.addEventListener('message', ...) direkt beim App-Start.Mögliche Ursachen:
event.origin wird auf einen falschen Host geprüft.data.sender === 'pixxio-plugin-sdk' geprüft.So behebst du es:
https://plugin.pixx.io.event.origin, dann data.sender, dann data.method.Mögliche Ursachen:
applicationId fehlt in der URL.applicationId ist falsch oder nicht freigeschaltet.So behebst du es:
applicationId als Query-Parameter.applicationId.downloadFilesMögliche Ursachen:
So behebst du es:
setDownloadProgress.setDownloadComplete oder setDownloadFailed.Mögliche Ursachen:
So behebst du es:
allowedFileTypes, allowedDownloadFormats, hideLinks....&allowedFileTypes=jpg&allowedFileTypes=png.Die Parameter-Struktur wurde von positionalen Argumenten auf ein einzelnes Konfigurationsobjekt umgestellt.
[refreshToken, userIdentifier, mediaspace][{ refreshToken: string, mediaspaceDomain: string }]userIdentifier wurde entfernt.mediaspace wurde in mediaspaceDomain umbenannt.