Skip to content

Releases: dodopayments/dodopayments-mobile-sdk

React Native v1.2.0

Choose a tag to compare

@thepushkaraj thepushkaraj released this 08 Aug 08:01
  • Add customization on start(): an optional BrowserCustomization with
    separate android/ios bags. Android covers toolbar and
    navigation-bar(-divider) colors, close button style and position,
    share/title/URL-bar-hiding/bookmarks/downloads toggles, and a forced
    light/dark colorScheme. iOS covers dismiss button style, bar-collapsing,
    presentation style, and colorScheme. Every field is optional and simply
    omitted when unset, so the underlying platform's own current behavior
    applies rather than this SDK asserting a value on its behalf.
  • Bumps com.dodopayments.api:checkout-android to 1.1.0 and re-vendors the
    Swift core with the same customization support.

Kotlin v1.1.0

Choose a tag to compare

@thepushkaraj thepushkaraj released this 08 Aug 07:55
  • Add BrowserCustomization on CheckoutParams: toolbar and
    navigation-bar(-divider) colors, close button style (DEFAULT/BACK) and
    position, share/title/URL-bar-hiding/bookmarks/downloads toggles, and a
    forced light/dark colorScheme. Every field defaults to null, and null
    means the corresponding CustomTabsIntent.Builder setter is never called
    at all — the Custom Tab host's own current behavior applies rather than
    this SDK asserting a value on its behalf.

Flutter v1.1.0

Choose a tag to compare

@thepushkaraj thepushkaraj released this 08 Aug 08:01
  • Add customization on CheckoutParams: an optional AndroidBrowserOptions/
    IosBrowserOptions pair. Android covers toolbar and
    navigation-bar(-divider) colors, close button style and position,
    share/title/URL-bar-hiding/bookmarks/downloads toggles, and a forced
    light/dark color scheme. iOS covers dismiss button style, bar-collapsing,
    presentation style, and color scheme. Every field is nullable and simply
    transmitted as null when unset, so the underlying platform's own current
    behavior applies rather than this SDK asserting a value on its behalf.
  • Bumps com.dodopayments.api:checkout-android to 1.1.0 and re-vendors the
    Swift core with the same customization support.

react-native-v1.1.2

Choose a tag to compare

@thepushkaraj thepushkaraj released this 04 Aug 12:19
c8678e9
  • Fix: swiping down to dismiss the checkout sheet left start()'s promise
    unresolved, which also kept the in-progress guard set — every later
    start() call rejected with ALREADY_IN_PROGRESS until app restart.
    Re-vendors the Swift core at v1.0.2, which resolves the promise with
    cancelled on swipe-dismiss too, same as the Done button.

flutter-v1.0.4

Choose a tag to compare

@thepushkaraj thepushkaraj released this 04 Aug 12:19
c8678e9
  • Fix: swiping down to dismiss the checkout sheet left start()'s Future
    uncompleted, which also kept the in-progress guard set — every later
    start() call threw ALREADY_IN_PROGRESS until app restart. Re-vendors
    the Swift core at v1.0.2, which completes the Future with cancelled
    on swipe-dismiss too, same as the Done button.

React Native v1.1.1

Choose a tag to compare

@thepushkaraj thepushkaraj released this 03 Aug 18:07
70e08c0
  • Bump com.dodopayments.api:checkout-android to 1.0.2 and re-vendor the
    Swift core at v1.0.1: a CANCELLED/PENDING result no longer wipes the
    abandoned-session record, so getAbandonedSession() can be reconciled
    after a dismissed or unparseable checkout instead of returning null.
  • README's reconcileAbandonedSession() example now reconciles pending
    alongside cancelled, and only clears the record once the backend
    reports a terminal outcome.

Kotlin v1.0.2

Choose a tag to compare

@thepushkaraj thepushkaraj released this 03 Aug 16:47
75994b2
  • Fix: a CANCELLED or PENDING result no longer wipes the abandoned-session
    record. Dismissing the Custom Tab is one outcome the SDK cannot vouch for --
    no return URL arrived, so the payment may well have succeeded (e.g. tapping
    the close button while the hosted success page counts down its redirect).
    PENDING is the other: it's also the fallback for a missing or unrecognized
    status, so a malformed return URL landed here too, sometimes with no
    paymentId/subscriptionId either -- clearing then left no handle at all.
    The cks_... session id now survives both, so getAbandonedSession()
    returns it and the merchant can reconcile server-side instead of guessing.
    Statuses parsed off the return URL with a durable outcome still clear the
    record as before, and pre-presentation failures still clear it so no
    phantom session is left behind -- except a checkout activity recreated by a
    late redirect with no launch parameters, which can follow a real payment in
    a now-dead process and no longer clears blindly.
  • No API change: the five statuses and their triggers are untouched.

Flutter v1.0.3

Choose a tag to compare

@thepushkaraj thepushkaraj released this 03 Aug 18:07
deaef4f
  • Bump com.dodopayments.api:checkout-android to 1.0.2 and re-vendor the
    Swift core at v1.0.1: a CheckoutStatus.cancelled/.pending result no
    longer wipes the abandoned-session record, so getAbandonedSession() can
    be reconciled after a dismissed or unparseable checkout instead of
    returning null.
  • README's reconcileAbandonedSession() example now reconciles pending
    alongside cancelled, and only clears the record once the backend
    reports a terminal outcome.

React Native v1.1.0

Choose a tag to compare

@dodo-squirrels dodo-squirrels released this 29 Jul 14:35
1f52148
  • Expo config plugin registers the merchant callback scheme at prebuild when given { "scheme": "myappcheckout" }: writes Android manifestPlaceholders["dodoCallbackScheme"] and an iOS CFBundleURLTypes entry. Bare plugin entry without scheme remains a no-op.
  • Rejects http/https and other system schemes; throws on invalid present schemes (no silent no-op).
  • Gradle editing is scoped to the defaultConfig block and skips comments and string literals, so a manifestPlaceholders map belonging to a buildTypes/productFlavors variant — or one that is commented out — is never edited by mistake. Merges into an existing defaultConfig map (including the empty [:] literal) and otherwise appends at the end of the block, so a later whole-map assignment cannot wipe the key. Re-running prebuild is idempotent and preserves surrounding indentation.
  • Warns when the scheme collides with expo.scheme (prefer a dedicated checkout scheme). Loads config-plugins via expo/config-plugins with a @expo/config-plugins fallback. iOS still needs handleOpenURL.

React Native v1.0.1

Choose a tag to compare

@thepushkaraj thepushkaraj released this 28 Jul 18:46
924fbb1
  • Fix NativeDodoCheckout.ts codegen spec failing to parse on RN <0.80: import UnsafeObject/EventEmitter directly from react-native/Libraries/Types/CodegenTypes instead of the namespaced CodegenTypes.X form, which older codegen can't resolve.
  • android/build.gradle now depends on checkout-android:1.0.1 (was still pinned to 1.0.0) and kotlinx-coroutines-android:1.9.0 (was 1.11.0) — the stale pins here previously overrode the Kotlin core's own fixed versions for any consuming RN app. Lowered compileSdk/targetSdk fallback from 36 to 35 to match.
  • Correct the documented minimum React Native version from 0.76.0 to 0.77.0 — 0.76's CodegenTypes module has no EventEmitter export, so this spec never actually typechecked on 0.76 in the first place.
  • Document the real Android floor: compileSdk 34, taken from the AAR metadata of the AndroidX artifacts the native core depends on. There is no Kotlin Gradle plugin or AGP floor beyond what React Native itself imposes.