On this page
No Headings
Last updated: September 14, 2026
Common problems integrating the PayPal Mobile SDK v3.0.0 on Android, organized by symptom. For an error that happens inside one specific flow, also check that guide's Result handling section.
These are the build and dependency errors you're most likely to hit while adding the SDK.
Failed to resolve: com.paypal.android:...mavenCentral() is in your repositories and use a current v3 version; add only the modules you use.browser-switch, Kotlin stdlib) conflicts with another library.These errors show up early, usually on your first call into the SDK, and generally trace back to config or call order.
PayPalEvent.SESSION_NOT_STARTED reported, and the start() or vault() callback receives a PayPalError.sessionNotCreatedError failurecreatePayPalSession() was not called first.createPayPalSession(tokenType, userIdentity, urlConfig, userAction) in your button's onClick, before or alongside order creation.start() or vault() proceeds without a sessionNotCreatedError failure.start()coreEnvironment, or a missing or not-valid merchantId, required in v3 and distinct from your client ID.CoreConfig: clientId, merchantId, and whether CoreEnvironment.SANDBOX or .LIVE is set as intended.start() launches the checkout flow without an auth or configuration error.These problems appear once the buyer leaves your app for checkout and needs to find their way back.
/.well-known/assetlinks.json, with your app's SHA-256 fingerprint, android:autoVerify="true", and Open supported links enabled. Keep return and cancel URLs under the registered host + prefix. Registering a fallbackSchemeUrl alongside your App Link covers delivery failures. The SDK only requires at least one of returnAppUrl or fallbackSchemeUrl to be set, but setting both is the safer default.PayPalFinishStartResult after the buyer returnsstart()'s own callback only reports PayPalPresentAuthChallengeResult (Success or Failure), meaning whether checkout launched, not the outcome. The actual Success, Canceled, Failure, or NoResult outcome comes from finishStart(intent). Also remember finishStart(intent) returns PayPalFinishStartResult?. A null result, meaning no matching start() or vault() call in this process, is a distinct case from NoResult and needs its own branch.checkoutClient.finishStart(intent) in onNewIntent, and set the return activity to launchMode="singleTop".finishStart(intent) returns a non-null PayPalFinishStartResult after the buyer returns.These come up after the buyer returns, when the SDK is reporting an outcome you didn't expect.
CancelCancel as a normal outcome, returning the buyer to checkout; if it happens unexpectedly often, re-check your App Link and return handling.Cancel, and a genuine cancel still returns the buyer to checkout cleanly.presentAuthChallenge() on an AuthorizationRequired result, or did not call finishApproveOrder(intent) on return.AuthorizationRequired, call cardClient.presentAuthChallenge(activity, authChallenge), then cardClient.finishApproveOrder(intent) in onNewIntent.AuthorizationRequired result and finishApproveOrder(intent) completes after it.This happens when Android reclaims your app's process while a challenge is still in flight.
cardClient.instanceState before the process dies and call cardClient.restore(instanceState) on recreation.CoreConfig, and register your return links.