Can't pay/save with SCA card (verifyBuyer)
Closed this issue · 5 comments
Describe the issue
When try verify a card with SCA (buyer verification) in release mode and minifyEnabled true
, app crash
Error log
E/AndroidRuntime(20018): FATAL EXCEPTION: main
E/AndroidRuntime(20018): Process: sqip.flutter.example, PID: 20018
E/AndroidRuntime(20018): java.lang.ExceptionInInitializerError
E/AndroidRuntime(20018): at com.ndsthreeds.android.sdk.getTmNetworkCountryIso.values(Unknown Source:33)
E/AndroidRuntime(20018): at com.ndsthreeds.android.sdk.getTmNetworkCountryIso.<init>(Unknown Source:7)
E/AndroidRuntime(20018): at com.ndsthreeds.android.sdk.getTmNetworkCountryIso.valueOf(Unknown Source:16)
E/AndroidRuntime(20018): at com.ndsthreeds.android.sdk.getNoValueReason.<init>(Unknown Source:9)
E/AndroidRuntime(20018): at com.ndsthreeds.android.sdk.NdsThreeDS2ServiceImpl.initialize(Unknown Source:73)
E/AndroidRuntime(20018): at com.ndsthreeds.android.sdk.NdsThreeDSSDK.initialize(Unknown Source:20)
E/AndroidRuntime(20018): at b.d.d.a.r.a(Unknown Source:12)
E/AndroidRuntime(20018): at b.d.d.b.f.f(Unknown Source:51)
E/AndroidRuntime(20018): at b.d.d.b.f.g(Unknown Source:67)
E/AndroidRuntime(20018): at sqip.internal.verification.service.nudata.NuDataVerificationService.startThreeDSWidget(Unknown Source:125)
E/AndroidRuntime(20018): at sqip.internal.verification.service.nudata.NuDataVerificationService.verify(Unknown Source:39)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationController.startVerificationService(Unknown Source:14)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationController.handleResponse(Unknown Source:131)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationController.onCreateVerificationSuccess(Unknown Source:4)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationController.access$onCreateVerificationSuccess(Unknown Source:0)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationController$startCreateVerification$1.invoke(Unknown Source:9)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationController$startCreateVerification$1.invoke(Unknown Source:2)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationRequestHandler$Real.sendSuccess(Unknown Source:6)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationRequestHandler$Real.onResponse(Unknown Source:70)
E/AndroidRuntime(20018): at sqip.internal.verification.BuyerVerificationRequestHandler$Real$createVerification$1.onResponse(Unknown Source:14)
E/AndroidRuntime(20018): at k.i$b$a.c(Unknown Source:25)
E/AndroidRuntime(20018): at k.i$b$a.d(Unknown Source:0)
E/AndroidRuntime(20018): at k.b.run(Unknown Source:6)
E/AndroidRuntime(20018): at android.os.Handler.handleCallback(Handler.java:938)
E/AndroidRuntime(20018): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(20018): at android.os.Looper.loop(Looper.java:236)
E/AndroidRuntime(20018): at android.app.ActivityThread.main(ActivityThread.java:8107)
E/AndroidRuntime(20018): at java.lang.reflect.Method.invoke(Native Method)
E/AndroidRuntime(20018): at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:656)
E/AndroidRuntime(20018): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:967)
E/AndroidRuntime(20018): Caused by: java.lang.RuntimeException: Field keySize_ for b.c.b.a.y.q not found. Known fields are [private int b.c.b.a.y.q.h, private static final b.c.b.a.y.q b.c.b.a.y.q.f, private static volatile b.c.b.a.z.a.a1 b.c.b.a.y.q.g]
E/AndroidRuntime(20018): at b.c.b.a.z.a.v0.m0(Unknown Source:72)
E/AndroidRuntime(20018): at b.c.b.a.z.a.v0.S(Unknown Source:697)
E/AndroidRuntime(20018): at b.c.b.a.z.a.v0.Q(Unknown Source:12)
E/AndroidRuntime(20018): at b.c.b.a.z.a.k0.e(Unknown Source:60)
E/AndroidRuntime(20018): at b.c.b.a.z.a.k0.a(Unknown Source:49)
E/AndroidRuntime(20018): at b.c.b.a.z.a.d1.d(Unknown Source:17)
E/AndroidRuntime(20018): at b.c.b.a.z.a.d1.e(Unknown Source:4)
E/AndroidRuntime(20018): at b.c.b.a.z.a.z.C(Unknown Source:4)
E/AndroidRuntime(20018): at b.c.b.a.z.a.z$a.q(Unknown Source:9)
E/AndroidRuntime(20018): at b.c.b.a.z.a.z$a.p(Unknown Source:0)
E/AndroidRuntime(20018): at b.c.b.a.u.a.k(Unknown Source:8)
E/AndroidRuntime(20018): at b.c.b.a.u.a.j(Unknown Source:4)
E/AndroidRuntime(20018): at a.p.a.a$d.<clinit>(Unknown Source:2)
E/AndroidRuntime(20018): ... 30 more
To Reproduce
Use modified example from plugin
Modified example
-
Create proguard file int
android/app/proguard-rules.pro
with lines:
To use square plugin in release:-keep class sqip.** { *; }
To see class log error details:-keep class com.ndsthreeds.** { *; }
-
Config release signin. Add to file
android/app/build.gradle
this lines:
android {
// Other configs
buildTypes {
release {
signingConfig signingConfigs.debug
minifyEnabled true
}
}
- Modify
buy_sheet.dart
to use verifyBuyer. Uncommentawait _onStartCardEntryFlowWithBuyerVerification();
and commentawait _onStartCardEntryFlow();
// call _onStartCardEntryFlow to start Card Entry without buyer verification (SCA)
// await _onStartCardEntryFlow();
// OR call _onStartCardEntryFlowWithBuyerVerification to start Card Entry with buyer verification (SCA)
// NOTE this requires _squareLocationSet to be set
await _onStartCardEntryFlowWithBuyerVerification();
Reproduce error
- Start example in release mode
flutter run --release
- Press button
Pay with card
- Add card with SCA to payment. Example:
4800 0000 0000 0004
01/23
111
00000
. References - Press pay
- Error: App crash
Expected behavior
Don't crash app when use minifyEnabled true
in release mode
Environment (please complete the following information):
- platform: Android
- OS and version: Multiple devices. (ex: Poco M3 with Android 11)
- dev environment: MacOS
- In-App Payments Plugin version: 1.7.4
Flutter doctor
[✓] Flutter (Channel stable, 2.8.1, on macOS 12.4 21F79 darwin-x64, locale en-ES)
• Flutter version 2.8.1 at /Users/matias/fvm/versions/2.8.1
• Upstream repository https://github.com/flutter/flutter.git
• Framework revision 77d935af4d (6 months ago), 2021-12-16 08:37:33 -0800
• Engine revision 890a5fca2e
• Dart version 2.15.1
[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
• Android SDK at /Users/matias/Library/Android/sdk
• Platform android-31, build-tools 31.0.0
• ANDROID_HOME = /Users/matias/Library/Android/sdk
• Java binary at: /Applications/Android Studio.app/Contents/jre/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 13.4.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• CocoaPods version 1.11.2
[✓] Chrome - develop for the web
• Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome
[✓] Android Studio (version 2021.1)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
• Java version OpenJDK Runtime Environment (build 11.0.11+0-b60-7590822)
[!] Android Studio
• Android Studio at /Applications/Android Studio 2.app/Contents
• Flutter plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/9212-flutter
• Dart plugin can be installed from:
🔨 https://plugins.jetbrains.com/plugin/6351-dart
✗ Android Studio not found at /Applications/Android Studio 2.app/Contents
• Try updating or re-installing Android Studio.
[✓] VS Code (version 1.67.2)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.42.0
[✓] Connected device (2 available)
• sdk gphone64 x86 64 (mobile) • emulator-5554 • android-x64 • Android 12 (API 31) (emulator)
• Chrome (web) • chrome • web-javascript • Google Chrome 102.0.5005.61
Additional context
I try add more proguard rules but don't work
Other pro guard rules
-keep class io.flutter.app.** { *; }
-keep class io.flutter.plugin.** { *; }
-keep class io.flutter.util.** { *; }
-keep class io.flutter.view.** { *; }
-keep class io.flutter.** { *; }
-keep class io.flutter.plugins.** { *; }
-dontnote android.net.http.*
-dontnote org.apache.commons.codec.**
-dontnote org.apache.http.**
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn javax.annotation.**
-dontwarn org.conscrypt.**
-dontwarn retrofit2.Platform$Java8
-keepnames class okhttp3.internal.publicsuffix.PublicSuffixDatabase
-keep class com.google.android.gms.** { *; }
-dontwarn com.google.android.gms.**
-keep class com.crashlytics.** { *; }
-dontwarn com.crashlytics.**
-keepclasseswithmembers class * {
@com.squareup.moshi.* <methods>;
}
-keep @com.squareup.moshi.JsonQualifier interface *
-keepclassmembers class kotlin.Metadata {
public <methods>;
}
-keep class **JsonAdapter {
<init>(...);
<fields>;
}
-keepnames @com.squareup.moshi.JsonClass class *
-keepnames @kotlin.Metadata class com.myapp.model.api.**
-keep class com.myapp.model.api.** { *; }
-keepclassmembers class com.myapp.model.api.** { *; }
-keep class kotlin.reflect.**
-keep class org.threeten.bp.**
-keep class kotlin.Boolean
-keep class java.math.BigDecimal
Workaround
Set minifyEnabled false
and shrinkResources false
Closing this issue but if you still find this problem please reopen this issue. Thank you.
Hi @CharmisG
What is the criteria to close this issue?
Hello!
Thank you for flagging this issue, I'm happy to help you with it.
First, some questions:
- What version of Android In-App Payments SDK are you using? Latest is
1.5.8
; and Flutter plugin might be pulling in an older version (like1.5.6
) - Can you share your
build/outputs/mapping/release/mapping.txt
file that way we can identify whatb.d.d.a.r.a
might be? If yes, please use this link to send it safely to me https://squareup.sendsafely.com/u/artem - What does the final (merged)
proguard-rules.pro
look like? Can you share it as well, please?
- In-App Payments Plugin version: 1.7.4
- and 3. Now I don't have time to do this, but when posible I might send the files
Are you still facing this?