STPApplePayContext hangs after didAuthorizePayment on iOS 26 + React Native New Architecture — "Payment Not Completed"

Open
#2,575 4 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
ios, react-native, swift, typescript

Research direction

Start in StripeApplePay/StripeApplePay/Source/ApplePayContext/STPApplePayContext.swift around _completePayment and the PaymentMethod.create completion, then reproduce the flow on the listed iOS 26 and React Native New Architecture environment. Trace why the completion does not return; done means confirmPlatformPayPayment settles and the PaymentIntent is confirmed without Apple Pay showing “Payment Not Completed”.

Written by the indexing model from the issue text.

Description

triaged

STPApplePayContext hangs after didAuthorizePayment on iOS 26 + React Native New Architecture — "Payment Not Completed"

Describe the bug

When a customer pays with Apple Pay via @stripe/stripe-react-native's
confirmPlatformPayPayment({ applePay: ... }), authorization succeeds
(Face ID), the sheet dismisses to a spinner, and the payment never settles —
ending with Apple Pay's "Payment Not Completed". Reproducible on iOS 26.x
devices under the React Native New Architecture (Fabric) + Hermes.

Native instrumentation confirms that on iOS,
confirmPlatformPayPayment({ applePay }) invokes STPApplePayContext.

React Native implementation (failing path)
// @stripe/stripe-react-native 0.74.0 (bundled Stripe iOS SDK 26.6.0)
import { confirmPlatformPayPayment, PlatformPay } from '@stripe/stripe-react-native'

const result = await confirmPlatformPayPayment(paymentIntentClientSecret, {
  applePay: {
    merchantCapabilities: [
      PlatformPay.ApplePayMerchantCapability.Supports3DS,
      PlatformPay.ApplePayMerchantCapability.SupportsCredit,
      PlatformPay.ApplePayMerchantCapability.SupportsDebit,
    ],
    merchantCountryCode: 'HK',
    currencyCode: 'HKD',
    cartItems: [
      {
        label: 'Order',
        amount: (amount / 100).toString(),
        paymentType: PlatformPay.PaymentType.Immediate,
      },
    ],
  },
})

The promise returned by confirmPlatformPayPayment never resolves or
rejects after authorization. We confirmed this by wrapping the call in a
Promise.race with a 90 s timeout plus an AppState watchdog — the
timeout/rejection fires, but Stripe's completion never does.

Root-cause evidence (instrumentation)

We instrumented StripeApplePay/StripeApplePay/Source/ApplePayContext/ STPApplePayContext.swift with NSLog + NotificationCenter posts and
forwarded them into Sentry. Every failing payment shows this exact sequence:

  1. presentApplePay completion fired
  2. didAuthorizePayment fired ← Face ID authorization accepted
  3. _completePayment started
  4. … nothing after

Confirmed absent in every failing case:

  • PaymentMethod.create completion fired — never logged
  • handleSuccess / handleFailure — never called
  • didCreatePaymentMethod / didCompleteWith — never called
  • No App Hang / ANR event captured — the main thread is not blocked

Conclusion: the flow stalls inside STPApplePayContext after
_completePayment begins — most likely the PaymentMethod.create network
call (or its completion handler) never returns.

To Reproduce
  1. React Native app with New Architecture (Fabric) enabled, Hermes.
  2. @stripe/stripe-react-native 0.74.0 (bundled Stripe iOS SDK 26.6.0).
  3. On an iOS 26.x device, call confirmPlatformPayPayment with an
    applePay config (see snippet above) for a live PaymentIntent.
  4. Tap Apple Pay → authorize with Face ID.
  5. Observe: spinner → "Payment Not Completed".
Expected behavior

confirmPlatformPayPayment resolves and the PaymentIntent is confirmed.

Actual behavior

The promise never settles; Apple Pay shows "Payment Not Completed".

Environment
  • React Native: 0.83.10 (New Architecture / Fabric enabled)
  • JS engine: Hermes
  • @stripe/stripe-react-native: 0.74.0
  • Stripe iOS SDK (StripeApplePay pod): 26.6.0
Devices
  • iPhone14,2 — iOS 26.6
  • iPhone14,3 — iOS 26.6
  • iPhone15,3 — iOS 26.5.2
Dominant language
TypeScript
Stars
1.4k
Forks
328
Avg merge
3d 9h
Merged PRs (30d)
23

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from stripe/stripe-react-native

All issues in stripe/stripe-react-native

Similar issues

More TypeScript issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.