Issue with SFSafariViewController Not Always Detecting Redirect After Stripe Payment

I am using SFSafariViewController to process payments via a Stripe checkout URL. Once the payment is completed, the user is redirected to a success URL. I have also added associated domains for deep linking. Below is my implementation:

func presentCheckout(url: String) {
    showProgressHUD()
    
    let checkoutURL = URL(string: url)!
    safariVC = SFSafariViewController(url: checkoutURL)
    safariVC.delegate = self
    self.present(safariVC, animated: true)
}

// Delegate method implementations
func safariViewControllerDidFinish(_ controller: SFSafariViewController) {
    print("SafariViewController dismissed")
    // Handle dismissal
}

func safariViewController(_ controller: SFSafariViewController, initialLoadDidRedirectTo URL: URL) {
    print(URL.absoluteString)

    if URL.absoluteString.contains("xsworld/payment/stripe/checkout/success") {
        controller.dismiss(animated: true) {
            if URL.absoluteString.contains("/v1/resources/xsworld/payment/stripe/checkout") {
                NotificationCenter.default.post(
                    name: Notification.Name("StripePaymentStatus"),
                    object: nil,
                    userInfo: ["url": URL]
                )
            }
        }
    } else if URL.absoluteString.contains("xsworld/payment/stripe/checkout/cancel") {
        // Handle failure
        NotificationCenter.default.post(
            name: Notification.Name("StripePaymentStatus"),
            object: nil,
            userInfo: ["url": URL]
        )
    }
}

func safariViewController(_ controller: SFSafariViewController, didCompleteInitialLoad didLoadSuccessfully: Bool) {
    if didLoadSuccessfully {
        print("Initial page loaded successfully")
    } else {
        print("Initial page load failed")
    }
}

Issue: The safariViewController(_:initialLoadDidRedirectTo:) method does not always get called after the payment is completed. Sometimes it works as expected, and sometimes it does not trigger at all.

What I’ve Tried:

  • Ensuring the associated domains for deep linking are correctly set up.
  • Checking the success and failure URLs.
  • Debugging to see if the redirect happens but is not detected.

What I Need Help With: I want to ensure that the redirection always works after the payment process is completed, whether through deep linking or another reliable approach. How can I guarantee that my app correctly detects and handles the redirect every time?

Any guidance or best practices would be greatly appreciated.

Issue with SFSafariViewController Not Always Detecting Redirect After Stripe Payment
 
 
Q