firebase-ios-sdk: Firebase Dynamic Links sometimes got error NSPOSIXErrorDomain Code=53 "Software caused connection abort"

  • Xcode version: 10.1
  • Firebase SDK version: 5.14
  • Firebase Component: FirebaseDynamicLinks
  • Component version: 3.3.0
  • IOS 12

I created dynamic links from firebase console. Then I clicked that link to open my app. Sometimes I got success, but sometimes I got error from DynamicLinks.dynamicLinks().handleUniversalLink in AppDelegate

Error Domain=NSPOSIXErrorDomain Code=53 “Software caused connection abort” UserInfo={_kCFStreamErrorCodeKey=53, _kCFStreamErrorDomainKey=1}

Steps to reproduce:

  1. click dynamic link to open my app.
  2. switch back and click dynamic link again
  3. loop 1-2

Relevant Code:

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        if let incomingURL = userActivity.webpageURL {
            let handleLink = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL, completion: { (dynamicLink, error) in

                guard error == nil else {
                    debugPrint(error)
                }

                if let dynamicLink = dynamicLink {
                    self.handleIncomingDynamicLink(dynamicLink)
                } else {
                    // Check for errors
                }
            })
            return handleLink
        }
        return false
    }

I’ve read issue from react-native-firebase

And this issue was fixed in 5.2.1 yesterday(22/01/2019)

About this issue

  • Original URL
  • State: closed
  • Created 5 years ago
  • Comments: 18 (7 by maintainers)

Commits related to this issue

Most upvoted comments

@bhadresh8141 I added delay 50ms before handleUniversalLink and it worked.

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        usleep(50000)
        if let incomingURL = userActivity.webpageURL {
            let handleLink = DynamicLinks.dynamicLinks().handleUniversalLink(incomingURL, completion: { (dynamicLink, error) in

        ..........
}

I was able to get around this using background tasks. So far, it seems to be working.


class AppDelegate: UIResponder, UIApplicationDelegate {
    /// Used to complete Firebase DynamicLink in background to avoid random error. (Reference: )
    fileprivate var backgroundTask: UIBackgroundTaskIdentifier = .invalid

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
        backgroundTask = UIApplication.shared.beginBackgroundTask { [weak self] in
            UIApplication.shared.endBackgroundTask(self!.backgroundTask)
            self?.backgroundTask = .invalid
        }

        let handled = DynamicLinks.dynamicLinks().handleUniversalLink(userActivity.webpageURL!) { (dynamiclink, error) in
            guard error == nil else {
                print("⛔️ problem handling Firebase DynamicLink: \(String(describing: error))")
                return
            }
            self.handeFirebaseUniversalLink(dynamiclink?.url)
        }

        return handled
    }
}

According to Apple’s docs the UIApplication.shared.beginBackgroundTask handler is called shortly before the app’s remaining background time reaches 0. So as long as handleUniversalLink finishes before the time allocated to the background task, it should be good.

@morganchen12 This is now happening to me, exactly as reported here. Same link, it works once after tapping, second time doesn’t, then works again, then doesn’t… on and on.