Stripe Android SDK

Related tags

SDK stripe stripe-sdk
Overview

Stripe Android SDK

CI GitHub release License

The Stripe Android SDK makes it quick and easy to build an excellent payment experience in your Android app. We provide powerful and customizable UI elements that can be used out-of-the-box to collect your users' payment details. We also expose the low-level APIs that power those UIs so that you can build fully custom experiences.

Get started with our 📚 integration guides and example projects, or 📘 browse the SDK reference.

Updating to a newer version of the SDK? See our migration guide and changelog.

Table of contents

Features

Simplified Security: Use the SDK to collect credit card numbers and remain PCI compliant. This means sensitive data is sent directly to Stripe instead of passing through your server. For more information, see our Integration Security Guide.

SCA-Ready: The SDK automatically performs native 3D Secure authentication to comply with Strong Customer Authentication regulation in Europe.

Native UI: We provide native screens and elements to collect payment. For example, PaymentSheet is a prebuilt UI that combines all the steps required to pay - collecting payment details, and confirming the payment - into a single sheet that displays on top of your app.

Google Pay: Stripe is fully compatible with Google Pay.

Stripe API: We provide low-level APIs that correspond to objects and methods in the Stripe API. You can build a custom UI on top of this layer.

Localized: We support the following localizations: Bulgarian, Chinese (Hong Kong), Chinese (Simplified), Chinese (Traditional), Czech, Danish, Dutch, English (US), English (United Kingdom), Estonian, Finnish, French, French (Canada), German, Greek, Hungarian, Italian, Japanese, Korean, Latvian, Lithuanian, Maltese, Norwegian Bokmål, Polish, Portuguese (Brazil), Portuguese, Romanian, Russian, Slovak, Slovenian, Spanish, Spanish (Latin America), Swedish, and Turkish.

Recommended usage If you're selling digital products or services that will be consumed within your app, (e.g. subscriptions, in-game currencies, game levels, access to premium content, or unlocking a full version), and you plan to distribute it through the Google Play Store, you must use Googles's in-app purchase APIs. See the Google Play Billing for more information. For all other scenarios you can use this SDK to process payments via Stripe.

Releases

  • The changelog provides a summary of changes in each release.
  • The migration guide provides instructions on upgrading from older versions.

Installation

Requirements

Configuration

Add stripe-android to your build.gradle dependencies.

dependencies {
    implementation 'com.stripe:stripe-android:18.2.0'
}

Getting Started

Integration

Get started with our 📚 integration guides and example projects, or 📘 browse the SDK reference.

Examples

  • The PaymentSheet example project demonstrates how to integrate and use our prebuilt ui (single-step and multi-step).
  • The example project demonstrates other integrations, that give you more control over the user experience:
    • how to use the Stripe class's synchronous and asynchronous methods
    • how to use the CardFormView.
Comments
  • The 3ds2 dependency breaks Firebase Performance and Robolectric

    The 3ds2 dependency breaks Firebase Performance and Robolectric

    Summary

    Upgrading Stripe to version 9.3.5 (or any version after 9.1.1) breaks our app. The 3ds2 dependency added transitively the dependency to org.bouncycastle:bcprov-jdk15on:1.61. This forces a few other dependency to use that version and breaks the app in different ways:

    • The Firebase performance plugin (version 1.1.5) fails to load with the following error:
    /.../app/build/intermediates/transforms/FirebasePerformancePlugin/release/162/module-info.class: D8: Unsupported source file type
    
    • The robolectric (version 4.0.2) tests take a very long time to run (~15 minutes per test)

    Screenshot 2019-06-28 at 11 56 20

    Android version

    minSdk 21

    SDK version

    Version 9.1.1 to 9.3.5

    Other information

    I managed to work around both issues by forcing the bouncy castle dependency to 1.52. Forcing the version to 1.52 shows an issue with Lint:

    Invalid package reference in library; not included in Android: javax.naming.directory. Referenced from org.bouncycastle.jce.provider.X509LDAPCertStoreSpi.
    

    But I imagine we can safely ignore it as I don't assume we do LDAP with Stripe.

    triaged 
    opened by romainpiel 47
  • SCA Webview behaving strangely/restarts app after close

    SCA Webview behaving strangely/restarts app after close

    Summary

    See Video: https://cl.ly/6115ddc0378b After inputting a credit card number requiring SCA, you are unable to click on "Complete Authentication" the video shows someone tapping "FAIL AUTHENTICATION" when they are actually attempting to tap on "Complete Authentication". The application is then restarted after the tap (splash page is shown instead of the payment screen).

    Code to reproduce

    This is using tipsi-stripe beta.8, which uses stripe-android 10.4.5 SCA is initiated with:

     paymentService.authenticatePaymentIntent({ clientSecret: paymentIntentClientSecret })
            .then(onPaymentAuthenticated)
            .catch((error) => {
              displayToast(getPaymentAuthenticationErrorMessage(error));
              onPaymentAuthenticationFailed(error);
            });
    

    Android version

    Screenshot_20191003-103502_Settings

    Impacted devices

    Galaxy S8+ SM-G955W

    Installation method

    Linked in via tipsi-stripe.

    implementation project(':tipsi-stripe')
    

    SDK version

    10.4.5

    Other information

    ADB Logcat output during problems: https://gist.github.com/bramski/1e0c0daf74bcfa0b8e7f4bf211effa96

    triaged 
    opened by bramski 34
  • Google pay integration using GooglePayLauncher

    Google pay integration using GooglePayLauncher

    Summary

    onGooglePayReady always returns false.

    Code to reproduce

    final GooglePayLauncher googlePayLauncher = new GooglePayLauncher( this, new GooglePayLauncher.Config( GooglePayEnvironment.Test, "IN", "Widget Store" ), this::onGooglePayReady, this::onGooglePayResult ); private void onGooglePayReady(boolean isReady) { // implemented below binding.btnGPay.setEnabled(isReady); }

    Android version

    Android version : 9

    Impacted devices

    Device : MI A1

    Installation method

    as per the stripe doc https://stripe.com/docs/google-pay

    SDK version

    SDK version : implementation 'com.stripe:stripe-android:17.1.0'

    Other information

    Google Pay 
    opened by shubhamrb 33
  • Fail to import app to Google Play Console, invalid signature

    Fail to import app to Google Play Console, invalid signature

    Summary

    I have an issue when I try to import my signed Android bundle to the Google Play Console to distribute the app.

    I get this error:

    Failed to import. You uploaded an APK or Android App Bundle with invalid or missing signing information for some of its files.

    The issue come from the android-stripe sdk because when I remove the depandencie I have no more issues.

    I tried with the version 10 and 11 of the sdk and I get the same issue.

    With the version 8 I don't have this issue and I can import the APK.

    Code to reproduce

    Android version

    Impacted devices

    Installation method

    SDK version

    10.2.1

    Other information

    I use app signing by Google Play

    Please do you have any idea to resolve this issue ?

    triaged 
    opened by Nahani 32
  • java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.stripe.android.stripe3ds2.transaction.d$b)

    java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.stripe.android.stripe3ds2.transaction.d$b)

    Summary

    Crash on ChallengeActivity

    Code to reproduce

    Android version

    Android 9 , API 28

    Impacted devices

    Samsung S9+

    Installation method

    Gradle

    SDK version

    10.0.1

    Other information

    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.debug/com.stripe.android.stripe3ds2.views.ChallengeActivity}: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.stripe.android.stripe3ds2.transaction.d$b) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3092) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926) at android.os.Handler.dispatchMessage(Handler.java:106) at android.os.Looper.loop(Looper.java:214) at android.app.ActivityThread.main(ActivityThread.java:6986) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445) Caused by: java.lang.RuntimeException: Parcelable encountered ClassNotFoundException reading a Serializable object (name = com.stripe.android.stripe3ds2.transaction.d$b) at android.os.Parcel.readSerializable(Parcel.java:2949) at android.os.Parcel.readValue(Parcel.java:2735) at android.os.Parcel.readArrayMapInternal(Parcel.java:3053) at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288) at android.os.BaseBundle.unparcel(BaseBundle.java:232) at android.os.Bundle.getParcelable(Bundle.java:940) at com.stripe.android.stripe3ds2.views.ChallengeActivity.onCreate(Unknown Source:45) at android.app.Activity.performCreate(Activity.java:7326) at android.app.Activity.performCreate(Activity.java:7317) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:214)  at android.app.ActivityThread.main(ActivityThread.java:6986)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)  Caused by: java.lang.ClassNotFoundException: com.google.android.gms.org.conscrypt.OpenSSLECPublicKey at java.lang.Class.classForName(Native Method) at java.lang.Class.forName(Class.java:453) at android.os.Parcel$2.resolveClass(Parcel.java:2935) at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1615) at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1520) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1776) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2002) at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1926) at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1803) at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353) at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373) at android.os.Parcel.readSerializable(Parcel.java:2943) at android.os.Parcel.readValue(Parcel.java:2735)  at android.os.Parcel.readArrayMapInternal(Parcel.java:3053)  at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288)  at android.os.BaseBundle.unparcel(BaseBundle.java:232)  at android.os.Bundle.getParcelable(Bundle.java:940)  at com.stripe.android.stripe3ds2.views.ChallengeActivity.onCreate(Unknown Source:45)  at android.app.Activity.performCreate(Activity.java:7326)  at android.app.Activity.performCreate(Activity.java:7317)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:214)  at android.app.ActivityThread.main(ActivityThread.java:6986)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445)  Caused by: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.org.conscrypt.OpenSSLECPublicKey" on path: DexPathList[[zip file "/system/framework/org.apache.http.legacy.boot.jar", zip file "/data/app/com.example.debug-ckpiw-_8XSlwJUk2KQHXUQ==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.debug-ckpiw-_8XSlwJUk2KQHXUQ==/lib/arm64, /data/app/com.example.debug-ckpiw-_8XSlwJUk2KQHXUQ==/base.apk!/lib/arm64-v8a, /system/lib64]] at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:134) at java.lang.ClassLoader.loadClass(ClassLoader.java:379) at java.lang.ClassLoader.loadClass(ClassLoader.java:312) at java.lang.Class.classForName(Native Method)  at java.lang.Class.forName(Class.java:453)  at android.os.Parcel$2.resolveClass(Parcel.java:2935)  at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1615)  at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1520)  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1776)  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)  at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:2002)  at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1926)  at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1803)  at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1353)  at java.io.ObjectInputStream.readObject(ObjectInputStream.java:373)  at android.os.Parcel.readSerializable(Parcel.java:2943)  at android.os.Parcel.readValue(Parcel.java:2735)  at android.os.Parcel.readArrayMapInternal(Parcel.java:3053)  at android.os.BaseBundle.initializeFromParcelLocked(BaseBundle.java:288)  at android.os.BaseBundle.unparcel(BaseBundle.java:232)  at android.os.Bundle.getParcelable(Bundle.java:940)  at com.stripe.android.stripe3ds2.views.ChallengeActivity.onCreate(Unknown Source:45)  at android.app.Activity.performCreate(Activity.java:7326)  at android.app.Activity.performCreate(Activity.java:7317)  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3072)  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3235)  at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)  at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)  at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)  at android.os.Handler.dispatchMessage(Handler.java:106)  at android.os.Looper.loop(Looper.java:214)  at android.app.ActivityThread.main(ActivityThread.java:6986)  at java.lang.reflect.Method.invoke(Native Method)  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1445) 

    triaged 
    opened by sergey-belenkiy 32
  •  java.lang.NoClassDefFoundError: Failed resolution of: Lcom/stripe/android/stripe3ds2/service/StripeThreeDs2ServiceImpl;

    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/stripe/android/stripe3ds2/service/StripeThreeDs2ServiceImpl;

    For 3D Secure 2.

    when i update the library to

    "com.stripe:stripe-android:10.4.2@aar"

    i am getting this error

    java.lang.NoClassDefFoundError: Failed resolution of: Lcom/stripe/android/stripe3ds2/service/StripeThreeDs2ServiceImpl;

    when i initialise stripe using this : Stripe = Stripe(app,KR.strings.stripe_key) the application crashes .

    Where is this class StripeThreeDs2ServiceImpl defined as i cannot see that in the library that you have given

    triaged 
    opened by hamzabintariq123 26
  • Port Stripe-Android to Flutter

    Port Stripe-Android to Flutter

    We need Stripe-Android ported to Google's Flutter.

    There are 2 ways of doing that:

    1. One is to use platform-channels, so that a Dart layer interfaces with the original Stripe-Android code, in Java or Kotlin (see: https://flutter.io/docs/development/platform-integration/platform-channels).

    2. Another is to port it to native Dart.

    Note: Since Flutter is for iOS and Android, please also see: https://github.com/stripe/stripe-ios/issues/1129

    Currently there are some individuals trying to start something in that regard (https://pub.dartlang.org/packages/stripe_payment and https://pub.dartlang.org/packages/stripe_api), but that's incipient and I believe the Flutter community actually deserves official support from Stripe.

    Flutter reached stable 1.0 and is growing very fast. We need Stripe there too.

    JIRA-ed triaged 
    opened by marcglasberg 26
  • [BUG] Crash when calling PaymentLauncher.confirm(params:)

    [BUG] Crash when calling PaymentLauncher.confirm(params:)

    Summary

    When trying to use the PaymentLauncher to confirm a payment, it crashes the app.

    Code to reproduce

    paymentLauncher.confirm(confirmParams)

    Android version

    Using Android 12, happening on Stripe SDK versions 17+

    Impacted devices

    Happens on all devices tried on.

    Installation method

    Gradle

    Dependency Versions

    kotlin: 1.6.10 stripe-android: 19.3.0 Android Gradle Plugin: 7.1.2 Gradle: 7.3.3

    SDK classes

    PaymentLauncher

    Video

    Other information

    The payment intent in Stripe dashboard indicates that the payment intent was successfully confirmed, but we crash before we receive the callback.

    Stack trace:

    02-28 11:54:28.177 7422 7422 E AndroidRuntime: FATAL EXCEPTION: main
    02-28 11:54:28.177 7422 7422 E AndroidRuntime: Process: com.lightspeed.xseries.dev, PID: 7422
    02-28 11:54:28.177 7422 7422 E AndroidRuntime: java.lang.RuntimeException: Parcelable encountered IOException writing serializable object (name = kotlinx.coroutines.JobCancellationException)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Parcel.writeSerializable(Parcel.java:1850)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.stripe.android.payments.paymentlauncher.PaymentResult$Failed.writeToParcel(Unknown Source:10)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Parcel.writeParcelable(Parcel.java:1818)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Parcel.writeValue(Parcel.java:1724)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Parcel.writeArrayMapInternal(Parcel.java:945)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.BaseBundle.writeToParcelInner(BaseBundle.java:1584)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Bundle.writeToParcel(Bundle.java:1253)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Parcel.writeBundle(Parcel.java:1014)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.content.Intent.writeToParcel(Intent.java:11155)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.app.IActivityTaskManager$Stub$Proxy.finishActivity(IActivityTaskManager.java:4874)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.app.Activity.finish(Activity.java:6285)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.app.Activity.finish(Activity.java:6309)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity.finish(PaymentLauncherConfirmationActivity.kt:89)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity.finishWithResult(PaymentLauncherConfirmationActivity.kt:108)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity.$r8$lambda$CfpgStE7oOr92cQhCPbhChZ-Eio(Unknown Source:0)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.stripe.android.payments.paymentlauncher.PaymentLauncherConfirmationActivity$$ExternalSyntheticLambda0.onChanged(Unknown Source:4)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at androidx.lifecycle.LiveData$1.run(LiveData.java:93)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Handler.handleCallback(Handler.java:883)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Handler.dispatchMessage(Handler.java:100)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Looper.loop(Looper.java:237)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.app.ActivityThread.main(ActivityThread.java:8107)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.lang.reflect.Method.invoke(Native Method)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime: Caused by: java.io.NotSerializableException: kotlinx.coroutines.SupervisorJobImpl
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1240)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1604)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1565)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1488)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1234)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:354)
    02-28 11:54:28.177 7422 7422 E AndroidRuntime:    at android.os.Parcel.writeSerializable(Parcel.java:1845)
    
    bug 
    opened by reiaz-gafar 25
  • AddPaymentMethodActivity continuously loading, only adds card when back button pressed

    AddPaymentMethodActivity continuously loading, only adds card when back button pressed

    Summary

    I have just implemented Stripe into Android for the first time and the library is very clean, but I am having an issue when launching the AddPaymentActivity using:

    AddPaymentMethodActivityStarter(this).startForResult(
        AddPaymentMethodActivityStarter.Args.Builder()
            .setShouldAttachToCustomer(true)
            .build())
    

    When I use shouldAttachToCustomer(false) the Activity immediately finishes when the tick is pressed and my callback in onActivityResult is triggered in the calling Activity. However when I use shouldAttachToCustomer(true) to save the card information, when entering card details and clicking on the tick the progress bar just continually shows a loading state.

    However when I press the back button (after the tick has already been pressed and the progress bar is stuck loading) the card is added to the account, I have verified this by launching STPPaymentOptionsViewController on our iOS version to view all attached cards. The card is not saved when the tick is clicked, but is immediately saved when the back button is pressed after the tick icon. I have verified this with a log statement in the return from my call to our APIs ephemeral key endpoint - the call to fetch an ephemeral key is not made until the back button is pressed.

    Code to reproduce

    In my Application onCreate():

    class CustomApplication : Application() {
    
        override fun onCreate() {
            super.onCreate()
            setupPaymentSession()
        }
    
        private fun setupPaymentSession() {
            PaymentConfiguration.init(
                applicationContext,
                BuildConfig.STRIPE_KEY
            )
        }
    }
    

    In the calling Activity:

    class DashboardActivity : AppCompatActivity() {
    
        private lateinit var mBinding: ActivityDashboardBinding
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
    
            mBinding = DataBindingUtil.setContentView(this, R.layout.activity_dashboard)
            mBinding.lifecycleOwner = this
    
            if (intent.hasExtra(SHOULD_SETUP_STRIPE_PAYMENTS)) {
                if (intent.getBooleanExtra(SHOULD_SETUP_STRIPE_PAYMENTS, false)) addStripePaymentMethod()
            }
    
        }
    
        private fun addStripePaymentMethod() {
            setupPaymentSession()
            AddPaymentMethodActivityStarter(this).startForResult(
                AddPaymentMethodActivityStarter.Args.Builder()
                    .setShouldAttachToCustomer(true)
                    .build())
        }
    
        private fun setupPaymentSession() {
            CustomerSession.initCustomerSession(
                this,
                StripeKeyProvider(this),
                true
            )
        }
    
        override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
            super.onActivityResult(requestCode, resultCode, data)
            if (requestCode == AddPaymentMethodActivityStarter.REQUEST_CODE &&
                resultCode == Activity.RESULT_OK && data != null) {
                val paymentMethod: PaymentMethod? =
                    AddPaymentMethodActivityStarter.Result.fromIntent(data)?.paymentMethod
                Log.v("Debug", "Card returned: $paymentMethod")
                CardAddedAlertDialog(this, 5000).show()
            }
        }
    
    }
    

    The EphemeralKeyProvider:

    class StripeKeyProvider(private val lifecycleOwner: LifecycleOwner) : EphemeralKeyProvider {
    
        override fun createEphemeralKey(
            apiVersion: String,
            keyUpdateListener: EphemeralKeyUpdateListener
        ) {
            ServiceManager.stripeService.getEphemeralKey(apiVersion).observe(lifecycleOwner, Observer { response ->
                if (response.status == Status.SUCCESS) {
                    response.data?.let { responseData ->
                        Log.v("Debug", "$responseData")
                        keyUpdateListener.onKeyUpdate(responseData)
                    } ?: run {
                        keyUpdateListener.onKeyUpdateFailure(response.code ?: 99, "Server returned no data")
                    }
                } else if (response.status == Status.ERROR) {
                    keyUpdateListener.onKeyUpdateFailure(response.code ?: 99, "Failed to retrieve ephemeral key: ${response.msg ?: "No Message"}")
                }
            })
        }
    
    }
    

    Any help will be much appreciated, I have a feeling maybe there is something I may have missed but have been battling with this for several hours now and haven't made any progress at all.

    The only similar issue I have found is #534, however the solution for that was to return the body as a String from the request to the ephemeral key provider. Given that the card is added to the account (albeit not when I would expect it to be) I am assuming this issue is none related, as I am passing our response from the API as a String:

    interface StripeAPI {
    
        @Multipart
        @POST("...")
        suspend fun getEphemeralKey(@Part("api_version") apiVersion: String): Response<String>
    
    }
    

    Android version

    Android 10, Samsung Galaxy S9+

    Installation method

    Using gradle:

    implementation 'com.stripe:stripe-android:14.2.1'

    android {
        compileSdkVersion 29
        buildToolsVersion "29.0.2"
    
        defaultConfig {
            minSdkVersion 24
            targetSdkVersion 29
        }
    
        buildTypes {
            release {
                minifyEnabled false
                proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
            }
        }
        dataBinding {
            enabled = true
        }
        compileOptions {
            sourceCompatibility JavaVersion.VERSION_1_8
            targetCompatibility JavaVersion.VERSION_1_8
        }
        kotlinOptions {
            jvmTarget = "1.8"
        }
    }
    
    triaged 
    opened by thebillington 25
  • CardInputWidget cant be inflated

    CardInputWidget cant be inflated

    Summary

    E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.dev, PID: 10077 android.view.InflateException: Binary XML file line #57: Binary XML file line #57: Error inflating class com.stripe.android.view.CardInputWidget Caused by: android.view.InflateException: Binary XML file line #57: Error inflating class com.stripe.android.view.CardInputWidget Caused by: java.lang.reflect.InvocationTargetException at java.lang.reflect.Constructor.newInstance0(Native Method) at java.lang.reflect.Constructor.newInstance(Constructor.java:334) at android.view.LayoutInflater.createView(LayoutInflater.java:647) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:790) at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:730) at android.view.LayoutInflater.rInflate(LayoutInflater.java:863) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.rInflate(LayoutInflater.java:866) at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:824) at android.view.LayoutInflater.inflate(LayoutInflater.java:515) at android.view.LayoutInflater.inflate(LayoutInflater.java:423) at android.view.LayoutInflater.inflate(LayoutInflater.java:374) at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:419) at android.app.Dialog.setContentView(Dialog.java:528) at com.example.dev.subscriptions.StartSubscriptionActivity.showAddPaymentDialog(StartSubscriptionActivity.java:313) at com.example.dev.subscriptions.StartSubscriptionActivity.lambda$onCreate$1$StartSubscriptionActivity(StartSubscriptionActivity.java:205) at com.example.dev.subscriptions.-$$Lambda$StartSubscriptionActivity$7YpX_mA5exg9JAJKWKcsekz_v7w.onClick(Unknown Source:2) at android.view.View.performClick(View.java:6294) at android.view.View$PerformClick.run(View.java:24770) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.app.ActivityThread.main(ActivityThread.java:6494) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)

    Code to reproduce

    xml code: payment_dialog.xml

            <!--  ...  -->
    
            <com.stripe.android.view.CardInputWidget
                android:id="@+id/cardInputWidget"
                android:layout_width="match_parent"
                android:layout_height="wrap_content" />
    
            <Button
                android:text="buy"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/payButton"
                android:layout_marginTop="20dp"
                android:backgroundTint="@android:color/holo_green_light"/>
    
            <!--  ...  -->
    
        </LinearLayout>
    

    java code: StartSubscriptionActivity.java (calling the dialogue from on click button)

    private void showAddPaymentDialog() { final Dialog dialog = new Dialog(StartSubscriptionActivity.this); dialog.setContentView(R.layout.dialog_payment); dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); dialog.setCancelable(true); dialog.show(); }

    Android version

    8 , 9 , 10

    Impacted devices

    Testing on samsung, oppo, huawei, lge nexus 5x

    Installation method

    android grandle

    SDK version

    implementation 'com.stripe:stripe-android:16.9.0'

    Other information

    please help.

    triaged 
    opened by ChadiGSfeir 24
  • Could not compile when integrate into my project

    Could not compile when integrate into my project

    Error: Class content provided for type descriptor com.stripe.android.stripe3ds2.transaction.A actually defines class com.stripe.android.stripe3ds2.transaction.a

    My android studio providing this error message to me, and I tried exclude com.stripe.android.stripe3ds2 but it not working at runtime stripe is depends on 3d secure. In stripe3ds2 with class of name A and a, make me confuse

    Installation method

    implementation 'com.stripe:stripe-android:9.3.5'
    

    SDK version

        compileSdkVersion = 28
    
    triaged 
    opened by GHChrisSu 22
  • [Maestro CI] Use default emulator target

    [Maestro CI] Use default emulator target

    Summary

    • playstore targeted emulator takes longer to initialize, freezes frequently and times out maestro drivers.
    • changed to default (without Google APIs).
    • Also removed screenshots (since we're already taking video)
    • Renamed flow files to be more descriptive.
    opened by carlosmuvi-stripe 0
  • Change `LiveData` to `StateFlow`

    Change `LiveData` to `StateFlow`

    Summary

    Update references from LiveData to StateFlow in PaymentSheet

    Motivation

    Enable state driven flow in PaymentSheet

    Testing

    • [x] Added tests
    • [x] Modified tests
    • [x] Manually verified
    opened by jameswoo-stripe 0
  • Prepare to remove ErrorFragment for Jetpack Compose

    Prepare to remove ErrorFragment for Jetpack Compose

    Summary

    Remove the screen transition logic in BaseErrorFragment and use ScreenTransitionLaunchedEffect inside ErrorScreen instead.

    Motivation

    Jetpack Compose

    Testing

    • [ ] Added tests
    • [x] Modified tests
    • [x] Manually verified

    Screenshots

    | Before | After | | ------------- | ------------- | | before screenshot | after screenshot |

    Changelog

    opened by ccen-stripe 1
  • Prepare to remove ConfirmationFragment and ConsentFragment for Jetpack Compose

    Prepare to remove ConfirmationFragment and ConsentFragment for Jetpack Compose

    Summary

    Prepare to remove ConfirmationFragment and ConsentFragment for Jetpack Compose

    Move the logic to call IdentityViewModel inside the screen itself, and delete the related Fragment tests.

    Motivation

    Jetpack Compose

    Testing

    • [ ] Added tests
    • [x] Modified tests
    • [x] Manually verified

    Screenshots

    | Before | After | | ------------- | ------------- | | before screenshot | after screenshot |

    Changelog

    opened by ccen-stripe 1
  • Prepare to remove IdentityUploadFragment for Jetpack Compose

    Prepare to remove IdentityUploadFragment for Jetpack Compose

    Summary

    Prepare to remove IdentityUploadFragment for Jetpack Compose

    • Move the data collection logic form IdentityUploadFragment.onViewCreated to IdentityViewModel.collectDataForDocumentUploadScreen
    • Note identityUploadViewModel.registerActivityResultCaller could not be moved yet as it registers for ActivityResultCaller and needs to be called in Fragment.onCreate, will move it to Activity.onCreate when Fragment is removed.

    Motivation

    Jetpack Compose

    Testing

    • [ ] Added tests
    • [x] Modified tests
    • [x] Manually verified

    Screenshots

    | Before | After | | ------------- | ------------- | | before screenshot | after screenshot |

    Changelog

    opened by ccen-stripe 1
  • Prepare to remove `DocSelectionFragment` for Jetpack Compose

    Prepare to remove `DocSelectionFragment` for Jetpack Compose

    Summary

    Clean up all logic DocSelectionFragment to IdentityViewModel

    Motivation

    Jetpack Compose

    Testing

    • [ ] Added tests
    • [x] Modified tests
    • [x] Manually verified

    Screenshots

    | Before | After | | ------------- | ------------- | | before screenshot | after screenshot |

    Changelog

    opened by ccen-stripe 1
Releases(v20.17.0)
  • v20.17.0(Dec 12, 2022)

    Payments

    • [CHANGED][5938](https://github.com/stripe/stripe-android/pull/5938) Methods on Stripe for retrieving and confirming intents now accept an optional expand argument to expand fields in the response.

    PaymentSheet

    • [FIXED][5910](https://github.com/stripe/stripe-android/pull/5910) PaymentSheet now fails gracefully when launched with invalid arguments.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.17.0.apk(34.01 MB)
    paymentsheet-example-debug-androidTest-20.17.0.apk(5.56 MB)
  • v20.16.2(Dec 5, 2022)

    PaymentSheet

    • [FIXED][5888](https://github.com/stripe/stripe-android/pull/5888) The primary button no longer stays disabled when returning from the Add payment method to the Saved payment methods screen.
    • [CHANGED][5883](https://github.com/stripe/stripe-android/pull/5883) Fixed a few crashes when activities were launched on rooted devices.

    Financial Connections

    • [CHANGED][5891](https://github.com/stripe/stripe-android/pull/5891) Fixed a few crashes when activities were launched on rooted devices.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.16.2.apk(34.00 MB)
    paymentsheet-example-debug-androidTest-20.16.2.apk(5.56 MB)
  • v20.16.1(Nov 21, 2022)

    PaymentSheet

    • [CHANGED][5848](https://github.com/stripe/stripe-android/pull/5848) We now disable the back button while processing intents in PaymentSheet to prevent them from incorrectly being displayed as canceled.

    CardScan

    • [SECURITY][5798](https://github.com/stripe/stripe-android/pull/5798) URL-encode IDs used in URLs to prevent injection attacks.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.16.1.apk(32.96 MB)
    paymentsheet-example-debug-androidTest-20.16.1.apk(5.55 MB)
  • v20.16.0(Nov 14, 2022)

    Payments

    • [CHANGED][5789](https://github.com/stripe/stripe-android/pull/5789) We now disable the back button while confirming intents with PaymentLauncher to prevent them from incorrectly being displayed as failed.

    PaymentSheet

    • [ADDED][5676](https://github.com/stripe/stripe-android/pull/5676) Added AddressLauncher, an activity that collects local and international addresses for your customers.
    • [ADDED][5769](https://github.com/stripe/stripe-android/pull/5769) Added PaymentSheet.Configuration.allowsPaymentMethodsRequiringShippingAddress. Previously, to allow payment methods that require a shipping address (e.g. Afterpay and Affirm) in PaymentSheet, you attached a shipping address to the PaymentIntent before initializing PaymentSheet. Now, you can instead set this property to true and set PaymentSheet.Configuration.shippingDetails or PaymentSheet.FlowController.shippingDetails whenever your customer’s shipping address becomes available. The shipping address will be attached to the PaymentIntent when the customer completes the checkout.

    Identity

    • [FIXED][5816](https://github.com/stripe/stripe-android/pull/5816) Fixed an issue where the SDK would crash when recovering from process death.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.16.0.apk(32.76 MB)
    paymentsheet-example-debug-androidTest-20.16.0.apk(5.55 MB)
  • v20.15.4(Nov 7, 2022)

  • v20.15.3(Oct 31, 2022)

  • v20.15.2(Oct 25, 2022)

    This release fixes a few bugs in PaymentSession, PaymentSheet and CardScan.

    Payments

    • [FIXED][5722](https://github.com/stripe/stripe-android/pull/5722) Fix saving and restoring Google Pay selection in PaymentSession.

    PaymentSheet

    • [FIXED][5738](https://github.com/stripe/stripe-android/pull/5738) Fix crash on Payment Sheet when integrating with Compose.

    CardScan

    • [FIXED][5730](https://github.com/stripe/stripe-android/pull/5730) Fix crash during initialization.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.15.2.apk(31.96 MB)
    paymentsheet-example-debug-androidTest-20.15.2.apk(4.99 MB)
  • v20.15.1(Oct 17, 2022)

    This release fixes some bugs in ShippingInfoWidget, PaymentSheet, and when the app is backgrounded during confirmation on Android 10 and 11.

    Payments

    • [FIXED][5701](https://github.com/stripe/stripe-android/pull/5701) Treat blank fields as invalid in ShippingInfoWidget.
    • [FIXED][5667](https://github.com/stripe/stripe-android/pull/5667) Completed payments are no longer incorrectly reported as having failed if the app is backgrounded during confirmation on Android 10 and 11.

    PaymentSheet

    • [FIXED][5715](https://github.com/stripe/stripe-android/pull/5715) Postal codes for countries other than US and Canada are no longer limited to a single character.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.15.1.apk(31.91 MB)
    paymentsheet-example-debug-androidTest-20.15.1.apk(4.99 MB)
  • v20.15.0(Oct 11, 2022)

    This release adds Link as a payment method to the SDK and fixes a minor issue with CardScan.

    PaymentSheet

    • [ADDED][5692](https://github.com/stripe/stripe-android/pull/5692) Enable Link as a payment method.

    CardScan

    • [CHANGED][5679](https://github.com/stripe/stripe-android/pull/5679) Fix oversized verification_frames payloads leading to failed scans.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.15.0.apk(31.85 MB)
    paymentsheet-example-debug-androidTest-20.15.0.apk(4.99 MB)
  • v20.14.1(Oct 3, 2022)

    This release expands the payment_method field on ACH requests and fixes a formatting error in CardInputWidget, CardMultilineWidget, and CardFormView.

    Payments

    • [FIXED][5547](https://github.com/stripe/stripe-android/pull/5547) Expiry dates in CardInputWidget, CardMultilineWidget, and CardFormView are no longer formatted incorrectly on certain devices.

    PaymentSheet

    • [FIXED][5624](https://github.com/stripe/stripe-android/pull/5624) CollectBankAccountResult included intents will now contain the expanded payment_method field.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.14.1.apk(31.77 MB)
    paymentsheet-example-debug-androidTest-20.14.1.apk(4.99 MB)
  • v20.14.0(Sep 26, 2022)

    This release fixes a payment-method related error in PaymentSheet and manages missing permissions on Financial Connections.

    PaymentSheet

    • [FIXED][5592](https://github.com/stripe/stripe-android/pull/5592)5613 Fix deletion of the last used payment method.

    Financial Connections

    • [CHANGED][5583](https://github.com/stripe/stripe-android/pull/5583) Adds support for account_numbers permission.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.14.0.apk(31.76 MB)
    paymentsheet-example-debug-androidTest-20.14.0.apk(4.99 MB)
  • v20.13.0(Sep 19, 2022)

    This release makes the PaymentMethod.Card.networks field public, fixes the Alipay integration and the card scan form encoding.

    Payments

    • [CHANGED] 5552 Make PaymentMethod.Card.networks field public.
    • [FIXED][5554](https://github.com/stripe/stripe-android/pull/5554) Fix Alipay integration when using the Alipay SDK.

    CardScan

    • [FIXED] 5574 Fix encoding for form parameters for scan stats.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.13.0.apk(31.66 MB)
    paymentsheet-example-debug-androidTest-20.13.0.apk(4.98 MB)
  • v20.12.0(Sep 13, 2022)

    This release upgrades compileSdkVersion to 33, updates Google Pay button to match the new brand guidelines and fixes some bugs in FlowController.

    • [CHANGED] 5495 Upgrade compileSdkVersion to 33.

    PaymentSheet

    • [ADDED][5502](https://github.com/stripe/stripe-android/pull/5502) Added phone number minimum length validation.
    • [ADDED][5518](https://github.com/stripe/stripe-android/pull/5518) Added state/province dropdown for US and Canada.
    • [CHANGED][5487](https://github.com/stripe/stripe-android/pull/5487) Updated Google Pay button to match new brand guidelines.
    • [FIXED][5480](https://github.com/stripe/stripe-android/pull/5480) FlowController now correctly preserves the previously selected payment method for guests.
    • [FIXED][5545](https://github.com/stripe/stripe-android/pull/5545) Fix an issue where custom flow PaymentSheet UI would have the bottom of the form cut off.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.12.0.apk(31.65 MB)
    paymentsheet-example-debug-androidTest-20.12.0.apk(4.98 MB)
  • v20.11.0(Aug 29, 2022)

  • v20.10.0(Aug 22, 2022)

    This release contains several bug fixes for PaymentSheet and binary size optimization for Identity.

    PaymentSheet

    • [FIXED][5422](https://github.com/stripe/stripe-android/pull/5422) Card expiration dates with a single-digit month are now preserved correctly when closing and re-opening the PaymentSheet via the FlowController.

    Identity

    • [FIXED][5404](https://github.com/stripe/stripe-android/pull/5404) Remove Flex OP dependency from Identity SDK and reduce its binary size.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.10.0.apk(30.80 MB)
    paymentsheet-example-debug-androidTest-20.10.0.apk(4.97 MB)
  • v20.9.0(Aug 16, 2022)

    This release contains several bug fixes for Payments, PaymentSheet and Financial Connections. Adds IdentityVerificationSheet#rememberIdentityVerificationSheet for Identity.

    PaymentSheet

    • [ADDED][5340](https://github.com/stripe/stripe-android/pull/5340) Add a resetCustomer method to PaymentSheet, that clears any persisted authentication state.
    • [FIXED][5388](https://github.com/stripe/stripe-android/pull/5388) Fixed issue with Appearance API not working with FlowController
    • [FIXED][5399](https://github.com/stripe/stripe-android/pull/5399) Bank Account Payments that pass stripeAccountId for connected accounts will now succeed.

    Payments

    • [FIXED][5399](https://github.com/stripe/stripe-android/pull/5399) CollectBankAccountLauncher now accepts stripeAccountId for Connect merchants.

    Financial Connections

    • [FIXED][5408](https://github.com/stripe/stripe-android/pull/5408) FinancialConnectionsSheet#Configuration now accepts stripeAccountId for Connect merchants.

    Identity

    • [ADDED][5370](https://github.com/stripe/stripe-android/pull/5370) Add factory method for Compose.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.9.0.apk(30.77 MB)
    paymentsheet-example-debug-androidTest-20.9.0.apk(4.97 MB)
  • v20.8.0(Aug 1, 2022)

    This release contains several bug fixes for Payments, PaymentSheet, deprecates createForCompose, and adds new rememberLauncher features for Payments

    PaymentSheet

    • [FIXED][5321](https://github.com/stripe/stripe-android/pull/5321) Fixed issue with forever loading and mochi library.

    Payments

    • [FIXED][5308](https://github.com/stripe/stripe-android/pull/5308) OXXO so that processing is considered a successful terminal state, similar to Konbini and Boleto.
    • [FIXED][5138](https://github.com/stripe/stripe-android/pull/5138) Fixed an issue where PaymentSheet will show a failure even when 3DS2 Payment/SetupIntent is successful.
    • [ADDED][5274](https://github.com/stripe/stripe-android/pull/5274) Create rememberLauncher method enabling usage of GooglePayLauncher, GooglePayPaymentMethodLauncher and PaymentLauncher in Compose.
    • [DEPRECATED][5274](https://github.com/stripe/stripe-android/pull/5274) Deprecate PaymentLauncher.createForCompose in favor of PaymentLauncher.rememberLauncher.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.8.0.apk(30.70 MB)
    paymentsheet-example-debug-androidTest-20.8.0.apk(4.97 MB)
  • v20.7.0(Jul 6, 2022)

    • This release adds additional support for Afterpay/Clearpay in PaymentSheet.

    PaymentSheet

    • [ADDED][5221](https://github.com/stripe/stripe-android/pull/5221) Afterpay/Clearpay support for FR, ES countries and EUR currencies
    • [FIXED][5215](https://github.com/stripe/stripe-android/pull/5215) Fix issue with us_bank_account appearing in payment sheet when Financial Connections SDK is not available

    Payments

    • [FIXED][5226](https://github.com/stripe/stripe-android/pull/5226) Persist GooglePayLauncherViewModel state across process death
    • [ADDED][5238](https://github.com/stripe/stripe-android/pull/5238) Expose the current card brand in CardFormView, CardInputWidget, and CardMultiLineWidget

    Identity

    • [ADDED][5149](https://github.com/stripe/stripe-android/pull/5149) First release to fully support selfie capture

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
    paymentsheet-example-debug-20.7.0.apk(30.60 MB)
    paymentsheet-example-debug-androidTest-20.7.0.apk(4.97 MB)
  • v20.6.2(Jun 23, 2022)

    This release contains several bug fixes for Payments, reduces the size of StripeCardScan, and adds new rememberFinancialConnections features for Financial Connections.

    • [CHANGED][5162](https://github.com/stripe/stripe-android/pull/5162) Upgrade compileSdkVersion to 32, Kotlin version to 1.6.21, Android Gradle plugin to 7.2.1.

    Financial Connections

    • [ADDED][5117](https://github.com/stripe/stripe-android/pull/5117) Adds rememberFinancialConnectionsSheet and rememberFinancialConnectionsSheetForToken.

    Payments

    • [FIXED][5195](https://github.com/stripe/stripe-android/pull/5195) Fix focus when navigating across compose fields
    • [FIXED][5196](https://github.com/stripe/stripe-android/pull/5196) Fix PaymentOptionsAddPaymentMethodFragmentTest
    • [FIXED][5183](https://github.com/stripe/stripe-android/pull/5183) Fix Link payment option card in dark mode
    • [FIXED][5148](https://github.com/stripe/stripe-android/pull/5148) Restore selected payment method when user returns to Link
    • [FIXED][5142](https://github.com/stripe/stripe-android/pull/5142) Fix issue with animations running on main thread

    CardScan

    • [CHANGED][5144](https://github.com/stripe/stripe-android/pull/5144) Add a minimal TFLite module to stripecardscan.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v20.5.0(Jun 1, 2022)

    This release contains several bug fixes for Payments and PaymentSheet, deprecates the PaymentSheet's primaryButtonColor api in favor of the new appearance api, and adds card brand icons to the card details form.

    PaymentSheet

    • [DEPRECATED][5061](https://github.com/stripe/stripe-android/pull/5061) Add Deprecated annotation to old primaryButtonColor api.
    • [FIXED][5068](https://github.com/stripe/stripe-android/pull/5068) Fix missing theming for add lpm button and notes text.
    • [ADDED][5069](https://github.com/stripe/stripe-android/pull/5069) Add card brand icons to card details form.

    Payments

    • [FIXED][5079](https://github.com/stripe/stripe-android/pull/5079) Add 3ds2 url to list of completion URLs so callbacks work correctly.
    • [FIXED][5094](https://github.com/stripe/stripe-android/pull/5094) Use correct cvc icon in card form view.

    CardScan

    • [FIXED] 5075 Prevent a crash when the fragment is detached.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v20.4.0(May 23, 2022)

    This release adds appearance customization APIs to payment sheet and enables Affirm and AU BECS direct debit as payment methods within Payment Sheet.

    Payments

    • [CHANGED][5038](https://github.com/stripe/stripe-android/pull/5038) Remove force portrait mode in Google Pay.
    • [ADDED][5011](https://github.com/stripe/stripe-android/pull/5011) Add allowCreditCards to GooglePayLauncher

    PaymentSheet

    • [FIXED][5039](https://github.com/stripe/stripe-android/pull/5039) Fixed the format of the country dropdown in PaymentSheet for all languages.
    • [ADDED][5042](https://github.com/stripe/stripe-android/pull/5042) Added Affirm and AU BECS Direct Debit.
    • [ADDED][5020](https://github.com/stripe/stripe-android/pull/5020) Merge Appearance APIs to master.
    • [FIXED][5022](https://github.com/stripe/stripe-android/pull/5022) Add missing translation for card information.
    • [FIXED][5048](https://github.com/stripe/stripe-android/pull/5048) Fixed a crash when removing the last payment method in the custom flow editor.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v20.3.0(May 16, 2022)

    This release adds us_bank_account PaymentMethod to PaymentSheet.

    PaymentSheet

    • [FIXED][5011](https://github.com/stripe/stripe-android/pull/5011) fix flying payment sheet by downgrading material from 1.6 to 1.5
    • [ADDED][4964](https://github.com/stripe/stripe-android/pull/4964) us_bank_account PaymentMethod is now available in PaymentSheet

    camera-core

    • [FIXED][5004](https://github.com/stripe/stripe-android/pull/5004) Fix front camera callback to return an upside down image
    Source code(tar.gz)
    Source code(zip)
  • v20.2.2(May 9, 2022)

    This release contains bug fixes in PaymentSheet.

    PaymentSheet

    • [FIXED][4966](https://github.com/stripe/stripe-android/pull/4966) Replaced alpha androidx.lifecycle dependencies with stable versions
    • [FIXED][4961](https://github.com/stripe/stripe-android/pull/4961) Fix issue entering text with small forms.
    Source code(tar.gz)
    Source code(zip)
  • v20.2.1(May 3, 2022)

    This release contains bug fixes in PaymentSheet and Payments.

    Payments

    • [CHANGED] 4910 Some changes affecting CollectBankAccountLauncher (ACH)
      • CollectBankAccountResponse#LinkAccountSession to FinancialConnectionsSession
      • LinkedAccount to FinancialConnectionsAccount.

    PaymentSheet

    • [FIXED] 4918 Fix a problem introduced in 20.0.0 where save for future use was defaulted to true.
    • [FIXED] 4921 Fixed a crash that could happen when switching between LPMs.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v20.2.0(Apr 25, 2022)

    This release adds card scanning to PaymentSheet.

    PaymentSheet

    • [ADDED] 4804 Card-scanning in PaymentSheet
    • [FIXED] 4861 Remove font resource to save space and default to system default
    • [FIXED] 4909 In the multi-step flow when re-opening to a new card the form will pre-populate. Also the default billing address will pre-populate in the form.

    Financial Connections

    • [CHANGED] 4887 Renamed Connections to Financial Connections.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v20.1.0(Apr 18, 2022)

    This release includes several Payments and PaymentSheet bug fixes.

    Payments (com.stripe:stripe-android)

    • [ADDED] 4874 us_bank_account PaymentMethod is now available for ACH Direct Debit payments, including APIs to collect customer bank information (requires Connections SDK) and verify microdeposits.
    • [FIXED] 4875 fix postal code callback not firing when enabled

    PaymentSheet

    • [FIXED] 4861 Remove font resource to save space and default to system default
    • [CHANGED] 4855 Remove force portrait mode in PaymentLauncher.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v20.0.1(Apr 11, 2022)

    20.0.1 - 2022-04-11

    This release includes several PaymentSheet bug fixes.

    PaymentSheet

    • [FIXED] 4840 Multi-step now shows the last 4 of the card number instead of 'card'.
    • [FIXED] 4847 Fix the width of the PaymentSheet payment method selector.

    Identity

    • [FIXED] 4851 Add support for http logoUri.
    Source code(tar.gz)
    Source code(zip)
  • v20.0.0(Apr 4, 2022)

    This release patches on a crash on PaymentLauncher, updates the package name of some public classes, changes the public API for CardImageVerificationSheet and releases Identity SDK.

    Payments (com.stripe:stripe-android)

    • [FIXED] 4776 fix issue with PaymentLauncher configuration change
    • [CHANGED] 4358 Updated the card element on PaymentSheet to use Compose.

    Identity (com.stripe:identity)

    • [ADDED] 4820 Release Stripe's Identity SDK.

    Connections (com.stripe:connection)

    • [ADDED] 4818 Connections SDK can be optionally included to support ACH Direct Debit payments.

    CardScan (com.stripe:stripecardscan)

    • [CHANGED] 4778 CardImageVerificationSheet: removed the callback from present to create, wrapping it inside a CardImageVerificationResultCallback object.

    Core (com.stripe:stripe-core)

    • [CHANGED] 4800 Relocated network exceptions to :stripe-core.
    • [CHANGED] 4803 Remove network related internal files.
    • [CHANGED] 4803 The following classes' packages are changed
      • com.stripe.android.AppInfo -> com.stripe.android.core.AppInfo
      • com.stripe.android.model.StripeFile -> com.stripe.android.core.model.StripeFile
      • com.stripe.android.model.StripeFileParams -> com.stripe.android.core.model.StripeFileParams
      • com.stripe.android.model.StripeFilePurpose -> com.stripe.android.core.model.StripeFilePurpose

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
  • v19.3.1(Mar 22, 2022)

  • v19.3.0(Mar 16, 2022)

    This release enables a new configuration object to be defined for StripeCardScan and updates our 3ds2 SDK.

    PaymentSheet

    • [FIXED] 4646 Update 3ds2 to latest version 6.1.4, see PR for specific issues addressed.

    CardScan

    • [ADDED] 4689 The CardImageVerificationSheet initializer can now take an additional Configuration object.

    See the changelog for more details.

    Source code(tar.gz)
    Source code(zip)
Segmenkt - The SegmenKT Kotlin SDK is a Kotlin-first SDK for Segment

SegmenKT Kotlin SDK The SegmenKT Kotlin SDK is a Kotlin-first SDK for Segment. I

UNiDAYS 0 Nov 25, 2022
Frogo SDK - SDK Core for Easy Development

SDK for anything your problem to make easier developing android apps

Frogobox 10 Dec 15, 2022
HubSpot Kotlin SDK 🧺 Implementation of HubSpot API for Java/Kotlin in tiny SDK

HubSpot Kotlin SDK ?? Implementation of HubSpot API for Java/Kotlin in tiny SDK

BOOM 3 Oct 27, 2022
AWS SDK for Android. For more information, see our web site:

AWS SDK for Android For new projects, we recommend interacting with AWS using the Amplify Framework. The AWS SDK for Android is a collection of low-le

AWS Amplify 976 Dec 29, 2022
Countly Product Analytics Android SDK

Countly Android SDK We're hiring: Countly is looking for Android SDK developers, full stack devs, devops and growth hackers (remote work). Click this

Countly Team 648 Dec 23, 2022
Android Real Time Chat & Messaging SDK

Android Chat SDK Overview Applozic brings real-time engagement with chat, video, and voice to your web, mobile, and conversational apps. We power emer

Applozic 659 May 14, 2022
Evernote SDK for Android

Evernote SDK for Android version 2.0.0-RC4 Evernote API version 1.25 Overview This SDK wraps the Evernote Cloud API and provides OAuth authentication

Evernote 424 Dec 9, 2022
Air Native Extension (iOS and Android) for the Facebook mobile SDK

Air Native Extension for Facebook (iOS + Android) This is an AIR Native Extension for the Facebook SDK on iOS and Android. It has been developed by Fr

Freshplanet 219 Nov 25, 2022
Android Chat SDK built on Firebase

Chat21 is the core of the open source live chat platform Tiledesk.com. Chat21 SDK Documentation Features With Chat21 Android SDK you can: Send a direc

Chat21 235 Dec 2, 2022
Liquid SDK (Android)

Liquid Android SDK Quick Start to Liquid SDK for Android This document is just a quick start introduction to Liquid SDK for Android. We recommend you

Liquid 17 Nov 12, 2021
AWS SDK for Android. For more information, see our web site:

AWS SDK for Android For new projects, we recommend interacting with AWS using the Amplify Framework. The AWS SDK for Android is a collection of low-le

AWS Amplify 975 Dec 24, 2022
新浪微博 Android SDK

ReadMe 公告: 鉴于线上服务器出现问题,推荐下载本地aar后上传到自己公司的服务器,保证后续服务稳定, 我们也将尽快重新提供一个稳定的地址供大家使用。 新包地址:https://github.com/sinaweibosdk/weibo_android_sdk/tree/master/2019

SinaWeiboSDK 1.8k Dec 30, 2022
Official Appwrite Android SDK 💚 🤖

Appwrite Android SDK This SDK is compatible with Appwrite server version 0.8.x. For older versions, please check previous releases. Appwrite is an ope

Appwrite 62 Dec 18, 2022
This App is sending Face capture data over network, built around the latest Android Arcore SDK.

AndroidArcoreFacesStreaming From any Android phone ArCore compatible, using this app will send over TCP 5680 bytes messages: The first 5616 bytes is a

Maxime Dupart 30 Nov 16, 2022
Trackingplan for Android SDK

With Trackingplan for Android you can make sure that your tracking is going as you planned without changing your current analytics stack or code.

Trackingplan 3 Oct 26, 2021
Desk360 Mobile Chat SDK for Android

Desk360 Chat Android SDK Introduction Desk360 Live Chat SDK is an open source Android library that provides live support to your customers directly fr

null 31 Dec 13, 2022
Storyblok Kotlin Multiplatform SDK sample (Android, JVM, JS)

storyblok-mp-SDK-sample *WIP* ... a showcase of the Storyblok Kotlin Multiplatform Client SDK. (Android, JVM, JS, iOS, ...) What's included ?? • About

Mike Penz 6 Jan 8, 2022
A demo of Rongcloud uniapp sdk integration for compiling debug-apk in Android Studio

Rongcloud-uniapp-sdk-demo A demo of Rongcloud uniapp sdk integration for compiling debug-apk in Android Studio 这是一个为了给uniapp在Android平台打出debug-apk的demo

Zongkui Guo 1 Oct 13, 2021
StreamPack: live streaming SDK for Android based on Secure Reliable Transport

StreamPack: live streaming SDK for Android based on Secure Reliable Transport (SRT) StreamPack brings the best audio/video live technologies together

guo shao hong 2 Aug 10, 2022