Veröffentlichung unseres neu geschriebenen Android SDK
Im April 2018 stellten wir ein neu geschriebenes Android SDK vor. Unser Java SDK ließ sich zwar bereits in Android-Projekten nutzen, und es gab schon eine frühere Android-Integration. Die Neufassung bot jedoch eine API, die besser zu unseren übrigen SDKs passte.

Die Android-Integration baute auf dem Java SDK auf und ergänzte das asynchrone Einreichen von Assemblies sowie das Pausieren und Fortsetzen von Uploads. Eine App konnte weiter auf Benutzereingaben reagieren, während Dateien hochgeladen und verarbeitet wurden, und dabei Callbacks zu Fortschritt und Abschluss empfangen.
Sicherheitsupdate, September 2026: Das ursprüngliche Beispiel mit der SDK-Version
0.0.2 übergab ein
Auth Secret innerhalb einer Android-Activity an das SDK.
Dadurch würde das Auth Secret mit der App verteilt. Die ausführbaren Activity-Beispiele wurden
unten ersetzt. Bewahren Sie das Auth Secret auf einem vertrauenswürdigen Backend auf, auch wenn
Sie die App nur intern verteilen. Das Backend muss den Benutzer authentifizieren und den Upload
autorisieren, bevor es Parameter signiert.
Befolgen Sie unsere Anleitung zu Signature Authentication und
verlangen Sie Signaturen für den Workspace oder das Template, den bzw. das die App nutzt.
Der Android-Client 0.0.2 bot keinen Konstruktor, der ein Argument vom Typ
SignatureProvider akzeptierte. Den auf dem Auth Secret basierenden Activity-Code dieser Version
beizubehalten und lediglich eine Backend-URL hinzuzufügen, würde das Problem nicht lösen. Eine
Integration benötigt eine unterstützte API für externes Signieren oder einen anderen Anfrageweg.
Die Veröffentlichung verwendete ursprünglich die Gradle-Konfiguration
compile und nannte Maven Central und JCenter als Installationsquellen.
Das waren die Installationsanweisungen für 0.0.2, keine aktuelle
Build-Konfiguration. Der Ablauf im Hintergrund sah so aus:
- Implementieren Sie einen Assembly-Listener, um Upload-Fortschritt, Upload-Abschluss, Verarbeitungsabschluss, Upload-Fehler und Fehler bei Statusaktualisierungen zu empfangen.
- Erstellen Sie den Android-Client und eine asynchrone Assembly, die mit dem Kontext und dem Listener der Activity verknüpft ist.
- Hängen Sie ein lokales Bild an und fügen Sie einen
Step mit
/image/resizehinzu. Setzen Sie Breite und Höhe auf jeweils 75 Pixel undresize_strategyaufpad. - Reichen Sie die Assembly ein und führen Sie andere Aufgaben weiter aus, während der Listener den Fortschritt meldet. Upload-Abschluss und erfolgreiche Verarbeitung sind getrennte Ereignisse.
Das alte Beispiel vermischte die Variablennamen androidAsyncAssembly und
assembly. Es eignet sich nicht als Activity zum Kopieren in ein aktuelles
Projekt. Das folgende kleinere Beispiel behält die Größenänderung bei und zeigt, wie das Signieren
in späteren Versionen abgegrenzt wird, ohne vom Lebenszyklus einer Activity abzuhängen.
Es verwendet Android SDK 0.2.0 mit Java SDK
2.2.4. Beide sind auf Maven Central veröffentlicht. Dies sind spätere
Versionen, nicht die 2018 angekündigten Versionen. Die veröffentlichte POM-Datei des
Android-Artefakts enthält keine Angaben zu seinen Abhängigkeiten. Gehen Sie daher nicht davon aus,
dass das Hinzufügen der AAR allein auch deren Abhängigkeiten installiert.
Verwenden Sie für eine vollständige Android-Integration die Abhängigkeitsliste im
Android-Build mit Versions-Tag
und überprüfen Sie diese im Build Ihrer App.
Diese Hilfsfunktion akzeptiert eine Implementierung von SignatureProvider aus Ihrer
bestehenden Backend-Integration. Sie enthält weder geheime Zugangsdaten noch einen Signier-Endpunkt:
import com.transloadit.android.sdk.AndroidTransloadit;
import com.transloadit.sdk.Assembly;
import com.transloadit.sdk.SignatureProvider;
import java.io.File;
import java.util.HashMap;
import java.util.Map;
public final class ImageUpload {
private ImageUpload() {}
public static AndroidTransloadit createClient(
String authKey, SignatureProvider approvedSignatures) {
return new AndroidTransloadit(authKey, approvedSignatures);
}
public static void addImage(Assembly assembly, File image) {
assembly.addFile(image, "image");
Map<String, Object> stepOptions = new HashMap<>();
stepOptions.put("width", 75);
stepOptions.put("height", 75);
stepOptions.put("resize_strategy", "pad");
assembly.addStep("resize", "/image/resize", stepOptions);
}
}
Der Provider empfängt serialisierte Parameter und gibt die Signatur des Backends für genau diese
Bytes zurück. Schlägt die Autorisierung oder das Signieren fehl, löst er eine Ausnahme aus. Ihr
Server muss die zulässigen Steps oder das zulässige Template, Ziele, Dateigrenzen und eine kurze
Gültigkeitsdauer durchsetzen. Er darf keinen beliebigen JSON-Anfragetext signieren, nur weil der
Aufrufer angemeldet ist. Bei einem festen Ablauf kann ein serverseitig ausgewähltes
Template mit deaktiviertem allow_steps_override
die Verarbeitungsanweisungen unter Kontrolle des Servers halten. Senden Sie das Auth Secret nicht
an den Provider zurück.
In einer Android-App erstellt die spätere API eine Instanz von AndroidAssembly mit
newAssembly(listener, context), wobei der Listener AndroidAssemblyListener implementiert.
Diese Assembly kann an ImageUpload.addImage übergeben und anschließend mit
saveAsync() eingereicht werden.
Der Fortschritts-Callback heißt onUploadProgress. Führen Sie Netzwerkoperationen
außerhalb des UI-Threads aus und binden Sie Callbacks an den tatsächlichen Lebenszyklus der App.
Prüfen Sie den Antwortstatus und hasError() zusätzlich zur Behandlung von
Ausnahmen. Eine API-Fehlerantwort wird nicht zwangsläufig als Ausnahme ausgelöst.
Die obige Hilfsfunktion deckt die Client-Einrichtung und Bildkonfiguration ab. Sie implementiert
keine Zeitplanung für Hintergrundaufgaben und überprüft nicht das Pausieren und Fortsetzen
auf einem Gerät.
Einzelheiten zu der Version, die Sie integrieren, finden Sie im Quellcode des Android SDK und in der API-Referenz. Die ursprüngliche Veröffentlichung erleichterte die Integration von Android-Uploads. Wenn Sie diesen Ablauf heute in eine App übernehmen, muss das Signieren auf Ihrem Backend bleiben.
