sumup 패키지는 Android 및 iOS용 Flutter 앱에 카드 결제 기능을 원활하게 통합할 수 있도록 해주는 SumUp SDK의 플러터 래퍼입니다. 개발자는 SumUp 단말기에 연결하고 사용자를 인증하며 애플리케이션 내에서 직접 결제를 처리할 수 있습니다. 간단함과 신뢰성을 위해 설계되었으며, 네이티브 SDK 상호작용의 복잡성을 추상화하면서도 안전한 거래 처리를 유지합니다. 최소한의 설정으로 모바일 포인트오브셀(POS) 기능이 필요한 기업에게 이상적입니다.
사용 사례
모바일 POS 시스템
대면 소매 결제
이동 중 서비스 청구
이벤트 티켓팅 앱
소규모 기업 결제 솔루션
주요 기능
네이티브 SumUp SDK 통합
안전한 카드 결제 처리
크로스 플랫폼 지원 (Android 및 iOS)
간편한 터미널 연결
사용자 인증 흐름
적합한 대상
리테일 앱
서비스 기반 비즈니스
이벤트 주최자
자유직 종사자가 결제 수락 중
전자상거래 확장
고려 사항
SumUp 상인 계정이 필요합니다
지원되는 지역에 한정
SumUp 단말기 하드웨어에 따라 다름
결제 규정에 대한 적절한 준수 필요
백그라운드 실행에는 추가 구성이 필요할 수 있습니다
원본 README
연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.
sumup
A Flutter plugin for the SumUp SDK. Supports card reader and Tap-to-Pay payments on Android and iOS.
Partner Links
Support this project by purchasing SumUp terminals through our affiliate links for your country:
Registered for a merchant account via SumUp's country websites (or received a test account).
Received a SumUp card terminal: Solo, Air, Air Lite, PIN+ terminal, Chip & Signature reader, or SumUp Air Register.
Requested an Affiliate (Access) Key and registered your application ID via the SumUp Dashboard.
Flutter 3.44+ and Dart 3.12+.
iOS deployment target 16.0+ and Xcode 26.2+ (iOS 16.7+ for Tap-to-Pay; 17.5+ recommended).
Android minSdkVersion 26+ (30+ for Tap-to-Pay), targetSdkVersion 36, Java 17, Android Gradle Plugin 9.2.1, and Gradle 9.5.1.
Migrating from 0.14.x
Version 0.15.0 adopts the native SDK 7.x toolchains.
Upgrade the app to Flutter 3.44+ / Dart 3.12+. SumUp Android SDK 7.1 requires Kotlin 2.4.0,
while Flutter 3.44 still needs its temporary AGP 9 compatibility mode for this explicit KGP
version. In the host app's android/gradle.properties, set:
android.builtInKotlin=false
android.newDsl=false
Declare org.jetbrains.kotlin.android version 2.4.0 with apply false in
android/settings.gradle:
plugins {
id "org.jetbrains.kotlin.android" version "2.4.0" apply false
}
Then apply it in android/app/build.gradle:
plugins {
id "org.jetbrains.kotlin.android"
}
Flutter 3.44 reports this legacy-KGP path as temporary; keep the two compatibility flags until
Flutter can use the vendor-required Kotlin version through AGP's built-in Kotlin integration.
Compile and target Android API 36 with Java 17, AGP 9.2.1, and Gradle 9.5.1.
Keep Android minSdk 26 for card-reader-only apps. Configuring Tap-to-Pay credentials enables the
TTP implementation; the host app must then also set minSdk to 30.
Use an iOS 16 deployment target with Xcode 26.2 or later. Swift Package Manager is recommended;
SumUp will stop publishing new CocoaPods SDK releases after October 31, 2026.
Android rollback warning: after an app has initialized SumUp Android SDK 7.1.0, downgrading
that installation to a version backed by an older native SDK is not supported. Validate the
migration with a sandbox merchant and use a staged rollout.
iOS rollback warning: before downgrading from SumUp iOS SDK 7.1.2, upload all pending Offline
Payments. If a downgrade is unavoidable, upload them first, delete the app, and then install the
version backed by the older SDK.
Installing
Add sumup to your pubspec.yaml:
dependencies:sumup:
Import sumup:
import'package:sumup/sumup.dart';
Getting Started
// 1. Initialise the SDK with your Affiliate KeyawaitSumup.init(affiliateKey);
// 2. Log in — either interactively or with an OAuth tokenawaitSumup.login();
// orawaitSumup.loginWithToken(token);
// 3. (Optional) Ask the user to pick / configure a card readerawaitSumup.openSettings();
// 4. Optionally warm up the reader before checkoutawaitSumup.prepareForCheckout();
// 5. Run a checkoutvar payment = SumupPayment(
title: 'Coffee',
total: 3.50,
currency: 'EUR',
foreignTransactionId: '', // leave empty to auto-generate a unique ID
saleItemsCount: 1,
skipSuccessScreen: false,
tip: 0.0,
);
var checkout = awaitSumup.checkout(SumupPaymentRequest(payment));
// checkout.success — bool// checkout.transactionCode — String// checkout.amount — double (not available on Android Tap-to-Pay)// checkout.currency — String (not available on Android Tap-to-Pay)// checkout.products — List<SumupProduct>; iOS and Android card reader only// checkout.merchantCode — String; Android Tap-to-Pay only// checkout.cardScheme — String; Android Tap-to-Pay only// checkout.errors — String; non-null when success is false
Log in with Sumup.login() or Sumup.loginWithToken().
Call Sumup.checkTapToPayAvailability(). If isActivated is false, call Sumup.presentTapToPayActivation() to run the one-time activation flow.
Use PaymentMethod.tapToPay in your request:
var request = SumupPaymentRequest(payment, paymentMethod: PaymentMethod.tapToPay);
var checkout = awaitSumup.checkout(request);
Android
Tap-to-Pay is opt-in (since 0.14.2). The TTP SDK (com.sumup.tap-to-pay:utopia-sdk) lives in a
private SumUp Maven repository. By default the plugin builds without it — no credentials, no
private-repo access, no 401. The card-reader (merchant-sdk) checkout path works fully in this mode.
You only need the steps below if you actually want Tap-to-Pay. (If you previously hit
Could not resolve com.sumup.tap-to-pay:utopia-sdk … 401 Unauthorized, upgrade to 0.14.2+ and
simply don't set the property.)
Requirements:
NFC-enabled physical device, Android 11 (API 30)+
Set the host application's minSdk to 30 when enabling Tap-to-Pay.
Enable core-library desugaring in the host app module, as required by Tap-to-Pay 1.1.1+:
Get Tap-to-Pay Maven credentials from SumUp (contact integration@sumup.com), then add them to your
user-level ~/.gradle/gradle.properties (or pass them via -P / environment). Do not commit the
credentials to the app repository. The plugin reads both credentials and automatically wires
the private Maven repo and compiles the
utopia-sdk dependency — you do not add it to your own build.gradle.
For environment-only configuration, use the names above or Gradle's standard
ORG_GRADLE_PROJECT_SUMUP_TTP_MAVEN_USERNAME and
ORG_GRADLE_PROJECT_SUMUP_TTP_MAVEN_PASSWORD variables.
SumUp sandbox merchants can test with a debuggable build. Live merchants require a
non-debuggable build with USB Debugging and Developer Options disabled.
Usage:
You must use Sumup.loginWithToken(accessToken) — token login is required for the TTP SDK to authenticate in the background.
Use PaymentMethod.tapToPay in your request:
var request = SumupPaymentRequest(payment, paymentMethod: PaymentMethod.tapToPay);
var checkout = awaitSumup.checkout(request);
Note: The Android TTP SDK does not return amount or currency in the transaction result. If you need them, query the SumUp Transactions API using checkout.transactionCode or checkout.foreignTransactionId.