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.