swiftfirebaseswiftuiappdelegatefirebase-dynamic-links

Firebase iOS clicking on shortened link returns ' Receive failed with error "Software caused connection abort" '


I'm just going to paste in a couple of my files so that you can test this really easily and see what's going on. I'm clicking the button and it's making the shortened dynamic link. Then, I'm typing out the DynamicLink in the notes app and then I press the link. I get redirected to the app and the following error is returned:

[connection] nw_read_request_report [C1] Receive failed with error "Software caused connection abort"

Side note: all of this is being tested on an iPhone 7 (a physical device, not the simulator).

FirebaseTestApp and AppDelegate:

import SwiftUI
import Firebase

@main
struct FirebaseTestApp: App {

@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate

var body: some Scene {
    WindowGroup {
        ContentView()
    }
}
}

class AppDelegate: NSObject, UIApplicationDelegate {

var functionMaster: functions = functions()

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
    FirebaseApp.configure()
    return true
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
     let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url)
     if dynamicLink != nil {
          print("Dynamic link : \(String(describing: dynamicLink?.url))")
          return true
     }
     return false
}

func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool {
    print("Successful penetration")
    guard let inComingURL = userActivity.webpageURL else { return false }
         print("Incoming Web Page URL: \(inComingURL)")
    self.functionMaster.handleIncomingDynamicLink(inComingURL)
         return true
}
}

functions class:

import Foundation
import Firebase
import UIKit

class functions: ObservableObject {
func makeDynamicLink() {
    var components = URLComponents()
    components.scheme = "https"
    components.host = "www.firebase-test.com" //this can be some random domain right? It doesn't have to actually exist yet?
    components.path = "/data"
    let stringifiedNumber = String(123)
    components.queryItems = [stringifiedNumber]
    let dynamicLinksDomainURIPrefix = "https://something.page.link"
    
    guard let linkParameter = components.url else { return }
    print("I am sharing \(linkParameter)")
    
    guard let linkBuilder = DynamicLinkComponents(link: linkParameter, domainURIPrefix: dynamicLinksDomainURIPrefix) else { return }
    
    if let myBundleId = Bundle.main.bundleIdentifier {
        linkBuilder.iOSParameters = DynamicLinkIOSParameters(bundleID: myBundleId)
    }
    linkBuilder.iOSParameters?.appStoreID = "962194608"
    
    linkBuilder.socialMetaTagParameters = DynamicLinkSocialMetaTagParameters()
    linkBuilder.socialMetaTagParameters?.title = testLocation.name
    linkBuilder.socialMetaTagParameters?.descriptionText = testLocation.address
    
    linkBuilder.shorten { [weak self] (url, warnings, error) in
        if let error = error{
            print("Firebase encountered an error: \(error)")
            return
        }
        if let warnings = warnings {
            for warning in warnings {
                print("Firebase Warning: \(warning)")
            }
        }
        guard let url = url else { return }
        print("The short URL is: \(url.absoluteString)")
        
        self?.showShareSheet(url: url)
    }

    guard let longDynamicLink = linkBuilder.url else { return }
    print("The long URL is: \(longDynamicLink)")
}

func showShareSheet(url: URL) {
    let promoText = "Check out this thing I've marked in FirebaseTest!"
    let activityVC = UIActivityViewController(activityItems: [promoText, url], applicationActivities: nil)
    UIApplication.shared.windows.first?.rootViewController?.present(activityVC, animated: true)
}

func handleIncomingDynamicLink(_ dynamicLink: URL) {

    _ = DynamicLinks.dynamicLinks().handleUniversalLink(dynamicLink) { (dynamiclink, error) in

          guard error == nil else {
          print("Found an error: \(error?.localizedDescription ?? "")")
          return
          }
          print("Dynamic link : \(String(describing: dynamiclink?.url))")
          let path = dynamiclink?.url?.path
          var id = 0
          if let query = dynamiclink?.url?.query {
              let dataArray = query.components(separatedBy: "=")
              id = Int(dataArray[1]) ?? 0
          }
         if path == "data" {
             //Write code here
         }
       }
    
}
}

ContentView:

import SwiftUI

struct ContentView: View {

@ObservedObject var functionMaster: functions = functions()

var body: some View {
    Button("Click me to run some firebase stuff") {
        functionMaster.makeDynamicLink()
    }
        .padding()
}
}

In browser, when I navigate to https://something.page.link/apple-app-site-association, I get this:

https://i.sstatic.net/6Ndo0.png


Solution

  • Try installing the files for the the simulator you want to test on, update Xcode, delete all other versions.