Android · Kotlin
→
Strukturiertes JSON
Zahlungsergebnis
EmpfängerSanitär Krause
Betrag359,44 EUR
IBANDE58 5705 0120 0094 7103 28
VerwendungszweckRechnung 2026-0417
IBAN durch Docutain validiert
Aktualisiert am
10 Min. Lesezeit
Von Marvin Frankenfeld
Fotoüberweisung unter Android mit Kotlin integrieren
Diese Anleitung zeigt, wie Sie mit Kotlin und dem Docutain SDK 1.9.0.0 einen produktionsreifen Prozess von der Rechnung bis zum vorausgefüllten Überweisungsformular umsetzen.
Nutzer können eine Papierrechnung scannen, ein PDF oder Bild importieren oder einen GiroCode erfassen. Docutain gibt die erkannten Zahlungsdaten als JSON zurück und liefert dabei ausschließlich gültige IBANs. Die Banking-App kann anschließend ihre Geschäftsregeln anwenden und das eigene Überweisungsformular vorausfüllen.
Erkennung und IBAN-Validierung laufen lokal auf dem Gerät. Nutzerbestätigung, bankeigene Zahlungsregeln, Authentifizierung und die eigentliche SEPA-Überweisung bleiben vollständig unter Kontrolle der Banking-App.
- SDK-Version
- Android 1.9.0.0
- Mindestversion
- Android 6.0 / API 23
- Eingaben
- Kamera, PDF, Bild, GiroCode
- Verarbeitung
- 100 % lokal und offline
Direkt zum Kotlin-Setup
Der Zahlungsprozess im Überblick
Eine robuste Fotoüberweisung trennt Datenerfassung und Zahlungsfreigabe klar voneinander:
- Der Nutzer öffnet den Zahlungsprozess in der Banking-App.
- Docutain scannt oder importiert die Rechnung und prüft, ob ein GiroCode vorhanden ist.
- Ist kein nutzbarer GiroCode vorhanden, extrahiert das SDK die Zahlungsdaten aus dem sichtbaren Rechnungstext.
- Das SDK gibt strukturierte JSON-Daten an die Host-App zurück.
- Die App wendet ihre Geschäftsregeln an und zeigt die Daten zur Kontrolle, bevor ihr etablierter Freigabeprozess startet.
Damit erhalten Nutzer einen gemeinsamen Einstieg für Rechnungen mit und ohne QR-Code. Die Zahlungsabwicklung bleibt außerhalb des SDK und innerhalb der bestehenden Kontrollmechanismen der Bank.
Was sich mit Docutain SDK 1.9 ändert
Seit Version 1.9 kann Photo Payment GiroCode-Daten direkt extrahieren. Die Option allowGiroCode ist standardmäßig aktiviert; ein separater Barcode-Prozess ist für diesen Anwendungsfall daher nicht mehr nötig.
- Ein gemeinsamer Prozess: GiroCode und Rechnungs-OCR werden innerhalb derselben Fotoüberweisung verarbeitet.
- Teilen und Öffnen: Unter Android lassen sich eingehende PDFs und Bilder über
openWithIntent weiterreichen.
- Passende Nutzerführung: Die Photo-Payment-Standardinhalte für Onboarding und Scan-Tipps berücksichtigen auch GiroCodes.
- Lokale Verarbeitung: QR-Daten und Zahlungsinformationen aus der Rechnung werden auf dem Gerät ausgewertet.
Android-Voraussetzungen
| Komponente | Anforderung für SDK 1.9.0.0 |
| Sprache | Kotlin in dieser Anleitung; Java wird ebenfalls unterstützt |
| Android-Mindestversion | Android 6.0 / API-Level 23 |
| Compile SDK | API-Level 34 oder höher |
| Android Gradle Plugin | 8.0.2 oder höher |
| Lizenz | Ein Schlüssel passend zur applicationId der App |
| Testgerät | Ein physisches Gerät mit rückseitiger Kamera |
Docutain SDK 1.9.0.0 hinzufügen und initialisieren
1. Die beiden Photo-Payment-Module hinzufügen
Stellen Sie sicher, dass Maven Central konfiguriert ist, und fügen Sie anschließend UI und DataExtraction im App-Modul hinzu:
def docutainSdkVersion = '1.9.0.0'
implementation("de.docutain:Docutain-SDK-UI:$docutainSdkVersion")
implementation("de.docutain:Docutain-SDK-DataExtraction:$docutainSdkVersion")
2. Das SDK initialisieren
Initialisieren Sie Docutain, bevor SDK-Funktionen verfügbar werden. Der Platzhalter muss durch den Lizenzschlüssel für die exakte applicationId der App ersetzt werden.
import de.docutain.sdk.DocutainSDK;
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
if(!DocutainSDK.initSDK(this.application, "<YOUR-LICENSE-KEY>")){
//init of Docutain SDK failed, get the last error message
val error = DocutainSDK.getLastError()
//your logic to deactivate access to SDK functionality
}
}
}
Nachdem initSDK() den Wert false zurückgegeben hat, darf die Scanaktion nicht fortgesetzt werden. Protokollieren oder zeigen Sie getLastError() gemäß Ihrem Supportkonzept, ohne sensible Informationen offenzulegen.
Fotoüberweisung starten
Registrieren Sie den Activity-Result-Contract einmalig und starten Sie ihn über die Zahlungsaktion Ihrer App:
import de.docutain.sdk.ui.PhotoPaymentConfiguration
import de.docutain.sdk.ui.PhotoPaymentResult
val photoPaymentResult = registerForActivityResult(PhotoPaymentResult()) { data ->
if(data != null){
if(data.isNotEmpty()){
// data is a JSON string containing the information
// extract the fields you need and pass it on to your payment sheet
} else{
// no data was extracted at all
// Note: this case is only reachable, if you disabled the Empty Result Screen
}
} else{
// user canceled scan process
}
}
myButton.setOnClickListener {
val paymentConfig = PhotoPaymentConfiguration()
photoPaymentResult.launch(paymentConfig)
}
Die Standardkonfiguration stellt den vollständigen Erfassungs-, Prüf- und Extraktionsprozess bereit. Passen Sie UI, Onboarding und Scan-Tipps nur dort an, wo es das bestehende Design und die Nutzerführung der Bank sinnvoll ergänzt.
Das JSON-Ergebnis verarbeiten
Ein erfolgreiches Ergebnis wird als JSON-String zurückgegeben. Die Standardstruktur kann unter anderem folgende Felder enthalten:
{
"Address":
{
"Name1": "DB Fernverkehr AG",
"Name2": "",
"Name3": "",
"Zipcode": "60643",
"City": "Frankfurt am Main",
"Street": "BahnCard-Service",
"Phone": "0302970",
"CustomerId": "",
"Bank": [{"BIC": "PBNKDEFFXXX",
"IBAN": "DE02100100100152517108"}]
},
"Date": "2024-10-14",
"Amount": "244.00",
"InvoiceId": "2023174086",
"Reference": "RNr:2023174086 vom 14.10.2024",
"SEPACreditor": "DB Vertrieb GmbH"
}
Übernehmen Sie nur die Felder, die das Überweisungsformular benötigt, und normalisieren Sie ihre Anzeigeformate in der Host-App. Docutain validiert die IBAN und gibt sie nur zurück, wenn sie gültig ist. Die Host-App wendet weiterhin ihre eigenen Anforderungen an Empfänger, Betrag und Verwendungszweck an. Erkannte Daten sollen einen Entwurf vorausfüllen und dürfen keine Überweisung automatisch auslösen.
GiroCode und OCR in einem Prozess kombinieren
Ein GiroCode ist ein EPC-QR-Code mit Daten für eine SEPA-Überweisung. In SDK 1.9 ist PhotoPaymentConfiguration.allowGiroCode standardmäßig true. Für den kombinierten Prozess ist daher keine zusätzliche Konfiguration nötig.
| Rechnungseingang | Primärer Erkennungsweg | Verhalten der App |
| Gültiger GiroCode | Strukturierte EPC-Zahlungsdaten decodieren | Geschäftsregeln anwenden und Überweisungsformular vorausfüllen |
| Kein GiroCode | Zahlungsdaten aus dem Rechnungstext lesen | Geschäftsregeln anwenden und dasselbe Formular vorausfüllen |
| Unlesbares oder unvollständiges Ergebnis | Wiederholungshinweis des SDK oder App-Fallback anzeigen | Korrektur oder manuelle Eingabe ermöglichen |
| Geteiltes PDF oder Bild | Eingehenden Android-Intent über openWithIntent übergeben | Im selben Photo-Payment-Prozess fortfahren |
Hintergrundwissen und verständliche Nutzerbegriffe bietet unser Artikel Rechnungen mit GiroCode bezahlen. Produktumfang und Plattformen finden Sie auf der Seite zum Photo Payment SDK.
Sicherheits- und Testcheckliste
Die lokale Erkennung reduziert Rechnungsdaten, die das Gerät verlassen müssen. Der vollständige Banking-Prozess benötigt dennoch Kontrollen auf Anwendungsebene.
- Bestätigen, dass die gültige IBAN zum vorgesehenen Empfänger gehört, und bankeigene Regeln für Betrag, Empfänger und unterstützte Zeichensätze anwenden.
- Erkannte Daten immer vor dem bestehenden Freigabeschritt anzeigen.
- Abbruch, leere Ergebnisse, fehlerhafte Dateien und unvollständige GiroCodes behandeln.
- Papierrechnungen, gefaltete Dokumente, Rechnungen auf Bildschirmen sowie PDFs und Bilder aus Android-Teilen-/Öffnen-Aktionen testen.
- Prozessneustart, Kameraberechtigung, Speicherdruck und Barrierefreiheit in der Host-App prüfen.
- Mit repräsentativen echten Rechnungen und freigegebenen oder anonymisierten Daten testen.
Offizielle Ressourcen
Technische Quellen zuletzt geprüft am 30. Juli 2026.
HÄUFIGE FRAGEN
Fotoüberweisung unter Android integrieren
Ja. Docutain scannt und extrahiert unterstützte Zahlungsdaten lokal auf dem Gerät. Speicherung, Übertragung und Zahlungsabwicklung liegen anschließend bei der Host-App.
Ja. Seit SDK 1.9 gehört die GiroCode-Extraktion zu Photo Payment und ist über allowGiroCode standardmäßig aktiviert.
Ja. Unter Android können unterstützte PDFs und Bilder aus ACTION_SEND, ACTION_SEND_MULTIPLE oder ACTION_VIEW über openWithIntent übergeben werden.
Nein. Das SDK extrahiert Zahlungsdaten und validiert die zurückgegebene IBAN. Die Banking-App wendet ihre Geschäftsregeln an, zeigt das Ergebnis dem Nutzer und führt ihren eigenen Freigabe- und Überweisungsprozess aus.
Docutain SDK 1.9.0.0 benötigt Android 6.0 beziehungsweise API-Level 23 oder höher. Die App muss mit API-Level 34 oder höher kompiliert werden.