Dynamic Links Firebase on App Install SwiftUI

Viewed 395

I can't get firebase dynamic links to work on new app installs for a SwiftUI app. Their documentation on step 6 and 7 shows stuff for AppDelegate https://firebase.google.com/docs/dynamic-links/ios/receive?authuser=0

Try 1

I moved it to scene delegate but then it asked me to a add application open url so I did and ended up with this code:

extension AppDelegate {
    
    func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
        let sceneConfig = UISceneConfiguration(name: nil, sessionRole: connectingSceneSession.role)
        sceneConfig.delegateClass = SceneDelegate.self // 
        return sceneConfig
    }
    
    
    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
        print("deeep shit")
        return application(app, open: url,sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,annotation: "")
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        print("deeep shit 2")
        if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
            // Handle the deep link. For example, show the deep-linked content or
            // apply a promotional offer to the user's account.
            // ...
            return true
        }
        return false
    }
}

class SceneDelegate: UIResponder, UIWindowSceneDelegate {
    
    var window: UIWindow?
    
    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use a UIHostingController as window root view controller.
        
        if let windowScene = scene as? UIWindowScene {
            let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: RootView())
            self.window = window
            window.makeKeyAndVisible()
        }
        
        guard let userActivity = connectionOptions.userActivities.first(where: { $0.webpageURL != nil }) else { return }
        
        print(userActivity)
    }
    
    func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        print(URLContexts, "URLContexts")
    }
    
    
    func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
        print(userActivity.webpageURL, userActivity.referrerURL, "sdhagvdgjks")
    }
    
}

RootView()
   .onOpenURL(perform: { url in
       DynamicLinks.dynamicLinks().handleUniversalLink(url) { dynamicL, error in
          if let url = dynamicL?.url {
                         
              /// do stuff

           }
        }
    })

Try 2

I skipped Scene Delegate and used the SwiftUI Modfier onContinuesUserActivity https://developer.apple.com/documentation/swiftui/view/oncontinueuseractivity(_:perform:)


extension AppDelegate {

    func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
        return application(app, open: url, sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String, annotation: "")
    }
    
    func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
        if let dynamicLink = DynamicLinks.dynamicLinks().dynamicLink(fromCustomSchemeURL: url) {
            // Handle the deep link. For example, show the deep-linked content or
            return true
        }
        return false
    }
}

RootView()
    .onOpenURL(perform: { url in
        DynamicLinks.dynamicLinks().handleUniversalLink(url) { dynamicL, error in
            if let url = dynamicL?.url {
                /// do stuff
            }
        }
    })
    .onContinueUserActivity(NSUserActivityTypeBrowsingWeb, perform: { activity in
        print(activity.webpageURL, activity.referrerURL, "please work")
    })

But then I get this error:

[Firebase/Analytics][I-ACS023001] Deep Link does not contain valid required params. URL params: {
    "match_message" = "No pre-install link matched for this device.";
    "request_ip_version" = "IP_V6";
}

Could someone please help me out?

0 Answers
Related