Skip to content

Commit 5119c0b

Browse files
authored
Merge pull request #25 from PAYONE-GmbH/release/1.4.0
Release/1.4.0
2 parents 2edf574 + 07a540a commit 5119c0b

15 files changed

Lines changed: 1377 additions & 23 deletions

File tree

.github/workflows/test.yml

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
name: Test Android Library
2+
3+
on:
4+
push:
5+
branches:
6+
- main # Trigger on push to the main branch
7+
pull_request:
8+
branches: ['main', 'develop']
9+
workflow_dispatch: # Allows manual triggering from the Actions tab
10+
11+
jobs:
12+
publish:
13+
runs-on: ubuntu-24.04
14+
15+
steps:
16+
- name: Checkout code
17+
uses: actions/checkout@v3
18+
19+
- name: Make gradlew executable
20+
run: chmod +x ./gradlew
21+
22+
- name: Set up JDK 17
23+
uses: actions/setup-java@v3
24+
with:
25+
java-version: '17'
26+
distribution: 'zulu'
27+
28+
- name: Cache Gradle dependencies
29+
uses: actions/cache@v3
30+
with:
31+
path: ~/.gradle/caches
32+
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
33+
restore-keys: |
34+
${{ runner.os }}-gradle
35+
36+
- name: Build Android library
37+
run: ./run_test.sh

README.md

Lines changed: 66 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Welcome to the PAYONE Commerce Platform Client Android SDK for the PAYONE Commer
2121
- [5. Host and load the HTML page](#5-host-and-load-the-html-page)
2222
- [6. Initialize the Tokenizer](#6-initialize-the-tokenizer)
2323
- [7. Customization and Callbacks](#7-customization-and-callbacks)
24+
- [Custom Validation Icons (v1.4)](#custom-validation-icons-v14)
25+
- [Click to Pay / CTP (v1.4)](#click-to-pay--ctp-v14)
2426
- [8. PCI DSS & Security](#8-pci-dss--security)
2527
- [9. Migration Note](#9-migration-note)
2628
- [Fingerprint Tokenizer](#fingerprint-tokenizer)
@@ -56,7 +58,7 @@ In order to use the SDK your minimum SDK Version needs to be at least API 34.
5658

5759
```kotlin
5860
dependencies {
59-
implementation("io.github.payone-gmbh:pcp-client-android-sdk:1.3.0")
61+
implementation("io.github.payone-gmbh:pcp-client-android-sdk:1.4.0")
6062
}
6163
```
6264

@@ -307,7 +309,69 @@ supportFragmentManager.beginTransaction().replace(R.id.fragment_container, fragm
307309
- `submitButton`: Provide a selector or element for the submit button.
308310
- `tokenizationSuccessCallback`: Handle the token and card details on success.
309311
- `tokenizationFailureCallback`: Handle errors on failure.
310-
- `environment`: Choose "test" or "live" for the SDK environment.
312+
- `mode`: Choose `"test"` or `"live"` for the SDK environment.
313+
- `allowedCardSchemes`: Limit accepted card brands (e.g. `listOf("visa", "mastercard")`). All brands accepted when omitted.
314+
- `customTextConfig`: Override labels, placeholders, aria-labels and validation error messages per locale key (e.g. `"en"`, `"de"`).
315+
316+
##### Custom Validation Icons (v1.4)
317+
318+
Provide your own success/error icons for input validation. Supported formats: SVG, PNG, JPEG, WebP.
319+
320+
```kotlin
321+
import com.payone.pcp_client_android_sdk.cctokenizer.CustomIconsConfig
322+
323+
val config = CreditcardTokenizerConfig(
324+
// ... other fields ...
325+
customIconsConfig = CustomIconsConfig(
326+
useCustomValidationIcons = true,
327+
showCardBrandIcons = false, // true = show detected card brand instead of validation icon
328+
successIcon = "/validIcon.svg",
329+
errorIcon = "/invalidIcon.svg"
330+
),
331+
// ...
332+
)
333+
```
334+
335+
##### Click to Pay / CTP (v1.4)
336+
337+
Enable Click to Pay (wallet-based payment by card schemes). Requires onboarding with PAYONE for Visa and/or Mastercard credentials.
338+
339+
```kotlin
340+
import com.payone.pcp_client_android_sdk.cctokenizer.CTPConfig
341+
import com.payone.pcp_client_android_sdk.cctokenizer.SchemeConfig
342+
import com.payone.pcp_client_android_sdk.cctokenizer.VisaConfig
343+
import com.payone.pcp_client_android_sdk.cctokenizer.MastercardConfig
344+
import com.payone.pcp_client_android_sdk.cctokenizer.TransactionAmount
345+
import com.payone.pcp_client_android_sdk.cctokenizer.CTPUiConfig
346+
347+
val config = CreditcardTokenizerConfig(
348+
// ... other fields ...
349+
ctpConfig = CTPConfig(
350+
enableCTP = true,
351+
enableCustomerOnboarding = true,
352+
schemeConfig = SchemeConfig(
353+
merchantPresentationName = "YourMerchantName",
354+
visaConfig = VisaConfig(
355+
srcInitiatorId = "YOUR_VISA_INITIATOR_ID",
356+
srcDpaId = "YOUR_VISA_DPA_ID",
357+
encryptionKey = "YOUR_ENCRYPTION_KEY",
358+
nModulus = "YOUR_N_MODULUS"
359+
),
360+
mastercardConfig = MastercardConfig(
361+
srcInitiatorId = "YOUR_MC_INITIATOR_ID",
362+
srcDpaId = "YOUR_MC_DPA_ID"
363+
)
364+
),
365+
transactionAmount = TransactionAmount(amount = "100", currencyCode = "EUR"),
366+
uiConfig = CTPUiConfig(
367+
buttonStyle = "solid",
368+
buttonAndBadgeColor = "#3B82F6",
369+
fontFamily = "Sansation"
370+
)
371+
),
372+
// ...
373+
)
374+
```
311375

312376
#### 8. PCI DSS & Security
313377

app/build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ android {
3535
sourceCompatibility = JavaVersion.VERSION_1_8
3636
targetCompatibility = JavaVersion.VERSION_1_8
3737
}
38-
kotlinOptions {
39-
jvmTarget = "1.8"
38+
kotlin {
39+
compilerOptions {
40+
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
41+
}
4042
}
4143
buildFeatures {
4244
compose = true
Lines changed: 5 additions & 0 deletions
Loading

app/src/main/assets/validIcon.svg

Lines changed: 4 additions & 0 deletions
Loading

app/src/main/java/com/payone/pcpclientandroiddemo/CCTokenizerActivity.kt

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import com.payone.pcp_client_android_sdk.cctokenizer.CardNumberErrors
66
import com.payone.pcp_client_android_sdk.cctokenizer.CardholderNameErrors
77
import com.payone.pcp_client_android_sdk.cctokenizer.CreditcardTokenizerConfig
88
import com.payone.pcp_client_android_sdk.cctokenizer.CreditcardTokenizerFragment
9+
import com.payone.pcp_client_android_sdk.cctokenizer.CustomIconsConfig
910
import com.payone.pcp_client_android_sdk.cctokenizer.ExpiryDateErrors
1011
import com.payone.pcp_client_android_sdk.cctokenizer.IframeConfig
1112
import com.payone.pcp_client_android_sdk.cctokenizer.LocaleTextAriaLabels
@@ -145,6 +146,12 @@ class CCTokenizerActivity : BaseActivity() {
145146
mode = "test",
146147
token = token,
147148
customTextConfig = customTextConfig,
149+
customIconsConfig = CustomIconsConfig(
150+
useCustomValidationIcons = true,
151+
showCardBrandIcons = false,
152+
successIcon = "/validIcon.svg",
153+
errorIcon = "/invalidIcon.svg"
154+
),
148155
tokenizationSuccessCallback = { statusCode, token, cardDetails, inputMode ->
149156
android.util.Log.d("CC Success", "Tokenized card successfully")
150157
android.util.Log.d("CC Success", "Status: $statusCode")

gradle/libs.versions.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[versions]
22
agp = "8.4.2"
3-
kotlin = "2.2.0"
3+
kotlin = "2.3.0"
44
compose-plugin = "1.8.2"
55
coreKtx = "1.13.1"
66
junit = "4.13.2"

gradlew

100644100755
File mode changed.

pcp-client-android-sdk/build.gradle.kts

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
alias(libs.plugins.android.library)
55
alias(libs.plugins.jetbrains.kotlin.android)
66
alias(libs.plugins.sonar)
7-
kotlin("plugin.serialization") version "2.1.0"
7+
kotlin("plugin.serialization") version libs.versions.kotlin.get()
88
alias(libs.plugins.maven.publish)
99
}
1010

@@ -32,8 +32,10 @@ android {
3232
sourceCompatibility = JavaVersion.VERSION_1_8
3333
targetCompatibility = JavaVersion.VERSION_1_8
3434
}
35-
kotlinOptions {
36-
jvmTarget = "1.8"
35+
kotlin {
36+
compilerOptions {
37+
jvmTarget.set(org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_1_8)
38+
}
3739
}
3840
}
3941

@@ -46,6 +48,8 @@ dependencies {
4648
implementation(libs.kotlinx.serialization)
4749
testImplementation(libs.junit)
4850
testImplementation(libs.mockito.core)
51+
testImplementation("org.robolectric:robolectric:4.11.1")
52+
testImplementation("androidx.test:core:1.5.0")
4953
androidTestImplementation(libs.mockito.android)
5054
androidTestImplementation(libs.androidx.junit)
5155
androidTestImplementation(libs.androidx.runner)
@@ -58,7 +62,7 @@ mavenPublishing {
5862

5963
signAllPublications()
6064

61-
coordinates("io.github.payone-gmbh", "pcp-client-android-sdk", "1.3.0")
65+
coordinates("io.github.payone-gmbh", "pcp-client-android-sdk", "1.4.0")
6266

6367
pom {
6468
name.set("PCP-CLIENT-SDK-ANDROID")

0 commit comments

Comments
 (0)